User Tools

Site Tools


infra:services:hula

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
infra:services:hula [2025/12/28 12:44] atluxity_idp.hackeriet.noinfra:services:hula [2026/07/21 16:16] (current) atluxity_idp.hackeriet.no
Line 1: Line 1:
 ====== Hacker-hula ====== ====== Hacker-hula ======
 +
 +
 +==== Adding a new member user =====
 +
 +Hula is a Django application. New users are added through the Django admin.
 +
 +The practical admin flow is:
 +
 +  - Open the Hula Django admin.
 +  - Go to users and click add user.
 +  - Set the username.
 +  - Set a temporary password.
 +  - Exchange the temporary password with the user out-of-band and tell them to change it after logging in.
 +  - Set the e-mail address. This is important: Hacker-ID / IDP enrollment depends on the user having an e-mail address in Hula.
 +  - Fill required fields. At the moment address is required even when we do not have a useful address; the current workaround is to put ''a''.
 +  - Save the user.
 +
 +After the Hula user exists, the member can start Hacker-ID onboarding from:
 +
 +  * https://hackeriet.no/hula/idp/
 +
 +=== RFID / door access card ===
 +
 +If the new member should get door access through the door system Hula controls:
 +
 +  - Get an RFID card from the safe.
 +  - Watch the door daemon logs while presenting the card to the door reader:
 +
 +<code>
 +ssh bac-door1.hackeriet.no "sudo journalctl -u doord -f"
 +</code>
 +
 +  - The door system logs continuously while it looks for card information.
 +  - Present the unregistered card to the door lock.
 +  - Look for the ''unregistered card'' log line and copy the card number from that line.
 +  - Put that card number into the Hula Django field named ''RFID access card number. (new):''.
 +  - Save the user/member record.
  
  
Line 9: Line 46:
  
 Go to the checkout as `hackerhula` via `root` Go to the checkout as `hackerhula` via `root`
-<code bash>+<code>
 sudo su - sudo su -
 su - hackerietweb -s /bin/bash su - hackerietweb -s /bin/bash
Line 17: Line 54:
  
 If you've made migrations, run this If you've made migrations, run this
-<code bash>+<code>
 poetry run ./manage.py migrate poetry run ./manage.py migrate
 </code> </code>
  
 If you've changed static files, run this If you've changed static files, run this
-<code bash>poetry run ./manage.py collectstatic</code>+<code>poetry run ./manage.py collectstatic</code>
  
 Back to root we go Back to root we go
-<code bash>^D</code>+<code>^D</code>
  
 Restart the appserver Restart the appserver
-<code bash>systemctl restart gunicorn-hula.service</code>+<code>systemctl restart gunicorn-hula.service</code>
 and bob's your uncle and bob's your uncle
  
Line 48: Line 85:
       |                        |              |                        |       
       | Hackeriet bank account |              | Hackeriet bank account |       
-      |        (Cultura)       |       +      |        (Cultura)       
       |                        |              |                        |       
       +-----------+------------+              +-----------+------------+       
Line 78: Line 115:
  
 === How to perform an API export to JSON file for sync of payment status === === How to perform an API export to JSON file for sync of payment status ===
-<code bash+ 
-atluxity@hostname: git$ gh repo clone hackeriet/fiken-hula +See also https://github.com/hackeriet/fiken-hula 
-atluxity@hostname: git$ cd fiken-hula/ + 
-atluxity@hostname: fiken-hula$ echo FIKEN_API=\"$(hackerpass fiken/api)\" > .env +The Fiken API token is stored in the password manager. `hackerpass fiken/api` 
-atluxity@hostname: fiken-hula$ source env/bin/activate +To avoid storing the token in plaintext in `.env`, pipe it directly into the vault helper:  
-(env) atluxity@hostname: fiken-hula$ pip install -r requirements.txt  + 
-(env) atluxity@hostname: fiken-hula$ python dump_all_sales.py > $(date +%Y-%d-%m)-all-sales.json+<code> 
 +atluxity@hostname:~$ gh repo clone hackeriet/fiken-hula 
 +atluxity@hostname:~$ cd fiken-hula/                                                                                                                                                    
 +atluxity@hostname:fiken-hula$ python3 -m venv env                                                                                                                                      
 +atluxity@hostname:fiken-hula$ source env/bin/activate                                                                                                                                  
 +(env) atluxity@hostname:fiken-hula$ pip install -r requirements.txt 
 +(env) atluxity@hostname:fiken-hula$ hackerpass fiken/api | python env_vault.py encrypt --name FIKEN_API --value-stdin 
 +Encryption password: 
 +Confirm encryption password: 
 +Updated .env with FIKEN_API_VAULT 
 +(env) atluxity@hostname: fiken-hula$ python dump_all_sales.py > $(date +%Y-%m-%d)-all-sales.json
 </code> </code>
  
