Skip to content
Snippets Groups Projects
README.md 4.71 KiB
Newer Older
Jonas Braathen's avatar
Jonas Braathen committed
# Greg
[![pipeline status](https://git.app.uib.no/it-bott-integrasjoner/greg/badges/master/pipeline.svg)](https://git.app.uib.no/it-bott-integrasjoner/greg/-/commits/master)
[![coverage report](https://git.app.uib.no/it-bott-integrasjoner/greg/badges/master/coverage.svg)](https://git.app.uib.no/it-bott-integrasjoner/greg/-/commits/master)
Jonas Braathen's avatar
Jonas Braathen committed

Greg (Guest REGistration) provides a core API for keeping track of guests at an institution.

It is built on [Django](https://www.djangoproject.com/) and [REST framework](https://www.django-rest-framework.org/).

## Installation

[Poetry](https://python-poetry.org/docs/) is used for dependency management.

    # Make sure poetry is installed, see docs
    poetry shell        # Start a shell, creating a virtual environment.
    poetry install      # Install dependencies from lock file

## Configuration

Local configuration is read from `gregsite/settings/local.py`. Put secrets and local modifications here.

    # Make sure a local settings file exists
    $ touch gregsite/settings/local.py

`gregsite/settings/base.py` contains common configuration for all environments. Put defaults here.\
`gregsite/settings/dev.py` contains development configuration. It's used when running a development server using `python manage.py runserver`.\
Jonas Braathen's avatar
Jonas Braathen committed
`gregsite/settings/prod.py` contains production configuration. It's used when the application is initialized by an application server via `gregsite.wsgi` or `gregsite.asgi`.

Any settings in `local.py` override definitions in `base.py`, `dev.py` and `prod.py`.

### Login

Sponsors and Guests are expected to log in using Feide/ID-porten through Dataporten.
For development you can make a client at https://dashboard.dataporten.no/.
For production the institution's Feide admin must do it for you.

The following settings must be set:

- Client type: "Confidential"
- Callback url: http://localhost:8000/oidc/callback/ for dev or https://your.domain/oidc/callback for prod
- Scopes: email, openid, userid, userid-feide, userid-nin, profile, iss.
- Require user interaction box: Checked

Auth Providers depends on what you're doing. For development you want at least _Feide guest users_ or _Feide test users_ checked. For production you want _IDporten_ and whichever institution you're configuring.

Take care to also set the OIDC_RP_CLIENT_ID and OIDC_RP_CLIENT_SECRET values in the local.py settings file (if you're using the regular deployment this is done in a separate repository).

Note also that there are a series of other settings variables related to this in the base.py settings file, that will need other values in case you choose to use a different login provider than Dataporten.

Jonas Braathen's avatar
Jonas Braathen committed
## Development

    python manage.py migrate
    # python manage.py loaddata testdata
    # python manage.py createsuperuser
    python manage.py runserver

## API documentation

An OpenAPI schema is available at `/api/schema/`. Point your browser to `/api/schema/swagger-ui/` for an interactive Swagger UI.

Refer to [drf-spectacular](https://github.com/tfranzel/drf-spectacular/) for details about the schema generation.

## Sending notifications

    python manage.py notification_publisher
Jonas Braathen's avatar
Jonas Braathen committed

## Testing

Use pytest with the pytest-django library to run unit tests.

    pytest
Jonas Braathen's avatar
Jonas Braathen committed

There are two scripts for adding data to the database:

- greg/tests/populate_fixtures.py
- greg/tests/populate_database.py

where the former uses randomized data, and the latter uses specific data useful in combination with the frontend. See the respective files for how to use them.

Tore.Brede's avatar
Tore.Brede committed
## Themes

The application has three different themes: uio, uib and default. The default uses the palette found in Material UI,
while uio and uib sets a color scheme that matches the institution.

To set the theme used update REACT_APP_THEME in frontend/.env.

Jonas Braathen's avatar
Jonas Braathen committed
## Static type analysis

Use [mypy](http://mypy-lang.org/) to run static type checks using type hints.

    mypy .

## Container images

A `Containerfile` is provided for application deployment purposes. It is not designed to be used for development.

`update-harbor-image.sh` is a utility script for building and uploading a Docker image to our private image repository `harbor.uio.no`.

It expects you to be logged in:

    docker login harbor.uio.no

## Deployment

Deployment is done using the helm chart located at https://git.app.uib.no/it-bott-integrasjoner/greg-chart/.

After deployment the OrgReg import and sponsor notification tasks must be queued. This is done by running

```bash
python manage.py import_from_orgreg
python manage.py role_end_notifier
```

Sponsors can by imported from cerebrum (UiO/UiT/NTNU) by running

```bash
python manage.py import_sponsors_from_cerebrum
```

Otherwise, you will have to create Sponsor objects manually, taking care to link them to their respective units.