From d43196f0af7eaaf7fcc192e72806dd8d46abf4ad Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Mon, 16 Oct 2023 22:23:26 +0200 Subject: [PATCH] Added stuff --- docs/contact.md | 5 +- docs/index.md | 2 +- docs/system-databases-auth.md | 17 ++++-- docs/system-databases-data.md | 41 +++++++++++++- docs/system-databases-metadata.md | 12 +++- docs/system-databases-search.md | 8 +++ docs/system-other-search-dashboard.md | 2 + docs/system-other-ui.md | 2 + docs/system-services-analyse.md | 25 ++++++++- docs/system-services-authentication.md | 58 ++++++++----------- docs/system-services-broker.md | 18 ++++-- docs/system-services-data.md | 20 +++++-- docs/system-services-gateway.md | 4 +- docs/system-services-metadata.md | 77 +++++++++++++++++++------- docs/system-services-mirror.md | 26 +++++++-- docs/system-services-upload.md | 12 +++- mkdocs.yml | 25 ++++++--- 17 files changed, 261 insertions(+), 93 deletions(-) diff --git a/docs/contact.md b/docs/contact.md index c703830..b29bafa 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -8,7 +8,7 @@ hide: ## Team -### Project Management +### Strategy & Partnerships Ao.univ.Prof. Dr. [Andreas Rauber](https://www.ifs.tuwien.ac.at/~andi)<br /> Technische Universität Wien<br /> @@ -16,7 +16,7 @@ Research Unit Data Science<br /> Favoritenstraße 9-11<br /> A-1040 Vienna, Austria -### Development +### Technical Lead Projektass. Dipl.-Ing. [Martin Weise](https://ec.tuwien.ac.at/~weise/)<br /> Technische Universität Wien<br /> @@ -31,6 +31,7 @@ A-1040 Vienna, Austria - Güçlü, Gökay - Grantner, Tobias - Karnbach, Geoffrey +- Lukic, Nikola - Mahler, Lukas - Michlits, Cornelia - Rauber, Andreas diff --git a/docs/index.md b/docs/index.md index eb2d6e0..79c657b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -32,5 +32,5 @@ These institutions use DBRepo and integrated it into their repository infrastruc ## More Information - Demonstration instance [https://dbrepo1.ec.tuwien.ac.at](https://dbrepo1.ec.tuwien.ac.at) -- Sandbox instance [https://dbrepo2.ec.tuwien.ac.at](https://dbrepo2.ec.tuwien.ac.at) +- Sandbox instance [https://test.dbrepo.tuwien.ac.at](https://dbrepo2.ec.tuwien.ac.at) - System description [https://doi.org/10.2218/ijdc.v17i1.825](https://doi.org/10.2218/ijdc.v17i1.825) diff --git a/docs/system-databases-auth.md b/docs/system-databases-auth.md index e8de96c..c368151 100644 --- a/docs/system-databases-auth.md +++ b/docs/system-databases-auth.md @@ -8,16 +8,25 @@ author: Martin Weise !!! debug "Debug Information" - * Ports: 3306/tcp, 9100/tcp - * Prometheus: `http://:9100/metrics` + Image: [`bitnami/mariadb:10.5`](https://hub.docker.com/r/bitnami/mariadb) + + * Ports: 3306/tcp + * JDBC: `jdbc://mariadb:<hostname>:3306` ## Overview -tbd +This is the database in which the [Authentication Service](../system-services-authentication) writes into. In the +default configuration, only MariaDB is supported. ## Limitations -(none) +* No support for MariaDB Galera at the moment. + +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! ## Security diff --git a/docs/system-databases-data.md b/docs/system-databases-data.md index c3c0987..e3e08ce 100644 --- a/docs/system-databases-data.md +++ b/docs/system-databases-data.md @@ -8,17 +8,52 @@ author: Martin Weise !!! debug "Debug Information" - * Ports: 3306/tcp, 9100/tcp - * Prometheus: `http://:9100/metrics` + Image: [`bitnami/mariadb:10.5`](https://hub.docker.com/r/bitnami/mariadb) + + * Ports: 3306/tcp + * JDBC: `jdbc://mariadb:<hostname>:3306` ## Overview -It is the core component of the project. +By default, only one Data Database is deployed. You can deploy multiple (different) Data Database instances and make +them available in the repository as follows: + +```console +curl \ + -sSL \ + http://<hostname>:9093/api/container \ + -X POST \ + -d '{"name": "Data Database 2", "imageId": 1, "host": "example.com", "port": 3306, "privilegedUsername": "root", "privilegedPassword": "s3cr3t" }' +``` + +### Backup + +```console +mysqldump \ + -u <privilegedUsername> \ + -p<privilegedPassword> \ + <databaseInternalName> > dump.sql +``` + +### Restore + +```console +mysql \ + -u <privilegedUsername> \ + -p<privilegedPassword> \ + <databaseInternalName> < dump.sql +``` ## Limitations (none) +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! + ## Security (none) diff --git a/docs/system-databases-metadata.md b/docs/system-databases-metadata.md index 36c66b3..1cfcf69 100644 --- a/docs/system-databases-metadata.md +++ b/docs/system-databases-metadata.md @@ -8,8 +8,10 @@ author: Martin Weise !!! debug "Debug Information" - * Ports: 3306/tcp, 9100/tcp - * Prometheus: `http://:9100/metrics` + Image: [`bitnami/mariadb:10.5`](https://hub.docker.com/r/bitnami/mariadb) + + * Ports: 3306/tcp + * JDBC: `jdbc://mariadb:<hostname>:3306` It is the core component of the project. It is a relational database that contains metadata about all researcher database created in the database repository like column names, check expressions, value enumerations or key/value @@ -24,6 +26,12 @@ port `3306`. (none) +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! + ## Security (none) diff --git a/docs/system-databases-search.md b/docs/system-databases-search.md index bc3f1d7..ecabcaf 100644 --- a/docs/system-databases-search.md +++ b/docs/system-databases-search.md @@ -8,6 +8,8 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`dbrepo/search-db:latest`](https://hub.docker.com/r/dbrepo/search-db) + * Ports: 9200/tcp * Indexes: `http://:9200/_all` * Health: `http://:9200/_cluster/health` @@ -28,6 +30,12 @@ Database more efficient. (none) +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! + ## Security 1. Change the default credentials in the [Search Database Dashboard](../system-other-search-dashboard) with the default diff --git a/docs/system-other-search-dashboard.md b/docs/system-other-search-dashboard.md index 402fcf3..a2ac309 100644 --- a/docs/system-other-search-dashboard.md +++ b/docs/system-other-search-dashboard.md @@ -8,6 +8,8 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`opensearchproject/opensearch-dashboards:2.10.0`](https://hub.docker.com/r/opensearchproject/opensearch-dashboards) + * Ports: 5601/tcp * UI: `http://:5601/admin/dashboard/` diff --git a/docs/system-other-ui.md b/docs/system-other-ui.md index c3bb4fb..abe0e22 100644 --- a/docs/system-other-ui.md +++ b/docs/system-other-ui.md @@ -8,6 +8,8 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`dbrepo/ui:latest`](https://hub.docker.com/r/dbrepo/ui) + * Ports: 3000/tcp, 9100/tcp * Prometheus: `http://:9100/metrics` * UI: `http://:3000/` diff --git a/docs/system-services-analyse.md b/docs/system-services-analyse.md index e67e4f9..04f2a53 100644 --- a/docs/system-services-analyse.md +++ b/docs/system-services-analyse.md @@ -4,13 +4,34 @@ author: Martin Weise # Analyse Service +## tl;dr + !!! debug "Debug Information" + Image: [`dbrepo/analyse-service:latest`](https://hub.docker.com/r/dbrepo/analyse-service) + * Ports: 5000/tcp - * Prometheus: `http://:5000/metrics` - * Swagger UI: `http://:5000/swagger-ui/index.html` <a href="../swagger/analyse" target="_blank">:fontawesome-solid-square-up-right: view online</a> + * Prometheus: `http://<hostname>:5000/metrics` + * Health: `http://<hostname>:5000/health` + * Swagger UI: `http://<hostname>:5000/swagger-ui/index.html` <a href="../swagger/analyse" target="_blank">:fontawesome-solid-square-up-right: view online</a> + +## Overview It suggests data types for the FAIR Portal when creating a table from a *comma separated values* (CSV) file. It recommends enumerations for columns and returns e.g. a list of potential primary key candidates. The researcher is able to confirm these suggestions manually. Moreover, the *Analyze Service* determines basic statistical properties of numerical columns. + +## Limitations + +* No support for authentication + +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! + +## Security + +1. Since authentication is not supported, use IP-based ingress rules to limit access to the upload endpoint. diff --git a/docs/system-services-authentication.md b/docs/system-services-authentication.md index 2c39395..64bc611 100644 --- a/docs/system-services-authentication.md +++ b/docs/system-services-authentication.md @@ -8,36 +8,22 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`dbrepo/authentication-service:latest`](https://hub.docker.com/r/dbrepo/authentication-service) + * Ports: 8080/tcp - * Admin Console: `http://:8080/api/auth/admin/` - * Health: `http://:8080/api/auth/health` - * Prometheus: `http://:8080/api/auth/metrics` + * Admin Console: `http://<hostname>:8080/api/auth/admin/` + * Health: `http://<hostname>:8080/api/auth/health` + * Prometheus: `http://<hostname>:8080/api/auth/metrics` ## Overview -Very specific to the deployment of the organization. In our reference implementation we implement a *security assertion -markup language* (SAML) service provider and use our institutional SAML identity provider for obtaining account data -through an encrypted channel. - -From version 1.2 onwards we use Keycloak for authentication and deprecated the previous Spring Boot application. -Consequently, the authentication will be through Keycloak. - -By default, the Authentication Service comes with a self-signed certificate valid 3 months from build date. For -deployment it is *highly encouraged* to use your own certificate, properly issued by a trusted PKI, e.g. GÉANT. For -local deployments you can use the self-signed certificate. You need to accept the risk in most browsers when visiting -the [admin panel](https://localhost:8443/admin/). - -Sign in with the default credentials (username `fda`, password `fda`) or the one you configured during set-up. Be -default, users are created using the frontend and the sign-up page. But it is also possible to create users from -Keycloak, they will still act as "self-sign-up" created users. Since we do not support all features of Keycloak, leave -out required user actions as they will not be enforced, also the temporary password. +From version 1.2 onwards we use Keycloak for authentication for managing a part of the user identity and deprecated the +Spring Boot application instead. Going forward, the authentication will be +through [Keycloak by RedHat](https://quay.io/repository/keycloak/keycloak?tab=info). -Each user has attributes associated to them. In case you manually create a user in Keycloak directly, you need to add -them in Users > Add user > Attributes: - -* `theme_dark` (*boolean*, default: false) -* `orcid` (*string*) -* `affiliation` (*string*) +By default, users are created using the [UI](../system-other-ui) and the sign-up page in the UI. A new user is also +created in the UI creates a new user in the [Auth Database](../system-databases-auth), consequently a part of the +user identity is managed by Keycloak. ## Groups @@ -80,10 +66,8 @@ public ResponseEntity<DatabaseBriefDto> create(@NotNull Long containerId, | Name | Description | |--------------------------|--------------------------------------| -| `create-container` | Can create a container | | `find-container` | Can find a specific container | | `list-containers` | Can list all containers | -| `modify-container-state` | Can start and stop the own container | ### Default Database Handling @@ -171,10 +155,10 @@ public ResponseEntity<DatabaseBriefDto> create(@NotNull Long containerId, ### Escalated Container Handling -| Name | Description | -|----------------------------------|----------------------------------------------| -| `delete-container` | Can delete any container | -| `modify-foreign-container-state` | Can modify any container state (start, stop) | +| Name | Description | +|--------------------|--------------------------| +| `create-container` | Can create a container | +| `delete-container` | Can delete any container | ### Escalated Database Handling @@ -216,9 +200,15 @@ public ResponseEntity<DatabaseBriefDto> create(@NotNull Long containerId, ## Limitations -* No support for sending e-mails through Keycloak -* No support for temporary passwords -* No support for multi-factor authentication +* No support for sending e-mails through Keycloak by default. +* No support for temporary passwords. +* No support for multi-factor authentication. + +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! ## Security diff --git a/docs/system-services-broker.md b/docs/system-services-broker.md index 04ec39c..ff259c4 100644 --- a/docs/system-services-broker.md +++ b/docs/system-services-broker.md @@ -8,9 +8,12 @@ author: Martin Weise !!! debug "Debug Information" - * Ports: 5672/tcp, 15672/tcp - * RabbitMQ Management Plugin: `http://:15672` - * RabbitMQ Prometheus Plugin: `http://:15692/metrics` + Image: [`bitnami/rabbitmq:3.10`](https://hub.docker.com/r/bitnami/rabbitmq) + + * Ports: 5672/tcp, 15672/tcp, 15692/tcp + * AMQP: `amqp://<hostname>:5672` + * Management: `http://<hostname>:15672` + * Prometheus: `http://<hostname>:15692/metrics` ## Overview @@ -34,7 +37,14 @@ the [usage](/usage-broker) page. ## Limitations -* No support for MQTT. +* No support for MQTT in the [Metadata Service](../system-services-metadata) + and [Data Service](../system-services-data) because of MQTT's missing permission system. + +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! ## Security diff --git a/docs/system-services-data.md b/docs/system-services-data.md index 60914a8..b0d0e38 100644 --- a/docs/system-services-data.md +++ b/docs/system-services-data.md @@ -8,11 +8,15 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`dbrepo/data-service:latest`](https://hub.docker.com/r/dbrepo/data-service) + * Ports: 9093/tcp - * Info: `http://:9093/actuator/info` - * Health: `http://:9093/actuator/health` - * Prometheus: `http://:9093/actuator/prometheus` - * Swagger UI: `http://:9093/swagger-ui/index.html` <a href="../swagger/data" target="_blank">:fontawesome-solid-square-up-right: view online</a> + * Info: `http://<hostname>:9093/actuator/info` + * Health: `http://<hostname>:9093/actuator/health` + - Readiness: `http://<hostname>:9093/actuator/health/readiness` + - Liveness: `http://<hostname>:9093/actuator/health/liveness` + * Prometheus: `http://<hostname>:9093/actuator/prometheus` + * Swagger UI: `http://<hostname>:9093/swagger-ui/index.html` <a href="../swagger/data" target="_blank">:fontawesome-solid-square-up-right: view online</a> ## Overview @@ -22,7 +26,13 @@ Data Service up. ## Limitations -(none) +* No clear differentiation for data-handling endpoints from the [Metadata Service](../system-services-metadata) yet. + +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! ## Security diff --git a/docs/system-services-gateway.md b/docs/system-services-gateway.md index fbe1ee8..ee84865 100644 --- a/docs/system-services-gateway.md +++ b/docs/system-services-gateway.md @@ -8,6 +8,8 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`nginx:1.25-alpine-slim`](https://hub.docker.com/r/nginx) + * Ports: 80/tcp, 443/tcp ## Overview @@ -17,7 +19,7 @@ standard [NGINX](https://www.nginx.com/) reverse proxy for load balancing, SSL/T ## Limitations -(none) +(none relevant to DBRepo) ## Security diff --git a/docs/system-services-metadata.md b/docs/system-services-metadata.md index 74f9d65..d020c9b 100644 --- a/docs/system-services-metadata.md +++ b/docs/system-services-metadata.md @@ -8,45 +8,82 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`dbrepo/metadata-service:latest`](https://hub.docker.com/r/dbrepo/metadata-service) + * Ports: 9099/tcp - * Info: `http://:9099/actuator/info` - * Health: `http://:9099/actuator/health` - * Readiness: `http://:9099/actuator/health/readiness` - * Liveness: `http://:9099/actuator/health/liveness` - * Prometheus: `http://:9099/actuator/prometheus` - * Swagger UI: `http://:9099/swagger-ui/index.html` <a href="../swagger/metadata" target="_blank">:fontawesome-solid-square-up-right: view online</a> + * Info: `http://9093:9099/actuator/info` + * Health: `http://9093:9099/actuator/health` + - Readiness: `http://9093:9099/actuator/health/readiness` + - Liveness: `http://9093:9099/actuator/health/liveness` + * Prometheus: `http://9093:9099/actuator/prometheus` + * Swagger UI: `http://9093:9099/swagger-ui/index.html` <a href="../swagger/metadata" target="_blank">:fontawesome-solid-square-up-right: view online</a> ## Overview -This microservice manages: +This service manages the following topics: * Databases -* Users -* Metadata (PID, OAI-PMH) -* Queries, views +* Identifiers (DataCite, OAI-PMH) +* Queries +* Semantics (Ontologies) * Tables +* Users +* Views + +### Databases + +The service handles table operations inside a database. We use [Hibernate](https://hibernate.org/orm/) for schema and +data ingest operations. -It creates the databases inside a Docker container and the Query Store. Currently, we only -support [MariaDB](https://mariadb.org/) images that allow table versioning with low programmatic effort. +### Identifiers -This microservice is responsible for creating and resolving a *persistent identifier* (PID) attached to a query to +The service is responsible for creating and resolving a *persistent identifier* (PID) attached to a query to obtain the metadata attached to it and allow re-execution of a query. We store both the query and hashes of the query and result set to allow equality checks of the originally obtained result set and the currently obtained result set. In the reference implementation we currently only use a numerical id column and plan to integrate *digital object identifier* (DOI) through our institutional library soon. -This service provides an OAI-PMH endpoint for metadata crawler. +This service provides an OAI-PMH endpoint for metadata aggregators. + +### Queries + +It provides an interface to insert data into the tables. It also allows for view-only, paginated and versioned query +execution to the raw data. + +### Semantics + +The service provides metadata to the table columns in the [Metadata Database](../system-databases-metadata) from +registered ontologies like Wikidata [`wd:`](https://wikidata.org), Ontology of Units of +Measurement [`om2:`](https://www.ontology-of-units-of-measure.org/resource/om-2), Friend of a +Friend [`foaf:`](http://xmlns.com/foaf/0.1/), the [`prov:`](http://www.w3.org/ns/prov#) namespace, etc. -It provides an interface to insert data into the tables created by the Table Service. It also allows for view-only, -paginated and versioned query execution to the raw data and consumes messages in the message queue from the Broker -Service. -This microservice handles table operations inside a database that is managed by the Database Service. We -use [Hibernate](https://hibernate.org/orm/) for schema and data ingest operations. +### Tables + +The service manages tables in the [Data Database](../system-databases-data) and manages the metadata of these tables +in the [Metadata Database](../system-databases-metadata). + +### Users + +The service manages users in the [Data Database](../system-databases-data) +and [Metadata Database](../system-databases-metadata), as well as in the [Broker Service](../system-services-broker) +and the [Authentication Service](../system-services-authentication). + +### Views + +The service manages views in the [Data Database](../system-databases-data) +and [Metadata Database](../system-databases-metadata). ## Limitations -(none) +* No support for other databases than [MariaDB](https://mariadb.org/) because of system-versioning capabilities missing + in other database engines. + +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! ## Security diff --git a/docs/system-services-mirror.md b/docs/system-services-mirror.md index e7514e8..94cd66f 100644 --- a/docs/system-services-mirror.md +++ b/docs/system-services-mirror.md @@ -8,15 +8,21 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`dbrepo/mirror-service:latest`](https://hub.docker.com/r/dbrepo/mirror-service) + * Ports: 9050/tcp - * Info: `http://:9050/actuator/info` - * Health: `http://:9050/actuator/health` - * Prometheus: `http://:9050/actuator/prometheus` - * Swagger UI: `http://:9050/swagger-ui/index.html` <a href="../swagger/mirror" target="_blank">:fontawesome-solid-square-up-right: view online</a> + * Info: `http://<hostname>:9050/actuator/info` + * Health: `http://<hostname>:9050/actuator/health` + - Readiness: `http://<hostname>:9050/actuator/health/readiness` + - Liveness: `http://<hostname>:9050/actuator/health/liveness` + * Prometheus: `http://<hostname>:9050/actuator/prometheus` + * Swagger UI: `http://<hostname>:9050/swagger-ui/index.html` <a href="../swagger/mirror" target="_blank">:fontawesome-solid-square-up-right: view online</a> ## Overview -This service mirrors relevant table from the Metadata DB into the Search DB: +This service is responsible for synchronizing the [Metadata Database](../system-databases-metadata) with +the [Search Database](../system-databases-search) and the user permissions of databases, tables, etc. with +the [Broker Service](../system-services-broker). | Metadata DB | ↦ | Search DB | |---------------------|:-------:|---------------| @@ -31,7 +37,15 @@ This service mirrors relevant table from the Metadata DB into the Search DB: ## Limitations -(none) +* No support for cron-job like execution. +* No support for conditional updates in the [Search Database](../system-databases-search), updates occur in defined + intervals. + +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! ## Security diff --git a/docs/system-services-upload.md b/docs/system-services-upload.md index 10636f0..ab5c8f9 100644 --- a/docs/system-services-upload.md +++ b/docs/system-services-upload.md @@ -8,9 +8,11 @@ author: Martin Weise !!! debug "Debug Information" + Image: [`dbrepo/upload-service:latest`](https://hub.docker.com/r/dbrepo/upload-service) + * Ports: 1080/tcp - * TUS: `http://:1080/api/upload/files` - * Prometheus: `http://:1080/metrics` + * TUS: `http://<hostname>:1080/api/upload/files` + * Prometheus: `http://<hostname>:1080/metrics` * Swagger UI: <a href="../swagger/upload" target="_blank">:fontawesome-solid-square-up-right: view online</a> ## Overview @@ -31,6 +33,12 @@ For more information, see the [official Docker image](https://hub.docker.com/r/t * No support for authentication +!!! question "Do you miss functionality? Do these limitations affect you?" + + We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get + in [contact](../contact) with us, we happily answer requests for collaboration with attached CV and your programming + experience! + ## Security 1. Since authentication is not supported, use IP-based ingress rules to limit access to the upload endpoint. diff --git a/mkdocs.yml b/mkdocs.yml index 7894e3a..3ef0c99 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -57,13 +57,24 @@ theme: icon: repo: fontawesome/brands/git-alt palette: - scheme: default - primary: custom - font: - code: Roboto Mono - toggle: - icon: material/weather-night - name: Switch to light mode + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: default + primary: custom + font: + code: Roboto Mono + toggle: + icon: material/brightness-7 + name: Switch to dark mode + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: custom + font: + code: Roboto Mono + toggle: + icon: material/brightness-4 + name: Switch to light mode name: material markdown_extensions: - attr_list -- GitLab