Liberapay es una plataforma de donaciones recurrentes. Le ayudamos a financiar los creadores y proyectos que aprecia.
Nota: Esta aplicación web no es autohostable.
¿Quieres chatear? Únete a nosotros en Gitter.
Alternativamente, puede publicar un mensaje en nuestro salón GitHub.
Puede ayudar a traducir Liberapay a través de WEBLATE. Estado actual:
Si tiene preguntas sobre la traducción de Liberapay, puede preguntarlas en el salón.
Liberapay fue originalmente bifurcado de Gratipay y heredó su Micro-Framework Web Pando ( Né Aspen), que se basa en el enrutamiento del sistema de archivos y los simplados. No te preocupes, es bastante simple. Por ejemplo, para hacer que Liberapay devuelva un Hello $user, your id is $userid Mensaje para solicitudes de URL /$user/hello , solo necesita crear el archivo www/%username/hello.spt con esto adentro:
from liberapay.utils import get_participant
[---]
participant = get_participant(state)
[---] text/html
{{ _("Hello {0}, your id is {1}", request.path['username'], participant.id) }}
Como se ilustra en la última línea, nuestro motor de plantilla predeterminado es Jinja.
La función _ intenta traducir el mensaje al idioma del usuario y escapa las variables correctamente (sabe que está generando un mensaje para una página HTML).
El código Python Inside Simplates es solo para la lógica específica de solicitud, el código de backend común está en el directorio liberapay/ .
Asegúrese de tener las siguientes dependencias instaladas primero:
Luego corre:
make env
Ahora debe darse poderes de Postgres Superuser (si aún no se ha hecho) y crear dos bases de datos:
su postgres -c "createuser --superuser $(whoami)"
createdb liberapay
createdb liberapay_tests
Si necesita una comprensión más profunda, eche un vistazo a los roles de la base de datos y la administración de secciones de bases de datos de la documentación de PostgreSQL.
Entonces puedes configurar el DB:
make schema
Las variables de entorno se utilizan para la configuración, los valores predeterminados están en defaults.env y tests/test.env . Puede anularlos en local.env y tests/local.env respectivamente.
Una vez que haya instalado todo y configure la base de datos, puede ejecutar la aplicación:
make run
Ahora debería ser accesible en http: // localhost: 8339/.
No hay usuarios proporcionados de manera predeterminada. Puede crear cuentas como lo haría en el sitio web real, y si lo desea, también puede crear un montón de usuarios falsos (pero no son geniales):
make data
Para otorgar permisos de administración a una cuenta, modifique la base de datos como así:
psql liberapay -c "update participants set privileges = 1 where username = 'account-username'"
Para ejecutar un día de pago local, abra http: // localhost: 8339/admin/día de pago y haga clic en el botón "Ejecutar el día de pago". Puede agregar OVERRIDE_PAYDAY_CHECKS=yes en el archivo local.env para deshabilitar los cheques de seguridad que evitan que se ejecute el día de pago en el momento incorrecto.
El código de Python interactúa con la base de datos enviando consultas SQL sin procesar a través de la biblioteca Postgres.py.
La documentación oficial de PostgreSQL es su amigo cuando se trata de SQL, especialmente las secciones "el idioma SQL" y los "comandos SQL".
El esquema de DB está en sql/schema.sql , pero no modifique ese archivo directamente, sino que coloque los cambios en sql/branch.sql . Durante la implementación, ese script se ejecutará en la base de datos de producción y los cambios se fusionarán en sql/schema.sql . Ese proceso está semiautomado por release.sh .
Para nuestros estilos usamos Sass y Bootstrap 3. Las hojas de estilo están en el style/ directorio y nuestro código JavaScript está en js/ . Nuestra política para ambos es incluir lo menos posible de ellos: el sitio web debe ser casi completamente utilizable sin JS, y nuestro CSS debe aprovechar el arranque lo más posible en lugar de contener muchas reglas personalizadas que se convertirían en una carga para mantener.
Compilamos Bootstrap nosotros mismos de la fuente SASS en el style/bootstrap/ directorio. Lo hacemos para poder personalizarlo fácilmente cambiando valores en style/variables.scss . La modificación de los archivos en style/bootstrap/ es probablemente una mala idea.
Para los iconos de la interfaz de usuario usamos iconos de arranque. Se puede incluir un icono en una página llamando a la macro icon desde templates/macros/icons.html , por ejemplo {{ icon('liberapay') }} . Los iconos se almacenan en el archivo www/assets/icons.svg . Para agregar un nuevo icono en ese archivo, el elemento raíz <svg> del icono que se agrega debe convertirse en un elemento <symbol> , preservando solo su atributo viewBox y agregando un atributo id .
Si no encuentra ningún icono en los iconos de arranque que se adapte a su caso de uso, puede intentar buscar catálogos en línea como Flaticon, Icons8, Pictograms, SVG Repo y el proyecto sustantivo. Para los íconos de la marca, Simple Icons es un buen recurso.
La forma más fácil de ejecutar la suite de prueba es:
make test
Esto recrea el esquema de prueba DB y ejecuta todas las pruebas. Para acelerar las cosas, también puede usar los siguientes comandos:
make pytest solo ejecute las pruebas de Python sin recrear la prueba DBmake pytest-re solo ejecuta las pruebas que fallaron anteriormente Algunas de nuestras pruebas incluyen interacciones con servicios externos. Para acelerar esas pruebas, registramos las solicitudes y respuestas automáticamente usando VCR. Los registros se encuentran en el directorio tests/py/fixtures , uno por clase de prueba.
Si agrega o modifica las interacciones con servicios externos, las pruebas fallarán, porque la VCR no encontrará la solicitud nueva o modificada en los registros, y se negará a registrar la nueva solicitud por defecto (consulte los modos de registro para obtener más información). Cuando eso sucede, puede agregar VCR=new_episodes a su comando de prueba (por ejemplo, make pytest VCR=new_episodes ) o eliminar los archivos de accesorios obsoletos (por ejemplo rm tests/py/fixtures/TestPayinsStripe.yml ).
Si está probando una API que usa claves idempotence (por ejemplo, la API de Stripe), entonces algunas solicitudes fallarán si ya no son exactamente idénticas. En ese caso, aumente el valor del atributo offset de la clase de prueba para que se utilicen diferentes claves de idempotencia.
PostgreSQL está diseñado para evitar la pérdida de datos, por lo que hace muchas escrituras de disco sincrónico de forma predeterminada. Para reducir el número de esas escrituras de bloqueo, nuestro script recreate-schema.sh cambia automáticamente la opción synchronous_commit para off para la base de datos de prueba, sin embargo, esto no deshabilita por completo la sincronización. Si su instancia de PostgreSQL solo contiene datos que puede permitirse perder, entonces puede acelerar las cosas más al configurar fsync en off , wal_level a minimal y max_wal_senders a 0 en el archivo de configuración del servidor ( postgresql.conf ).
Liberapay actualmente admite dos procesadores de pago: Stripe y PayPal.
Puede reenviar las devoluciones de llamadas de Stripe a su instancia local de Liberapay ejecutando make stripe-bridge . El programa Stripe-Cli debe instalarse para que esto funcione.
Todas las nuevas dependencias deben ser auditadas para verificar que no contienen código malicioso o vulnerabilidades de seguridad.
Utilizamos el modo de verificación de hash de PIP para protegernos de la manipulación de la dependencia. Por lo tanto, al agregar o actualizar una dependencia, los nuevos hashes deben calcularse y colocar el archivo de requisitos. Para eso puedes usar hashin:
pip install hashin
hashin package==x.y -r requirements_base.txt
Si por alguna razón necesita rehacer todos los requisitos, ejecute make rehash-requirements .
Para actualizar todas las dependencias en el archivo de requisitos, ejecute hashin -u -r requirements_base.txt . Es posible que deba ejecutar comandos hashin adicionales si faltan nuevas subdependencias.
Las dependencias de prueba en requirements_tests.txt no siguen estas reglas porque no están instaladas en producción. Depende de usted aislar su entorno de desarrollo del resto de su sistema para protegerlo de posibles vulnerabilidades en las dependencias de las pruebas.
Al escribir código que maneja la información personal, tenga en cuenta los principios consagrados en el GDPR.
Nota: Liberapay no puede ser autohospedado, esta sección solo está destinada a documentar cómo implementamos nuevas versiones.
Liberapay está actualmente alojado en AWS (Irlanda).
Para implementar la aplicación simplemente ejecutar release.sh , lo guiará a través de ella. Por supuesto, primero debe recibir acceso.
Dedicación del dominio público CC0 (ver esta discusión para más detalles).