Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
41d8ad8
Only one manage per access instance
oharsta May 13, 2026
9d49c90
English IdP description
oharsta May 15, 2026
c1b124e
Fixed deployment openaccess
oharsta May 15, 2026
f3c7410
Added OhDear configuration
oharsta May 22, 2026
59133c8
Merge branch 'main' into feature/access-config
oharsta May 22, 2026
91630d0
Feature toggle for demo seed
oharsta May 27, 2026
8a161e5
Merge branch 'main' into feature/access-config
oharsta May 27, 2026
a9b37ce
Configure cleanup cron for Spring sessions
oharsta May 27, 2026
a8b42e3
Added - broken - stepup service_providers
oharsta May 29, 2026
33f91a4
Replced raw fragment 🤦
oharsta May 29, 2026
c6cb8ae
Fixed broken json
oharsta May 29, 2026
397ef0f
Access: remove separate server and client versions
baszoetekouw Jun 4, 2026
6e2239c
yamllint
baszoetekouw Jun 4, 2026
75602e1
remove debugging
baszoetekouw Jun 4, 2026
70f464c
yamllint
baszoetekouw Jun 4, 2026
cbb986e
Merge branch 'main' into feature/access-config
oharsta Jun 4, 2026
f9ec372
yamllint
baszoetekouw Jun 4, 2026
d947045
rename openacces role
baszoetekouw Jun 4, 2026
3d3689f
Merge branch 'release/658' into feature/access-config
baszoetekouw Jun 4, 2026
c9d94f6
Merge pull request #673 from OpenConext/feature/access-config
baszoetekouw Jun 4, 2026
1d1172c
linting
baszoetekouw Jun 4, 2026
de95b09
rename openconextaccess_* to access_dashboard_*
baszoetekouw Jun 4, 2026
79a9b92
Merge remote-tracking branch 'origin/release/646' into release/658
baszoetekouw Jun 4, 2026
bcaa116
Fix access_dashboard directory
baszoetekouw Jun 4, 2026
5ce14a0
actually use local apache config
baszoetekouw Jun 4, 2026
331093d
fix server name
baszoetekouw Jun 4, 2026
28c9baa
Fix access dashboard gui apache config
baszoetekouw Jun 4, 2026
936865b
correctly restart gui container
baszoetekouw Jun 4, 2026
ba0bd97
test
baszoetekouw Jun 4, 2026
dbfc900
Fix file install
baszoetekouw Jun 4, 2026
7df220d
Make sure mariadbdocker only runs on test
baszoetekouw Jun 5, 2026
7efcb9e
show which users are created
baszoetekouw Jun 5, 2026
6a3451a
log only name
baszoetekouw Jun 5, 2026
4fb3bf5
ansible-lint
baszoetekouw Jun 5, 2026
b85e83c
Fix galera_create_users: show created users (and fix ansible-linting)
baszoetekouw Jun 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .yamllint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
extends: "default"

rules:
# 80 chars should be enough, but don't fail if a line is longer
line-length:
max: 160
level: "warning"

quoted-strings:
quote-type: "any"
required: true
allow-quoted-quotes: false
check-keys: false

# ansible-lint compatibility:
comments:
min-spaces-from-content: 1

comments-indentation: false

braces:
max-spaces-inside: 1

octal-values:
forbid-implicit-octal: true
forbid-explicit-octal: true
2 changes: 1 addition & 1 deletion environments/template/secrets/secret_example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ invite_lifecycle_secret: "secret"
invite_internal_secret: "secret"
invite_profile_secret: "secret"
invite_sp_dashboard_secret: "secret"
invite_access_secret: "secret"
invite_access_dashboard_secret: "secret"
invite_private_key_pkcs8: |
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfpYYMgKYDICkp
Expand Down
7 changes: 3 additions & 4 deletions provision.yml
Original file line number Diff line number Diff line change
Expand Up @@ -199,12 +199,12 @@
- oidc-playground
tags: ['oidc-playground']

