Stash-box é um servidor API de indexação de vídeo e metadados de código aberto para pornografia desenvolvido pela Stash App. O objetivo do stash-box é fornecer um banco de dados de metadados pornográficos voltado para a comunidade, semelhante ao que o MusicBrainz faz para a música. A submissão e edição de metadados devem seguir os mesmos princípios do MusicBrainz. Saiba mais aqui. A instalação do Stash-box criará um banco de dados vazio para você preencher.
Se você é um usuário do Stash, não precisa instalar o stash-box. A comunidade Stash possui um servidor com muitos títulos dos quais você pode extrair dados. Você pode obter as informações de login em nosso guia de acesso ao StashDB.
Você pode encontrar um arquivo docker-compose
para implantação de produção aqui. Você pode omitir o Traefik se não precisar de um proxy reverso.
Se você já tem o PostgreSQL instalado, você pode instalar o stash-box sozinho no Docker Hub.
Stash-box oferece suporte a macOS, Windows e Linux. Versões para Windows e Linux podem ser encontradas aqui.
make
para construir o aplicativo.stash-box-config.yml
no diretório atual). Nesse caso, ele irá gerar um arquivo de configuração padrão com uma string de conexão PostgreSQL padrão ( postgres@localhost/stash-box?sslmode=disable
). Você pode ajustar a cadeia de conexão conforme necessário.CREATE EXTENSION pg_trgm; CREATE EXTENSION pgcrypto;
por um superusuário antes de executar novamente o Stash-box. Se o esquema não estiver presente, ele será criado no banco de dados.sslmode
está documentado aqui. Use sslmode=disable
para não usar SSL para a conexão com o banco de dados. O padrão é require
. Na segunda vez que o stash-box for executado, o stash-box executará as migrações de esquema para criar as tabelas necessárias. Ele também irá gerar um usuário root
com uma senha aleatória e uma chave de API. Essas credenciais são impressas uma vez no stdout e não são registradas. O sistema irá regenerar o usuário root na inicialização se ele não existir. Você pode forçar o sistema a criar um novo usuário root excluindo a linha do usuário root do banco de dados e reiniciando o Stash-box. Você precisará capturar a saída do console com seu usuário Admin na primeira inicialização bem-sucedida do executável do StashDB. Caso contrário, você precisará permitir que o Postgres recrie o banco de dados antes de postar novamente um novo usuário root
.
Stash-box é uma ferramenta com opções de linha de comando para facilitar. Para ver quais opções estão disponíveis, execute stash-box --help
em seu terminal.
Aqui está um exemplo de como você pode executar o stash-box localmente na porta 80:
stash-box --host 127.0.0.1 --port 80
Nota: Este comando deve funcionar em OSX/Linux.
Quando você inicia o stash-box pela primeira vez, ele gera um arquivo de configuração chamado stash-box-config.yml
em seu diretório de trabalho atual. Este arquivo contém configurações padrão para stash-box, incluindo:
0.0.0.0
9998
Você pode alterar esses padrões, se necessário. Por exemplo, se quiser desabilitar o playground GraphQL e os cookies de vários domínios, você pode definir is_production
como true
.
Existem duas maneiras de autenticar um usuário no Stash-box: uma sessão ou uma chave API.
Autenticação baseada em sessão: para fazer login, envie uma solicitação para /login
com o username
e password
em texto simples como valores de formulário. A autenticação baseada em sessão definirá um cookie necessário para todas as solicitações subsequentes. Para sair, envie uma solicitação para /logout
.
Autenticação de chave de API: para usar uma chave de API, defina o cabeçalho ApiKey
com o valor da chave de API do usuário.
Chave | Padrão | Descrição |
---|---|---|
title | Stash-Box | Título da instância, usado no título da página. |
require_invite | true | Se for verdade, os usuários deverão inserir uma chave de convite, gerada por usuários existentes, para criar uma nova conta. |
require_activation | false | Se for verdade, os usuários deverão verificar seu endereço de e-mail antes de criar uma conta. Requer que email_from , email_host e host_url sejam definidos. |
activation_expiry | 7200 (2 horas) | O tempo - em segundos - após o qual uma chave de ativação (enviada por e-mail ao usuário para fins de verificação de e-mail ou redefinição de senha) expira. |
email_cooldown | 300 (5 minutos) | O tempo - em segundos - que um usuário deve esperar antes de enviar uma solicitação de ativação ou redefinição de senha para um endereço de e-mail específico. |
default_user_roles | READ , VOTE , EDIT | As funções atribuídas a novos usuários durante o registro. Este campo deve ser expresso como um array yaml. |
guidelines_url | (nenhum) | URL para vincular a um conjunto de diretrizes para usuários que contribuem com edições. Deve estar no formato https://hostname.com . |
vote_promotion_threshold | (nenhum) | Número de edições aprovadas antes que um usuário tenha automaticamente a função VOTE atribuída. Deixe em branco para desabilitar. |
vote_application_threshold | 3 | Número de votos iguais necessários para aplicação imediata de uma edição. Defina como zero para desativar a aplicação automática. |
voting_period | 345600 | Tempo, em segundos, antes do encerramento de um período de votação. |
min_destructive_voting_period | 172800 | Tempo mínimo, em segundos, que precisa passar antes que uma edição destrutiva possa ser aplicada imediatamente com votos positivos suficientes. |
vote_cron_interval | 5m | Tempo entre execuções para fechar edições cujos períodos de votação terminaram. |
email_host | (nenhum) | Endereço do servidor SMTP. Necessário para enviar e-mails para fins de ativação e recuperação. |
email_port | 25 | Porta do servidor SMTP. Apenas STARTTLS é suportado. Conexões TLS diretas não são suportadas. |
email_user | (nenhum) | Nome de usuário do servidor SMTP. Opcional. |
email_password | (nenhum) | Senha do servidor SMTP. Opcional. |
email_from | (nenhum) | Endereço de e-mail do qual enviar e-mails. |
host_url | (nenhum) | URL base do servidor. Usado ao enviar e-mails. Deve estar no formato https://hostname.com . |
image_location | (nenhum) | Caminho para armazenar imagens, para armazenamento local de imagens. Um erro será exibido se isso não for definido ao criar imagens sem URL. |
image_backend | ( file ) | Solução de armazenamento para imagens. Pode ser definido como file ou s3 . |
userLogFile | (nenhum) | Caminho para o arquivo de log do usuário, que registra as operações do usuário. Se não for definido, eles serão enviados para stderr. |
s3.endpoint | (nenhum) | Nome do host para endpoint s3 usado para armazenamento de imagens. |
s3.base_url | (nenhum) | URL base para acessar imagens no S3. Deve estar no formato https://hostname.com . |
s3.bucket | (nenhum) | Nome do bucket S3 usado para armazenar imagens. |
s3.access_key | (nenhum) | Chave de acesso usada para autenticação. |
s3.secret | (nenhum) | Chave de acesso secreta usada para autenticação. |
s3.max_dimension | (nenhum) | Se definido, uma cópia redimensionada será criada para qualquer imagem cujas dimensões excedam esse número. Esta cópia será entregue no lugar do original. |
s3.upload_headers | (nenhum) | Um mapa de cabeçalhos a serem enviados com cada solicitação de upload. Por exemplo, DigitalOcean exige que o cabeçalho x-amz-acl seja definido como public-read ou não disponibiliza as imagens enviadas. |
phash_distance | 0 | Determina qual distância binária é considerada uma correspondência ao consultar uma impressão digital pHash. Usar mais de 8 não é recomendado e pode levar a grandes quantidades de falsos positivos. Nota : A extensão pg-spgist_hamming deve ser instalada para usar a correspondência de distância, caso contrário você receberá erros. |
favicon_path | (nenhum) | Local onde os favicons dos sites vinculados devem ser armazenados. Deixe em branco para desabilitar. |
draft_time_limit | (24h) | Tempo, em segundos, antes que um rascunho seja excluído. |
profiler_port | 0 | Porta na qual servir a saída pprof. Omita a desativação total. |
postgres.max_open_conns | (0) | Número máximo de conexões abertas simultâneas com o banco de dados. |
postgres.max_idle_conns | (0) | Número máximo de conexões de banco de dados ociosas simultâneas. |
postgres.conn_max_lifetime | (0) | Vida útil máxima em minutos antes de uma conexão ser liberada. |
O Stash-box pode ser executado, de preferência em HTTPS, para maior segurança, mas requer alguma configuração. Você precisará gerar um certificado SSL e um par de chaves para configurar isso. Ou use um proxy de terminação TLS de sua escolha, como Traefik, Nginx (sem suporte) ou Caddy Server (sem suporte)
Aqui está um exemplo de como você pode fazer isso usando OpenSSL:
openssl req -x509 -newkey rsa:4096 -sha256 -days 7300 -nodes -keyout stash-box.key -out stash-box.crt -extensions san -config <(echo "[req]"; echo distinguished_name=req; echo "[san]"; echo subjectAltName=DNS:stash-box.server,IP:127.0.0.1) -subj /CN=stash-box.server
Talvez seja necessário modificar o comando para sua configuração específica. Você pode encontrar mais informações sobre como criar um certificado autoassinado com OpenSSL aqui.
Depois de gerar o certificado e o par de chaves, certifique-se de que eles sejam nomeados stash-box.crt
e stash-box.key
respectivamente e coloque-os no mesmo diretório que stash-box. Quando o Stash-box detectar esses arquivos, ele usará HTTPS em vez de HTTP.
Se você deseja habilitar a correspondência de distância para pHashes no stash-box, você precisará instalar a extensão pg-spgist_hamming Postgres.
A maneira recomendada de fazer isso é usar a imagem do Docker. Ainda assim, você também pode instalá-lo manualmente seguindo as instruções de construção no repositório pg-spgist_hamming.
Suponha que você instale a extensão depois de executar as migrações. Nesse caso, você precisará executar a migração nº 14 manualmente para instalar a extensão e adicionar o índice. Se não quiser fazer isso, você pode limpar o banco de dados e as migrações serão executadas na próxima vez que você iniciar o stash-box.
make lint
.make generate
- Gere arquivos Go GraphQL. Este comando deve ser executado se o esquema GraphQL tiver sido alterado.make ui
– Constrói a UI.make pre-ui
- Baixe dependências de frontendmake build
- Constrói o bináriomake test
- Executa os testes unitáriosmake it
- Executa os testes unitários e de integraçãomake lint
- Execute o lintermake fmt
- Formata e alinha os espaços em branco Nota: os testes de integração são executados em um banco de dados sqlite3 temporário por padrão. Eles podem ser executados em um servidor Postgres definindo a variável de ambiente POSTGRES_DB
como a string de conexão do Postgres. Por exemplo: postgres@localhost/stash-box-test?sslmode=disable
. Esteja ciente de que os testes de integração eliminam todas as tabelas antes e depois dos testes.
Para executar o frontend no modo de desenvolvimento, execute yarn start
no diretório frontend.
Ao desenvolver, a chave API pode ser definida em frontend/.env.development.local
para evitar a necessidade de login.
Quando is_production
está habilitado no servidor, esta é a única forma de autorizar no ambiente de desenvolvimento frontend. Se o servidor usar https ou executar em uma porta personalizada, isso também precisará ser configurado em .env.development.local
.
Consulte frontend/.env.development.local.shadow
para obter exemplos.
Você pode acessar o playground GraphQL em host:port/playground
, e a interface GraphQL pode ser encontrada em host:port/graphql
. Para executar consultas adicione um cabeçalho com sua chave de API: {"APIKey":"<API_KEY>"}
. A chave API pode ser encontrada na sua página de usuário no stash-box.
make generate
para criar arquivos gerados se eles tiverem sido alterados.make ui build
para criar o executável para sua plataforma atual.Tenho uma pergunta que precisa ser respondida aqui.