-You now have a json file! Next step is possible.+You now have a json file! Next step is possible. TAKE CARE, there is currently too much PII in the file. Do not leave it unattented.
  
 === How to Import to Hula DB via manual script === === How to Import to Hula DB via manual script ===
  
-<code bash>+See also https://github.com/hackeriet/hackerhula/blob/master/hackerhula/member/management/commands/sync_fiken.py 
 + 
 +<code>
 atluxity@blade:~$ sudo su - hackerietweb -s /bin/bash atluxity@blade:~$ sudo su - hackerietweb -s /bin/bash
 hackerietweb@blade:~$ cd /srv/webapp-hackerhula/new/hackerhula/ hackerietweb@blade:~$ cd /srv/webapp-hackerhula/new/hackerhula/
 hackerietweb@blade:/srv/webapp-hackerhula/new/hackerhula$ poetry shell hackerietweb@blade:/srv/webapp-hackerhula/new/hackerhula$ poetry shell
-(hackerhula-py3.11) root@blade:/srv/webapp-hackerhula/new/hackerhula# python3 manage.py sync_fiken /home/atluxity/2025-12-27-fiken-sales.json                                           +(hackerhula-py3.11) hackerietweb@blade:/srv/webapp-hackerhula/new/hackerhula$ uv run manage.py sync_fiken /home/atluxity/2025-12-27-fiken-sales.json 
 +(hackerhula-py3.11) hackerietweb@blade:/srv/webapp-hackerhula/new/hackerhula$ exit                                     
 +atluxity@blade:~$ rf 2025-12-27-fiken-sales.json 
 +</code> 
 + 
 +TAKE CARE, the json file has too much PII etc, do not leave it unattended. 
 + 
 +=== Reporting on payments stored in Hula === 
 +To sanity check, or whatever, a small stats command was created to be run in the same way as the sync command above. 
 +<code> 
 +(hackerhula-py3.11) hackerietweb@blade:/srv/webapp-hackerhula/new/hackerhula$ python3 manage.py payments_stats -h 
 +usage: manage.py payments_stats [-h] [--from DATE_FROM] [--to DATE_TO] [--last-months LAST_MONTHS] [--last-1-months] [--last-3-months] [--last-6-months] [--last-12-months] 
 +                                [--format {text,json}] [--version] [-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback] [--no-color] [--force-color] 
 +                                [--skip-checks] 
 + 
 +Report payment statistics from the database 
 + 
 +options: 
 +  -h, --help            show this help message and exit 
 +  --from DATE_FROM      Start date (YYYY-MM-DD) 
 +  --to DATE_TO          End date (YYYY-MM-DD) 
 +  --last-months LAST_MONTHS 
 +                        Last N months (e.g. --last-months 3) 
 +  --last-1-months       Preset for last 1 month 
 +  --last-3-months       Preset for last 3 months 
 +  --last-6-months       Preset for last 6 months 
 +  --last-12-months      Preset for last 12 months 
 +  --format {text,json}  Output format (default: text) 
 +  --version             Show program's version number and exit. 
 +  -v {0,1,2,3}, --verbosity {0,1,2,3} 
 +                        Verbosity level; 0=minimal output, 1=normal output, 2=verbose, 3=very verbose 
 +  --settings SETTINGS   The Python path to a settings module, e.g. "myproject.settings.main". If this isn't provided, the DJANGO_SETTINGS_MODULE environment variable will be used. 
 +  --pythonpath PYTHONPATH 
 +                        A directory to add to the Python path, e.g. "/home/djangoprojects/myproject"
 +  --traceback           Raise on CommandError exceptions. 
 +  --no-color            Don't colorize the command output. 
 +  --force-color         Force colorization of output. 
 +  --skip-checks         Skip system checks.
 </code> </code>
/srv/hackeriet-wiki/dokuwiki/data/attic/infra/services/hula.1766925850.txt.gz · Last modified: by atluxity_idp.hackeriet.no