O Luapay é uma plataforma de doações recorrentes. Ajudamos você a financiar os criadores e projetos que você aprecia.
Nota: Este webApp não é auto-hospedável.
Quer conversar? Junte -se a nós no Gitter.
Como alternativa, você pode postar uma mensagem em nosso salão do Github.
Você pode ajudar a traduzir o librapay via weblate. Status atual:
Se você tiver dúvidas sobre como traduzir liberapay, poderá perguntar no salão.
O Luapay foi originalmente bifurcado por Gratipay e herdou seu Micro-Framework Pando ( NE Aspen), que é baseado no roteamento do sistema de arquivos e simplifica. Não se preocupe, é muito simples. Por exemplo, para fazer o liberay retornar um Hello $user, your id is $userid mensagem para solicitações para o URL /$user/hello , você só precisa criar o arquivo www/%username/hello.spt com isso dentro:
from liberapay.utils import get_participant
[---]
participant = get_participant(state)
[---] text/html
{{ _("Hello {0}, your id is {1}", request.path['username'], participant.id) }}
Como ilustrado pela última linha, nosso mecanismo de modelo padrão é Jinja.
A função _ tenta traduzir a mensagem no idioma do usuário e escapa das variáveis corretamente (sabe que está gerando uma mensagem para uma página HTML).
O código Python Inside Simplate é apenas para lógica específica de solicitação, o código de back-end comum está no liberapay/ diretório.
Verifique se você tem as seguintes dependências instaladas primeiro:
Em seguida, corra:
make env
Agora você precisa se dar poderes de pós -graus de superusuário (se ainda não foi feito) e criar dois bancos de dados:
su postgres -c "createuser --superuser $(whoami)"
createdb liberapay
createdb liberapay_tests
Se você precisar de um entendimento mais profundo, dê uma olhada nas funções do banco de dados e no gerenciamento de seções de bancos de dados da documentação do PostGresql.
Então você pode configurar o banco de dados:
make schema
As variáveis de ambiente são usadas para configuração, os valores padrão estão em defaults.env e tests/test.env . Você pode substituí -los em local.env e tests/local.env respectivamente.
Depois de instalar tudo e configurar o banco de dados, você pode executar o aplicativo:
make run
Agora deve estar acessível em http: // localhost: 8339/.
Não há usuários fornecidos por padrão. Você pode criar contas como faria no site real e, se quiser, também pode criar um monte de usuários falsos (mas eles não são ótimos):
make data
Para conceder permissões de administrador a uma conta, modifique o banco de dados como assim:
psql liberapay -c "update participants set privileges = 1 where username = 'account-username'"
Para executar um dia de pagamento local aberto http: // localhost: 8339/admin/payday e clique no botão "Run Payday". Você pode adicionar OVERRIDE_PAYDAY_CHECKS=yes o arquivo local.env para desativar as verificações de segurança que impedem o dia de pagamento na hora errada.
O código Python interage com o banco de dados enviando consultas SQL brutas através da biblioteca PostGres.py.
A documentação oficial do PostgreSQL é seu amigo ao lidar com o SQL, especialmente as seções "The SQL Language" e "Comandos SQL".
O esquema DB está no sql/schema.sql , mas não modifique esse arquivo diretamente, coloque as alterações no sql/branch.sql . Durante a implantação, esse script será executado no banco de dados de produção e as alterações serão mescladas no sql/schema.sql . Esse processo é semi-automático por release.sh .
Para nossos estilos, usamos SASS e Bootstrap 3. As folhas de estilo estão no style/ diretório e nosso código JavaScript está em js/ . Nossa política para ambos é incluir o mínimo possível delas: o site deve ser quase utilizável sem JS, e nosso CSS deve aproveitar o bootstrap o máximo possível, em vez de conter muitas regras personalizadas que se tornariam um ônus de manter.
Nós compilamos o bootstrap a partir da fonte SASS no style/bootstrap/ diretório. Fazemos isso para ser capaz de personalizá -lo facilmente alterando os valores em style/variables.scss . Modificar os arquivos em style/bootstrap/ é provavelmente uma má idéia.
Para ícones da interface do usuário, usamos ícones de bootstrap. Um ícone pode ser incluído em uma página chamando a macro do icon dos templates/macros/icons.html , por exemplo {{ icon('liberapay') }} . Os ícones são armazenados no arquivo www/assets/icons.svg . Para adicionar um novo ícone nesse arquivo, o elemento raiz <svg> do ícone que está sendo adicionado deve ser transformado em um elemento <symbol> , preservando apenas seu atributo viewBox e adicionando um atributo id .
Se você não encontrar nenhum ícone em ícones de bootstrap que se encaixem no seu caso de uso, tente pesquisar catálogos on -line como Flaticon, Icons8, Pictogrammers, SVG Repo e o Projeto Substantivo. Para ícones da marca, os ícones simples são um bom recurso.
A maneira mais fácil de executar a suíte de teste é:
make test
Isso recria o esquema de DB de teste e executa todos os testes. Para acelerar as coisas, você também pode usar os seguintes comandos:
make pytest executa apenas os testes Python sem recriar o banco de dados de testemake pytest-re executa apenas os testes que falharam anteriormente Alguns de nossos testes incluem interações com serviços externos. Para acelerar esses testes, registramos as solicitações e respostas automaticamente usando o VCR. Os registros estão no diretório de tests/py/fixtures , um por classe de teste.
Se você adicionar ou modificar interações com serviços externos, os testes falharão, porque o videocassete não encontrará a solicitação nova ou modificada nos registros e se recusará a registrar a nova solicitação por padrão (consulte os modos de registro para obter mais informações). Quando isso acontece, você pode adicionar VCR=new_episodes ao seu comando de teste (por exemplo, make pytest VCR=new_episodes ) ou exclua os arquivos de acessórios obsoletos (por exemplo, rm tests/py/fixtures/TestPayinsStripe.yml ).
Se você estiver testando uma API que usa teclas de idempotência (por exemplo, a API da Stripe), algumas solicitações falharão se não forem mais exatamente idênticas. Nesse caso, aumente o valor do atributo offset da classe de teste para que diferentes teclas de idempotência sejam usadas.
O PostgreSQL foi projetado para evitar a perda de dados, por isso faz muitas gravações de disco síncrono por padrão. Para reduzir o número de gravações de bloqueio, nosso script recreate-schema.sh alterna automaticamente a opção synchronous_commit para off o banco de dados de teste, no entanto, isso não desativa completamente a sincronização. Se a sua instância PostGresql contiver apenas dados que você pode perder, poderá acelerar as coisas definindo fsync para off , wal_level para minimal e max_wal_senders para 0 no arquivo de configuração do servidor ( postgresql.conf ).
Atualmente, a Luapay suporta dois processadores de pagamento: Stripe e PayPal.
Você pode encaminhar os retornos de chamada da Stripe para a sua instância local de librapay, executando make stripe-bridge . O programa Stripe-Cli deve ser instalado para que isso funcione.
Todas as novas dependências precisam ser auditadas para verificar se não contêm código malicioso ou vulnerabilidades de segurança.
Usamos o modo de verificação de hash da PIP para nos proteger de adulteração de dependência. Assim, ao adicionar ou atualizar uma dependência, os novos hashes precisam ser calculados e colocados no arquivo de requisitos. Para isso, você pode usar Hashin:
pip install hashin
hashin package==x.y -r requirements_base.txt
Se, por algum motivo, você precisar refazer todos os requisitos, make rehash-requirements .
Para atualizar todas as dependências no arquivo de requisitos, execute hashin -u -r requirements_base.txt . Você pode ter que executar comandos extras hashin se novas subdependências estiverem ausentes.
As dependências de teste em requirements_tests.txt não seguem essas regras porque não estão instaladas na produção. Cabe a você isolar seu ambiente de desenvolvimento do restante do seu sistema, a fim de protegê -lo de possíveis vulnerabilidades nas dependências de teste.
Ao escrever código que lida com informações pessoais, lembre -se dos princípios consagrados no GDPR.
NOTA: O librapay não pode ser auto-hospedado, esta seção deve apenas documentar como implantamos novas versões.
A Luapay está atualmente hospedada na AWS (Irlanda).
Para implantar o aplicativo, simplesmente execute release.sh , ele o guiará através dele. Claro que você precisa ter acesso primeiro.
CC0 Dedicação de domínio público (consulte esta discussão para obter detalhes.)