Meu website está hospedado na China e, como vocês sabem, todos os sites chineses precisam registrar uma licença junto ao governo; portanto, todos os sites chineses estão sob supervisão.
Alguém relatou recentemente ao meu provedor de CDN, a Qiniu (que também é uma empresa chinesa), que algumas imagens em meu site são ilegais. Meu provedor de CDN me informou que devo excluir essas imagens e “atualizar os caches de URL”, caso contrário, poderão suspender minha conta de acordo com a lei. No entanto, descobri que essas imagens são avatares de usuários, e não sei como excluí-los.
De acordo com How to Delete Uploaded Files? - #3 by codinghorror e How to Delete Uploaded Files? - #25 by Falco, imagens carregadas sem referências serão excluídas automaticamente em 48 horas. Substituí esses avatares de usuários pelas imagens padrão com letras, mas nada parece estar acontecendo com os antigos avatares após 72 horas. Talvez seja porque os avatares de usuários não sejam considerados imagens carregadas?
Alguma ideia sobre como posso excluir completamente os arquivos de avatar de usuário no meu servidor?
Ah, desculpe. Os avatares funcionam de maneira diferente. Eu precisaria analisar o código para entender onde procurar. Se isso for uma emergência e você tiver orçamento, entre em contato comigo diretamente. Caso contrário, provavelmente não terei tempo livre para investigar. Talvez alguém mais saiba.
Para evitar que os usuários façam upload de futuros avatares, você pode desativar a configuração allow uploaded avatars e ativar a configuração do site selectable avatars com uma grande seleção.
Acho que você pode precisar fazer o upload de um marcador de posição de substituição para que a exclusão automática ocorra — o registro do usuário ainda mantém a imagem do avatar carregada ativa, mesmo que não esteja em uso.
Os arquivos carregados são nomeados com base no SHA1 do conteúdo da imagem — isso pode ajudá-lo a encontrar o arquivo de suporte?
Tenho mais de 7 mil usuários registrados e menos de 5 usam avatares ilegais sem saber, então não quero transformar isso em um problema de 0 ou 1; prefiro resolver caso a caso, em vez de impedir todos os usuários de usar avatares personalizados.
root@iosre:~# cd /var/discourse/shared/
root@iosre:/var/discourse/shared# /var/discourse/launcher enter app
AVISO: A versão do Docker 17.05.0-ce está descontinuada, recomenda-se atualizar para a 17.06.2 ou mais recente.
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: variável ou método local `lincwee' não definido para main:Object
from (pry):2:in `__pry__'
[3] pry(main)> a=UserAvatar.where(user_id: 'lincwee')
=> []
[4] pry(main)>
Como você pode ver, são avatares de dois usuários, que são memes de um ex-presidente chinês. Novamente, o provedor de CDN pediu que eu excluísse esses arquivos do servidor e atualizasse a CDN.
Pude ver pelos links que os usuários eram “baal998” e “lincwee”. De acordo com o trecho de código em minha última postagem, a URL do avatar enviado de “lincwee” era /uploads/default/original/2X/5/55512211b1c8969c8038b79840464952cd3eb089.jpeg, enquanto para “baal998” era /uploads/default/original/2X/c/cb2188eaeecc3a648f021fa00da4734bd60ca183.jpg. Em seguida, executei find /var/discourse/shared/ -name *55512211b1c8969c8038b79840464952cd3eb089* e excluí todos os arquivos encontrados; funcionou para “lincwee”. Mas não tive sorte com “baal998”; ainda consegui acessar https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png, mesmo que não houvesse mais arquivos com o nome *cb2188eaeecc3a648f021fa00da4734bd60ca183*.
Ou, para simplificar: como o Discourse processa uma visita a https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png? Se alguém familiarizado com o código-fonte puder me indicar o arquivo de origem ou a classe/função, seria muito útil. Obrigado!
Além disso, comece buscando do seu servidor, não da CDN. Você quer ter certeza de que está resolvendo o problema no lugar certo. Assim que tiver certeza de que o servidor não está enviando as imagens, você pode trabalhar com a CDN.
Sim, e você vê que está sendo enviado pelo seu servidor. Então, esse é o link que deve ser corrigido. Depois que você impedir o envio das imagens, pode limpar o CDN.