- name: Deploy openaccess app & server
- name: Deploy access_dashboard app & server
hosts: docker_openaccess
become: true
roles:
- openaccess
tags: ['openaccess']
- access_dashboard
tags: ['access_dashboard']

- name: Deploy pdp app
hosts: docker_pdp
Expand Down Expand Up @@ -302,4 +302,3 @@
roles:
- { role: mariadbdocker, tags: ['mariadbdocker']}
- { role: mongodbdocker, tags: ['mongodbdocker']}

4 changes: 4 additions & 0 deletions roles/access_dashboard/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
access_dashboard_docker_networks:
- name: "loadbalancer"
access_dashboard_cronjobmaster: true
20 changes: 20 additions & 0 deletions roles/access_dashboard/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
- name: "Restart access dashboard server"
community.docker.docker_container:
name: "access_dashboard_server"
state: "started"
restart: true
# avoid restarting it creates unexpected data loss according to docker_container_module notes
comparisons:
'*': "ignore"
when: "access_dashboard_server_container is success and access_dashboard_server_container is not change"

- name: "Restart access dashboard gui"
community.docker.docker_container:
name: "access_dashboard_gui"
state: "started"
restart: true
# avoid restarting it creates unexpected data loss according to docker_container_module notes
comparisons:
'*': "ignore"
when: "access_dashboard_gui_container is success and access_dashboard_gui_container is not change"
96 changes: 96 additions & 0 deletions roles/access_dashboard/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
- name: "Create directory to keep configfile"
ansible.builtin.file:
dest: "/opt/openconext/access_dashboard"
state: "directory"
owner: "root"
group: "root"
mode: "0770"

- name: "Place the server configfiles"
ansible.builtin.template:
src: "{{ item }}.j2"
dest: "/opt/openconext/access_dashboard/{{ item }}"
owner: "root"
group: "root"
mode: "0600"
with_items:
- "logback.xml"
- "serverapplication.yml"
notify: "Restart access dashboard server"

- name: "Place the gui configfiles"
ansible.builtin.template:
src: "{{ item }}.j2"
dest: "/opt/openconext/access_dashboard/{{ item }}"
owner: "root"
group: "root"
mode: "0600"
with_items:
- "apache_gui.conf"
notify: "Restart access dashboard gui"

- name: "Add the MariaDB docker network to the list of networks when MariaDB runs in Docker"
ansible.builtin.set_fact:
access_dashboard_docker_networks:
- name: "loadbalancer"
- name: "openconext_mariadb"
when: "mariadb_in_docker | default(false) | bool"

- name: "Create and start the access server container"
community.docker.docker_container:
name: "access_dashboard_server"
env:
TZ: "{{ timezone }}"
image: "ghcr.io/openconext/openconext-access/accessserver:{{ access_dashboard_version }}"
pull: true
restart_policy: "always"
state: "started"
networks: "{{ access_dashboard_docker_networks }}"
mounts:
- source: "/opt/openconext/access_dashboard/serverapplication.yml"
target: "/application.yml"
type: "bind"
read_only: true
- source: "/opt/openconext/access_dashboard/logback.xml"
target: "/logback.xml"
type: "bind"
read_only: true
command: "-Xmx512m --spring.config.location=./"
etc_hosts:
host.docker.internal: "host-gateway"
register: "access_dashboard_server_container"

