Architecture

image

GIR/MO consists of the technology stack depicted above. Each element is briefly described below.

Frontends * UI. The main UI, which is intended for administrators, is implemented in the Web App framework, Svelte.^1 * The organizational diagram is implemented in Vue-js.^2

Integrations There are a plethora of existing integrations that import and/or export data. They are all written in Python,^3 but can be written in any language that the integrator decides. Examples of existing integrations are; * an event-driven LDAP-integration to Active Directory * an event-driven integration to Omada IdM

The Ingress controller is a piece of software that controls and directs HTTP(s) traffic to the services behind it.

The IdP-broker (Keycloak^4), which relays identities from e.g. ADFS, and allows GIR/MO to verify the identity of users via the OIDC protocol. It also implements the roles used in RBAC.

GraphQL^5 is used for the public facing API of GIR/MO and is used for reading and writing data. Strawberry GraphQL is the library used to implement the interface.

GIR/MO^6 is the middleware that communicates with the database and the frontends. It is written in Python and implemented using the FastAPI^7 library.

RabbitMQ^8 caters for an event-driven architecture and communicates with the integrations and the Event Generator.

The Event Generator is a small program that triggers events in RabbitMQ as a response to activities that occur in the system. It is implemented in Python using the bitemporality of GIR/MO.

The PostgreSQL database^9 stores data in a standardized format (OIO^10).

Back to top