Eu acho que eu entendo o que você quer dizer. Você deseja gerar um arquivo com base no usuário atual (ou no arquivo solicitado). Você atualmente faz isso em HTTPS, mas também quer disponibilizá-lo em SFTP ... Certo? Problema interessante.
Você pode ficar chocado ao saber que não há nada que possa fazer o que você está pedindo para sair da caixa ... Qualquer coisa é possível.
Minha primeira abordagem envolve escrever seu próprio sistema de arquivos!
Eu começaria com o FUSE. Além disso, python-fusível. Aqui está o o único tutorial que eu já usei para o FUSE. Ele vai te levar ao ponto em que você pode começar a editar as coisas. Eu gostaria de:
- Listar apenas um arquivo [falso] em
readdir()
- Saiba como encontrar o nome de usuário no sistema de arquivos
- Hotwire
open()
eread()
para extrair derequests.get('your URL')
usando o nome de usuário.open()
talvez precise ser falsificado eread()
seja um identificador da solicitaçãorequests
. - Você provavelmente precisará corrigir e aplicar muitos dos outros métodos para que eles retornem dados, mas eles obviamente serão falsificados na maioria das vezes
- Monte este sistema de arquivos FUSE em algum lugar no seu SFTP que todos possam ver como somente leitura
Isso funcionaria para a abordagem sftp (você poderia ver o caminho completo em vez do usuário, por exemplo), mas você precisaria de uma única conta sftp com a qual as pessoas pudessem se conectar.
Como alternativa, se cada usuário tiver uma conta, você poderá tentar monitorar o acesso a um diretório de propriedade de cada usuário. inotifywatch
e inotifywait
podem permitir que você veja o acesso a um diretório.
inotifywait -mrq --format '%w' /home/*/magicdir/ | while read DIR; do
user=${DIR:6:-10} # that is based on the length of /home/ and /magicdir/
wget -qO $DIR https://path/to/items/${user}
done
E deixe que corra em algum lugar no fundo. Ele atualizará o arquivo do site sempre que acessar o diretório. Você pode querer verificá-lo (com um echo blaaa $DIR
) para certificar-se de que não está martelando o servidor. Pode não exibir um arquivo na primeira vez que carregar o diretório.