Giter Site home page Giter Site logo

taavie / loosindus Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 2.0 2.23 MB

Secret Santa with a webGUI written in Python

Home Page: https://jolod.aegrel.ee

License: GNU Affero General Public License v3.0

Python 20.67% HTML 14.76% JavaScript 19.08% Shell 0.10% PLpgSQL 1.05% CSS 44.34%
secretsanta python3 flask secret-santas python agplv3 loosipakk gift secret-santa esteid

loosindus's Introduction

Loosindus

A really simple to configure and to use system for secret santa but with some important additions like secretly shared shopping lists and gifting constraints (avoid matches between family members for ex.).

Features:

  • Keeps the secret in "Secret Santa", a lot of effort has gone into hiding both the santas and possible gifts
  • Very simple to use
  • Possibility to share gift wishlists with people to avoid duplicate gifts and other hassle coordinating gifts
  • Best possible gift target and receiver generation to avoid combinations that would ruin the surprise
  • Responsive design - desktops, tablets, phones and even Kindles are supported - no massive JS dependencies, minimal or no Javascript on pages. All critical pages should also work without JS.
  • Supports multiple events, multiple groups and multiple families at the same time, with optional advanced features
  • Supports Estonian ID card authentication

For self-hosters:

  • Works very well with Content Security Policy - no need for 'inline'-anything
  • The app is intended to be used with multiple families, but it is okay if there's only one family in the group or one-person families in the group
  • The amount of groups an user can be in is not limited (multiple secret santa events at the same time)
  • The version hosted by me (TaaviE) is being actively used, but is the place where I beta-test my changes so it might sometimes break
  • Estonian (and other client TLS cert) authentication with Flask-Security requires extra configuration

Eesti keeles

Lihtne veebiliides loosipakkide tegemiseks - lubab igal kasutajal koostada enda soovinimekirja ning seda enda salajase "jõuluvanaga" jagada (nimekirja saavad vaadata ka ülejäänud grupi liikmed). Loosipakid üksteise vahel jagab süsteem soovi korral automaatselt, vältides perekonnaliikmete vahelisi kinke ja eelmisel aastal loodud kombinatsioone. Eesmärk on suurendada üllatusmomenti, samal ajal vältides halbu kingitusi ning duplikaate (iga soovi saab kingi saaja suhtes varjatult broneerituks märkida). Süsteem lubab pärast seadistamist sisse logida ka ID-kaardiga, Google konto jt. Minimaalne kasutajate hulk tarkvara kasutamiseks on loogiliselt neli inimest. Minu hallatud instants on aktiivses kasutuses, kuid ma kasutan seda muudatuste aktiivseks testimiseks seega see võib vahepeal mõne veaga olla.

Setup (if you wish to self-host)

My aim is to keep this project as simple as possible in every aspect, including deploying.

  1. Install Python 3.8 (No, older versions do not work)
  2. Make a virtual environment (python3 -m venv .venv && source .venv/bin/activate)
  3. Install wheel with pip (python3 -m pip install wheel)
  4. Install requirements (python3 -m pip install -r requirements.txt)
  5. Set up PostgreSQL with the script in init_db.sql
  6. Set up uwsgi/gunicorn and nginx
  7. UPDATE THE CONFIGURATION - this is so critical that everything will break if you don't, not kidding
  8. Estonian ID card support requires a subdomain and additional nginx configuration, if you don't configure it, it will just not work
  9. You're done. Use the setup wizard to begin.

In case this above was too complex you can just use the version hosted by me and ask if you need any help.

Planned development

  • Check the GitHub Projects tab
  • If you have requests or issues, open an issue on GitHub

Donations

  • Liberapay Status

Keywords

  • Kingituste tegemise rakendus
  • Kingituste loosimine
  • Secret santa web application
  • Loosipakkide tegemise rakendus
  • Loosipakkide loosimine
  • Loosipakirakendus

loosindus's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar fossabot avatar taavie avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

loosindus's Issues

StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back [SQ...

Flask-Security/Login does not roll back unexpected SSL connection losses that could be caused by various reasons.

Sentry Issue: JOLOD-1F

InvalidRequestError: Can't reconnect until invalid transaction is rolled back
  File "sqlalchemy/engine/base.py", line 1125, in _execute_context
    conn = self._revalidate_connection()
  File "sqlalchemy/engine/base.py", line 427, in _revalidate_connection
    "Can't reconnect until invalid "

StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back [SQL: 'SELECT "user".id AS user_id, "user".email AS user_email, "user".username AS user_username, "user".password AS user_password, "user".active AS user_active, "user".confirmed_at AS user_confirmed_at, "user".last_login_at AS user_last_login_at, "user".current_login_at AS user_current_login_at, "user".last_login_ip AS user_last_login_ip, "user".last_activity_at AS user_last_activity_at, "user".last_activity_ip AS user_last_activity_ip, "user".current_login_ip AS user_current_login_ip, "user".language AS user_language, "user".login_count AS user_login_count \nFROM "user" \nWHERE "user".id = %(id_1)s \n LIMIT %(param_1)s'] [parameters: [{}]]
(23 additional frame(s) were not displayed)
...
  File "sqlalchemy/engine/base.py", line 1413, in _handle_dbapi_exception
    exc_info
  File "sqlalchemy/util/compat.py", line 265, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "sqlalchemy/util/compat.py", line 248, in reraise
    raise value.with_traceback(tb)
  File "sqlalchemy/engine/base.py", line 1125, in _execute_context
    conn = self._revalidate_connection()
  File "sqlalchemy/engine/base.py", line 427, in _revalidate_connection
    "Can't reconnect until invalid "

InvalidRequestError: Can't reconnect until invalid transaction is rolled back
  File "sqlalchemy/engine/base.py", line 1125, in _execute_context
    conn = self._revalidate_connection()
  File "sqlalchemy/engine/base.py", line 427, in _revalidate_connection
    "Can't reconnect until invalid "

StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back [SQL: 'SELECT "user".id AS user_id, "user".email AS user_email, "user".username AS user_username, "user".password AS user_password, "user".active AS user_active, "user".confirmed_at AS user_confirmed_at, "user".last_login_at AS user_last_login_at, "user".current_login_at AS user_current_login_at, "user".last_login_ip AS user_last_login_ip, "user".last_activity_at AS user_last_activity_at, "user".last_activity_ip AS user_last_activity_ip, "user".current_login_ip AS user_current_login_ip, "user".language AS user_language, "user".login_count AS user_login_count \nFROM "user" \nWHERE "user".id = %(id_1)s \n LIMIT %(param_1)s'] [parameters: [{}]]
(19 additional frame(s) were not displayed)
...
  File "sqlalchemy/engine/base.py", line 1413, in _handle_dbapi_exception
    exc_info
  File "sqlalchemy/util/compat.py", line 265, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "sqlalchemy/util/compat.py", line 248, in reraise
    raise value.with_traceback(tb)
  File "sqlalchemy/engine/base.py", line 1125, in _execute_context
    conn = self._revalidate_connection()
  File "sqlalchemy/engine/base.py", line 427, in _revalidate_connection
    "Can't reconnect until invalid "

StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back [SQL: 'SELECT "user".id AS user_id, "user".email AS user_email, "user".username AS user_username, "user".password AS user_password, "user".active AS user_active, "user".confirmed_at AS user_confirmed_at, "user".last_login_at AS user_last_login_at, "user".current_login_at AS user_current_login_at, "user".last_login_ip AS user_last_login_ip, "user".last_activity_at AS user_last_activity_at, "user".last_activity_ip AS user_last_activity_ip, "user".current_login_ip AS user_current_login_ip, "user".language AS user_language, "user".login_count AS user_login_count \nFROM "user" \nWHERE "user".id = %(id_1)s \n LIMIT %(param_1)s'] [parameters: [{}]]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.