Recruitment for Abakus.
Table of contents
Â
opptak.abakus.no
OAuth through abakus.no
opptak-staging.abakus.no
OAuth through abakus.no
Â
To run this project, you need
- python 3.9
- Docker OR a
postgresql
database - poetry (installation guide)
- Node and yarn
When working in development you want to have LEGO running (both frontend and backend). This allows you to create an OAuth2 application from the settings menu in the webapp.
To do this, you need a total of 4 terminals (or shells if you like).
Run LEGO by following the README here.
Run LEGO-WEBAPP by following the README here.
Install the projects dependencies with
$ poetry install
This command will also create a virtual environment in which the dependencies are installed, if one has not already been created and activated.
Then, run the following command
$ make dev_settings
The docker-compose.yml
file provides a postgresql
database. This uses a different port than LEGO, so you can run it in parallel as follows.
$ docker-compose up -d
The .env
file with secret keys is not included, but an example.env
file has been provided in ./admissions/settings
, so that you can simply rename the file and fill in the values.
example.env
is setup to connect to an Oauth2 application already configured in LEGO, so if you don't need anything special you are good to go with that one.
If you want to configure another one, go to the OAuth2 tab in the user settings menu in the running dev version of lego-webapp. Open or create an application, and enter the values you find into your .env file. If you are creating a new OAuth2 application, enter http://127.0.0.1:5000/complete/lego/
as the redirect url.
# Create a copy of the example env file (run from the root of the project)
$ cp admissions/settings/example.env admissions/settings/.env
# Edit the file and change the KEY and SECRET
AUTH_LEGO_KEY="Client ID from OAuth2"
AUTH_LEGO_SECRET="Client Secret from OAuth2"
AUTH_LEGO_API_URL="http://localhost:8000/"
After creating and configuring your ./admissions/settings/.env file you are ready to migrate the database and run the server.
# Migrate the database migrations
$ poetry run python manage.py migrate
# Run the Django server
$ poetry run python manage.py runserver
If coding over long periods of time, or you want to flush the database, run
poetry run python manage.py flush
to flush it, and run the server again withpoetry run python manage.py runserver
.
In the last terminal you are ready to start the frontend. The frontend requires Node
. You simply need to install the requirements and run the dev-server as follows.
# Install dependencies
$ yarn
# Start the dev-server
$ yarn dev
Finally, you can go to 127.0.0.1:5000 and view the admissions page.
NB: The project has to be accessed through 127.0.0.1, and NOT localhost. This is because accessing both LEGO and admissions from the same hostname creates a conflict some session storage, so the login will not work.
To create an admission, first, open 127.0.0.1:5000 and click the "Logg inn" button at the bottom of the page to authorize as a user with permission to create admissions. Then, click "Administrer opptak" and create an admission. Phew, now you are ready to start developing!
Â
The simplest way to create an admission is through the GUI.
- Navigate to 127.0.0.1:5000
- Log in as a user with permission to create admissions.
- Click "Administrer opptak" at the bottom of the screen
- Success
Currently when running
# Create a custom admission for development
$ poetry run python manage.py create_admission
you create an admission connected to all groups, if they exist (they are generated the first time you log in). To connect it to a group, you can either do it through the GUI, or create it in the shell.
Note that when creating groups in the shell, you must import the Group model manually, as otherwise it will use the Django Group model instead of our own.
$ poetry run python manage.py shell_plus
> from admissions.admissions.models import Group
> new_group = Group.objects.create(name="GroupA")
> admission = Admission.objects.get(slug="opptak")
> admission.groups.add(new_group)
Â
The project gives permissions based on group memberships imported from LEGO.
Model | Action | Requirement |
---|---|---|
Admission | CREATE | Either (1) any member of Webkom, (2) leader of Abakus OR (3) leader of RevyStyret. (1,2,3) user.is_staff |
Admission | EDIT | Either (1) member of Webkom OR (2) creator of admission. (1) user.is_member_of_webkom , (2) admission.created_by . |
All applications | VIEW & DELETE | Member of a group in admission.admin_groups |
Applications to a group | VIEW & DELETE | Member of a group in admission.groups WITH role LEADER or RERUITING |
Group | EDIT | Member of a group in admission.groups WITH role LEADER or RERUITING |
Â
Run django tests using tox. Note that we point at the admissions database running at :5433 if we are running lego and admissions in parallel
$ DATABASE_PORT=5433 poetry run tox -e tests
Â
This codebase uses the PEP 8 code style. We enforce this with isort, black & flake8.
In addition to the standards outlined in PEP 8, we have a few guidelines
(see setup.cfg
for more info):
Format the code with black & isort
$ make fixme
To check if it is formatted properly, run:
$ DATABASE_PORT=5433 poetry run tox -e isort -e flake8 -e black