Per fare questo, ho scoperto che il modo in cui funziona il plugin è con due file di classe (per ogni servizio) -
./class/wpmfAddonAws3Admin.php
&
./class/wpmfAws3.php
(per S3).
Il file "admin" è dove si trova la funzionalità front-end; l'altro è per l'interfacciamento con l'SDK S3. In breve, il file "admin" viene caricato tramite Ajax o il front-end WP e la sua funzionalità richiama il file S3 (utilizzando le credenziali archiviate), consentendogli di eseguire azioni (come la sincronizzazione) sul bucket S3. Funziona molto bene, ma c'è un grosso problema nel farlo funzionare con DigitalOcean:
DigitalOcean è NON regione agnostica. Ciò significa che ogni richiesta è nell'ambito di una regione specifica, mentre S3 non lo è. Questo non è un problema in sé (il nostro hack continuerà a funzionare), ma se si desidera ottenere funzionalità "complete" (diverse regioni / bucket), è necessario assicurarsi di dover invocare la classe "non admin" con impostazioni delle credenziali personalizzate ogni volta.
-
L'hack è costituito da quanto segue:
a) Modificare il file "admin" per utilizzare "endpoint" per la propria area di DigitalOcean Spaces b) Assicurarsi che la regione "us-east-1" sia sempre impostata c) Modificare l '"URL allegato" per ciascuno degli allegati sincronizzati nella libreria multimediale
-
Il primo passo è cambiare le opzioni "predefinite" nel file "admin":
A partire dalla riga 34 di
./class/wpmfAddonAws3Admin.php
, vedrai che vengono create una serie di impostazioni predefinite per l'altra classe. Devi fare quanto segue:
Nel caso sopra, la nostra "regione" è AMS3. Questo può essere diverso a seconda della posizione in cui è conservato il tuo spazio.
La modifica di questo codice non fa molto, ma garantisce che vengano utilizzati gli stessi valori predefiniti ogni volta (e che sia impostato "endpoint", che è la base dell'intero hack).
-
Dopo aver fatto ciò, passiamo all'altro file di classe
./class/wpmfAws3.php
:
Questo, come detto, viene invocato ogni volta che la classe "admin" desidera comunicare con S3 / DO.
Quello che faremo qui è "falsificare" l'endpoint, nel senso che lo codifichiamo. Ciò cambierà l'URL a cui l'SDK AWS invia le richieste, il che significa che le nostre credenziali DigitalOcean devono essere accettate. Per farlo, aggiungi semplicemente le seguenti due righe rispettivamente alla riga 73 e 74 :
Quanto sopra imporrà la modifica dell'endpoint ogni volta che si utilizza una delle funzionalità "admin".
Funziona prendendo i dettagli di cui sopra e unendoli con le credenziali S3 memorizzate (nel tuo caso, chiave API DigitalOcean), consentendo allo script di comunicare con DO. Ho descritto sopra che questo è limitato perché significa che sei in grado di comunicare solo con una singola regione DO (qualcosa che affronterò completamente in un minuto).
-
Dopo aver fatto ciò, l'ultima cosa che dobbiamo fare è cambiare l '"URL" per ciascuno degli allegati sincronizzati con DO.
Questo viene fatto all'interno della classe "admin", nelle funzioni "wpGetAttachmentUrl" (# 2048) e "addMetaInfo" (# 1121):
Non sono sicuro di quale di queste funzioni fornisca effettivamente la funzionalità (credo sia # 2048), ma le ho comunque modificate entrambe.
Alla fine, tutto ciò che stai facendo è cambiare il link AWS in uno DigitalOcean. Quello che ha funzionato bene per questo trucco è stato il seguente:
Come accennato in precedenza, la correzione "completa" dipende da come DigitalOcean si interfaccia con l'SDK AWS.
In parole semplici, S3 ti permette di "connetterti" e quindi scegliere un bucket in qualsiasi regione; DigitalOcean ti consente solo di connetterti e interagire con a singolo regione ogni volta.
Se vuoi ottenere la piena funzionalità del plugin (con DigitalOcean), c'è molta personalizzazione che deve avvenire nella classe "admin". Fondamentalmente è necessario assicurarsi che OGNI richiesta sia indirizzata all'endpoint corretto, che richiede tempo e è piuttosto costoso (in termini di connessioni API).
-
Abbiamo "un po '" funzionato, anche se in modo approssimativo. Sto scrivendo questo qui come mezzo per condividere i progressi, e forse qualcun altro preferirebbe prenderlo o qualcosa del genere.
--
Devi fare 4 cose principali per farlo funzionare separatamente:
1. Creare un flusso UI "DigitalOcean" separato 2 Rimuovere eventuali riferimenti a S3 (sostituendo con DigitalOcean se necessario) 3 Modifica il flusso di alcune funzionalità per consentire il supporto tra regioni 4 Assicurarsi che DO non interferisca con S3
-
1. Per aggiungere una scheda "DigitalOcean" separata, è necessario andare al plug-in originale e individuare il file "cloud.php" (./class/pages/settings/cloud.php):
<div>
<div class="wpmf_row_full">
<?php
if (is_plugin_active('wp-media-folder-addon/wp-media-folder-addon.php')) {
// phpcs:ignore WordPress.Security.EscapeOutput -- Content already escaped in the method
echo $html_tabdo;
}
?>
</div>
</div>
</div>
</div>
L'ho appena aggiunto dopo la scheda S3.
Per farlo funzionare, devi quindi compilare la variabile $ html_tabdo, che viene fatta cambiando due file.
Il primo è il file ./class/pages/settings/wp-folder-options.php (plugin principale / originale):
Il secondo è ./class/class-wp-folder-option.php:
Questo popolerà la scheda con le varie impostazioni DigitalOcean.
-
2 Per sostituire S3 con DO, è necessario assicurarsi di disporre di un set completamente diverso di file e impostazioni della coda per garantire che i due sistemi non siano in conflitto.
Ciò richiede molte cose, principalmente creando un nuovo set di classi "admin" e "connection". Non approfondirò come farlo, ma fondamentalmente si desidera creare un nuovo set di classi che creino le proprie impostazioni di configurazione e utilizzarle per connettersi agli endpoint per DO:
-
3 Supporto tra regioni.
Come menzionato nel post precedente, il sistema di DO funziona in modo diverso da S3, in quanto ogni richiesta è indirizzata a una regione specifica (S3 è indipendente dalla regione).
Ciò significa che se vuoi lavorare con secchi / spazi di altre regioni, devi fare un po 'di magia per far funzionare tutto insieme.
Sto ottenendo poco tempo, quindi non tratterò tutto qui, ma dirò che se si desidera far funzionare il sistema, è necessario modificare il file "./class/wpmfDo.php" nel backend - assicurandoti di essere in grado di passare l'endpoint che desideri invocare l'istanza dell'SDK per ...
Questo ci dà la possibilità di definire diversi "endpoint" ("regioni" per quando è necessario elencare spazi diversi ecc.
Un buon esempio di ciò in azione è quando si desidera elencare i bucket disponibili:
Per ottenere quanto sopra, è necessario scorrere tutte le aree disponibili in DO, quindi creare un nuovo array di bucket disponibili. Come apprezzerai, questa è stata una soluzione complicata per creare:
Questo crea la variabile $ list_buckets dalle diverse regioni (non solo quella con cui hai usato la connessione).
-
4 Non l'ho ancora fatto
Fondamentalmente, devi essere in grado di far funzionare DigitalOcean con S3, anche quando S3 è presente.
Ciò richiederà il funzionamento della funzionalità di "sincronizzazione" e una serie di altre cose, che non ho ancora completato.
Abbiamo rilevato che sei venuto qui da un sito Web che distribuisce fonti non ufficiali delle nostre estensioni. Poiché ci preoccupiamo per tutti i nostri utenti, compresi gli hacker :) vogliamo avvisarti prima di fare qualcosa di cui ti pentirai.
Ne vale la pena usando estensioni annullate? Beh, non la pensiamo così, è un vero problema per molte ragioni: