Come elimino il file dell'avatar dell'utente?

Ciao team,

Il mio sito web è ospitato in Cina e, come sapete, tutti i siti cinesi devono registrarsi per ottenere una licenza dal governo; pertanto, tutti i siti cinesi sono sotto sorveglianza.

Recentemente qualcuno ha segnalato al mio provider CDN, Qiniu (anch’esso un’azienda cinese), che alcune immagini sul mio sito sono illegali. Il mio provider CDN mi ha informato che dovrei eliminare queste immagini e “aggiornare la cache degli URL”, altrimenti potrebbero sospendere il mio account in base alla legge. Tuttavia, ho scoperto che queste immagini sono avatar degli utenti e non so come eliminarli.

Secondo How to Delete Uploaded Files? - #3 by codinghorror e How to Delete Uploaded Files? - #25 by Falco, le immagini caricate senza riferimenti vengono eliminate automaticamente dopo 48 ore. Ho sostituito questi avatar degli utenti con quelli predefiniti a forma di lettera, ma dopo 72 ore non sembra essere successo nulla agli avatar vecchi. Forse è perché gli avatar degli utenti non sono considerati immagini caricate?

Avete qualche idea su come eliminare completamente i file degli avatar degli utenti dal mio server?

Grazie in anticipo,
Yinglu

3 Mi Piace

Credo che funzioni ancora così.

Dall’URL del file che vuoi eliminare, estrai il nome del file.

cd /var/discourse/shared/uploads
find . -name =FILENAME= | xargs exec rm

Quindi procedi come necessario per rimuoverlo dalla tua CDN.

3 Mi Piace

Grazie per l’aiuto! Ho provato ma non ha funzionato :frowning:

Il file è https://iosre.com/user_avatar/iosre.com/lincwee/135/5414_2.png, quindi immagino che il nome del file sia 5414_2.png, corretto?

Inoltre, /uploads si trova sotto /shared/standalone e non sotto /shared.
Non esiste un file del genere in /uploads, come puoi vedere dalla shell:

root@iosre:/var/discourse/shared# ls
standalone
root@iosre:/var/discourse/shared# cd standalone/
root@iosre:/var/discourse/shared/standalone# ls
backups  postgres_backup  postgres_run  state  uploads
log      postgres_data    redis_data    tmp
root@iosre:/var/discourse/shared/standalone# find . -name 5414_2.png
root@iosre:/var/discourse/shared/standalone# cd uploads/
root@iosre:/var/discourse/shared/standalone/uploads# find . -name 5414_2.png
root@iosre:/var/discourse/shared/standalone/uploads#

Hai altre idee?

2 Mi Piace

Oh, scusa. Gli avatar funzionano in modo diverso. Dovrei esaminare il codice per capire dove guardare. Se si tratta di un’emergenza e hai un budget, ti prego di contattarmi direttamente. Altrimenti, probabilmente non avrò tempo libero per indagare. Forse qualcun altro lo sa.

2 Mi Piace

Mi dispiace, questo è un sito personale e al momento non ho alcun budget. Grazie comunque per la tua risposta!

1 Mi Piace

Per impedire agli utenti di caricare futuri avatar, puoi disabilitare l’impostazione del sito allow uploaded avatars e abilitare selectable avatars con una vasta selezione.

Penso che tu possa dover caricare un segnaposto sostitutivo per ottenere l’eliminazione automatica: il record utente mantiene ancora attivo l’immagine dell’avatar caricato, anche se non è in uso.


I file caricati sono denominati in base all’SHA1 del contenuto dell’immagine: questo potrebbe aiutarti a trovare il file di backup?

3 Mi Piace

Qualcosa del genere

a=UserAvatar.where(user_id: 1234)
u=Upload.find(a.custom_upload_id)
upload_url=u.url

Quindi

cd /var/discourse/shared/standalone
rm UPLOAD_URL_FROM_ABOVE
3 Mi Piace

Ho oltre 7.000 utenti registrati e meno di 5 utilizzano avatar illegali senza saperlo, quindi non voglio trasformarlo in un problema di tipo 0 o 1; preferisco risolverlo caso per caso invece di impedire a tutti gli utenti di usare avatar personalizzati.

Come posso farlo? Non ne ho la minima idea

3 Mi Piace

Ad esempio, questa immagine https://iosre.com/user_avatar/iosre.com/lincwee/135/5414_2.png

snakeninny@bogon ~ % shasum /Users/snakeninny/Desktop/5414_2.png.jpeg 
c8d561c5484a1f197abd32995411caaa25e53bd6  /Users/snakeninny/Desktop/5414_2.png.jpeg
root@iosre:~# cd /var/discourse/shared/standalone
root@iosre:/var/discourse/shared/standalone# find ./ -name *c8d561c5484a1f197abd32995411caaa25e53bd6*
root@iosre:/var/discourse/shared/standalone# 

Nessun risultato. È questo che intendevi? Hai qualche idea?

1 Mi Piace

È questo un frammento di codice? Dove e come devo eseguirlo? Ero un sviluppatore iOS e non sono familiare con la programmazione front-end.

1 Mi Piace

È per la console di Rails. Puoi accedervi con

cd /var/discourse 
./launcher enter app 
rails c

Puoi usare exit per uscire. All’interno del container, usa cd /shared invece del percorso completo indicato sopra.

2 Mi Piace

Per l’utente lincwee in https://iosre.com/user_avatar/iosre.com/lincwee/135/5414_2.png
UserAvatar.where(user_id: 'lincwee') restituisce un array vuoto. Avete qualche idea?

root@iosre:~# cd /var/discourse/shared/
root@iosre:/var/discourse/shared# /var/discourse/launcher enter app 
WARNING: Docker versione 17.05.0-ce deprecata, si consiglia l'aggiornamento a 17.06.2 o versioni successive.
root@iosre-app:/var/www/discourse# rails c
[1] pry(main)> a=UserAvatar.where(user_id: 1234)
=> []
[2] pry(main)> a=UserAvatar.where(user_id: lincwee)
NameError: variabile o metodo locale `lincwee' non definito per main:Object
da (pry):2:in `__pry__'
[3] pry(main)> a=UserAvatar.where(user_id: 'lincwee')
=> []
[4] pry(main)> 
1 Mi Piace

Avrai bisogno dell’ID, non del nome utente.

u=User.find_by(username: "lincwee")

Potrai poi vedere l’ID o accedervi con u.id

3 Mi Piace

Grazie, ha funzionato in una certa misura. Ho eseguito

cd /var/discourse/shared/
/var/discourse/launcher enter app
rails c

nel terminale e poi ho eseguito il codice

uid = User.find_by(username: "user_name").id
user_avatars = UserAvatar.where(user_id: uid)
user_avatar = user_avatars[0]
upload_url = Upload.find(user_avatar.custom_upload_id).url

per elencare tutti gli URL degli avatar e li ho cancellati dal mio server.
Ma immagino che debba ancora aggiornare ulteriormente il sistema/la cache? Come dovrei farlo?

3 Mi Piace

Ho ricevuto un’altra email dal mio provider CDN e hanno bloccato il mio account CDN. Quindi devo aggiornare questa discussione per ricevere ulteriore aiuto.

La nuova email diceva che i seguenti link erano illegali.

https://cdn.iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/64/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/75/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/75/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/75/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/lincwee/135/5414_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/75/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/lincwee/75/5414_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/96/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/lincwee/90/5414_2.png

Come potete vedere, si tratta di due avatar utente, che sono meme di un ex presidente cinese. Ancora una volta, il provider CDN mi ha chiesto di eliminare questi file dal server e aggiornare la CDN.

Dai link ho potuto vedere che gli utenti erano “baal998” e “lincwee”. Secondo il frammento di codice nel mio ultimo post, l’URL dell’avatar caricato di “lincwee” era /uploads/default/original/2X/5/55512211b1c8969c8038b79840464952cd3eb089.jpeg, mentre per “baal998” era /uploads/default/original/2X/c/cb2188eaeecc3a648f021fa00da4734bd60ca183.jpg. Ho quindi eseguito find /var/discourse/shared/ -name *55512211b1c8969c8038b79840464952cd3eb089* ed eliminato tutti i file trovati; ha funzionato per “lincwee”. Ma non ho avuto fortuna con “baal998”: potevo ancora accedere a https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png anche se non c’erano più file con il nome *cb2188eaeecc3a648f021fa00da4734bd60ca183*.

Allora, dove diavolo è archiviato https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png sul mio server? :sob:

1 Mi Piace

Hmm, è una situazione difficile. Forse @falco o qualcun altro che ha lavorato di recente sugli avatar può darti un consiglio?

2 Mi Piace

O per renderlo più semplice: come analizza Discourse una visita a https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png? Se qualcuno che conosce il codice sorgente può indicarmi il file sorgente o la classe/funzione, sarebbe davvero utile. Grazie!

1 Mi Piace

Cerca nel modello Uploads, credo.

Inoltre, inizia recuperando i dati dal tuo server, non dalla CDN. Vuoi essere sicuro di risolvere il problema nel posto giusto. Una volta accertato che il server non stia inviando le immagini, puoi lavorare con la CDN.

1 Mi Piace

Dato che https://cdn.iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png proviene dalla CDN,
https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png dovrebbe provenire dal mio server, giusto?

3 Mi Piace

Sì, e vedi che viene inviato dal tuo server. Quindi è quel link che dovresti cercare di risolvere. Dopo aver fatto in modo che smetta di inviare le immagini, puoi cancellare il CDN.

2 Mi Piace