- name: "Create the access client container"
community.docker.docker_container:
name: "access_dashboard_gui"
image: "ghcr.io/openconext/openconext-access/accessclient:{{ access_dashboard_version }}"
pull: true
restart_policy: "always"
state: "started"
networks:
- name: "loadbalancer"
labels:
traefik.http.routers.accessclient.rule: "Host(`{{ access_dashboard_base_domain }}`)"
traefik.http.routers.accessclient.tls: "true"
traefik.enable: "true"
hostname: "access"
mounts:
- source: "/etc/localtime"
target: "/etc/localtime"
type: "bind"
read_only: true
- source: "/opt/openconext/access_dashboard/apache_gui.conf"
target: "/etc/apache2/sites-enabled/appconf.conf"
type: "bind"
read_only: true
- source: "/opt/openconext/common/favicon.ico"
target: "/var/www/favicon.ico"
type: "bind"
read_only: true
env:
S3_STORAGE_URL: "{{ access_dashboard.s3_storage.url }}"
S3_STORAGE_KEY: "{{ access_dashboard.s3_storage.key }}"
S3_STORAGE_SECRET: "{{ access_dashboard.s3_storage.secret }}"
S3_STORAGE_BUCKET: "{{ access_dashboard.s3_storage.bucket }}"
register: "access_dashboard_gui_container"
59 changes: 59 additions & 0 deletions roles/access_dashboard/templates/apache_gui.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
ServerName access_dashboard_client

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(js|css)(\.map)?$
RewriteCond %{REQUEST_URI} !\.svg$
RewriteCond %{REQUEST_URI} !\.png$
RewriteCond %{REQUEST_URI} !\.ico$
RewriteCond %{REQUEST_URI} !\.woff$
RewriteCond %{REQUEST_URI} !\.woff2$
RewriteCond %{REQUEST_URI} !\.ttf$
RewriteCond %{REQUEST_URI} !\.wav$
RewriteCond %{REQUEST_URI} !\.eot$
RewriteCond %{REQUEST_URI} !^/(asset-)?manifest.json$
RewriteCond %{REQUEST_URI} !^/api/
RewriteCond %{REQUEST_URI} !^/login/
RewriteCond %{REQUEST_URI} !^/oauth2/
RewriteCond %{REQUEST_URI} !^/ui/
RewriteCond %{REQUEST_URI} !^/internal/
RewriteCond %{REQUEST_URI} !^/fonts/
RewriteRule (.*) /index.html [L]

ProxyPass /api http://access_dashboard_server:8080/api retry=0
ProxyPassReverse /api http://access_dashboard_server:8080/api
ProxyPassMatch ^/oauth2(.*)$ http://access_dashboard_server:8080
ProxyPassReverse /oauth2 http://access_dashboard_server:8080/oauth2
ProxyPassMatch ^/internal(.*)$ http://access_dashboard_server:8080
ProxyPassReverse /internal http://access_dashboard_server:8080/internal
ProxyPassMatch ^/login(.*)$ http://access_dashboard_server:8080
ProxyPassReverse /login http://access_dashboard_server:8080/login
ProxyPassMatch ^/ui(.*)$ http://access_dashboard_server:8080
ProxyPassReverse /ui http://access_dashboard_server:8080/ui

DocumentRoot /var/www/

<Location "/api">
ProxyPreserveHost On
</Location>
<Location "/oauth2">
ProxyPreserveHost On
</Location>
<Location "/internal">
ProxyPreserveHost On
</Location>
<Location "/login">
ProxyPreserveHost On
</Location>
<Directory /var/www>
Require all granted
Options -Indexes
</Directory>

<FilesMatch "\.html$">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Expires "Sun, 8 Jun 1986 08:06:00 GMT"
</FilesMatch>

Header always set X-Frame-Options "DENY"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set X-Content-Type-Options "nosniff"
29 changes: 29 additions & 0 deletions roles/access_dashboard/templates/logback.xml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#jinja2:lstrip_blocks: True
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{ISO8601} %5p [%t] %logger{40}:%L - %m%n</pattern>
</encoder>
</appender>

<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>{{ smtp_server }}</smtpHost>
<from>{{ noreply_email }}</from>
<to>{{ error_mail_to }}</to>
<subject>{{ error_subject_prefix }}Unexpected error in surfaccess</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>

<logger name="surfaccess" level="INFO"/>
<root level="WARN">
<appender-ref ref="STDOUT"/>
<appender-ref ref="EMAIL"/>
</root>

</configuration>
Loading