mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-09-14 06:17:14 +02:00
web-app-xwiki: add SuperAdmin bootstrap support
- Added schema entry for superadminpassword - Added vars for XWIKI_SUPERADMIN_USERNAME/PASSWORD - Extended xwiki.properties.j2 to configure superadminpassword - Added 02_bootstrap_admin.yml to create XWiki admin via REST using SuperAdmin - Updated REST URLs to use XWIKI_REST_GENERAL - Enabled CSP flag unsafe-inline Conversation: https://chatgpt.com/share/68c39ddb-e9cc-800f-b32f-9d4c1e09e43e
This commit is contained in:
@@ -25,7 +25,9 @@ features:
|
||||
server:
|
||||
csp:
|
||||
whitelist: {}
|
||||
flags: {}
|
||||
flags:
|
||||
script-src-elem:
|
||||
unsafe-inline: true
|
||||
domains:
|
||||
canonical:
|
||||
- "x.wiki.{{ PRIMARY_DOMAIN }}"
|
||||
|
@@ -0,0 +1,6 @@
|
||||
credentials:
|
||||
superadminpassword:
|
||||
description: "Password for the xwiki superadmin"
|
||||
algorithm: "alphanumeric"
|
||||
validation:
|
||||
min_length: 50
|
@@ -29,9 +29,11 @@
|
||||
delay: 5
|
||||
until: xwiki_rest_up is succeeded
|
||||
|
||||
- include_tasks: 02_bootstrap_admin.yml
|
||||
|
||||
- name: "Check if OIDC extension installed"
|
||||
uri:
|
||||
url: "http://127.0.0.1:{{ XWIKI_HOST_PORT }}/xwiki/rest/wikis/xwiki/extensions/{{ XWIKI_EXT_OIDC_ID | urlencode }}"
|
||||
url: "{{ XWIKI_REST_GENERAL }}/extensions/{{ XWIKI_EXT_OIDC_ID | urlencode }}"
|
||||
method: GET
|
||||
user: "{{ XWIKI_ADMIN_USER }}"
|
||||
password: "{{ XWIKI_ADMIN_PASS }}"
|
||||
@@ -42,7 +44,7 @@
|
||||
|
||||
- name: "Check if LDAP extension installed"
|
||||
uri:
|
||||
url: "http://127.0.0.1:{{ XWIKI_HOST_PORT }}/xwiki/rest/wikis/xwiki/extensions/{{ XWIKI_EXT_LDAP_ID | urlencode }}"
|
||||
url: "{{ XWIKI_REST_GENERAL }}/extensions/{{ XWIKI_EXT_LDAP_ID | urlencode }}"
|
||||
method: GET
|
||||
user: "{{ XWIKI_ADMIN_USER }}"
|
||||
password: "{{ XWIKI_ADMIN_PASS }}"
|
||||
|
42
roles/web-app-xwiki/tasks/02_bootstrap_admin.yml
Normal file
42
roles/web-app-xwiki/tasks/02_bootstrap_admin.yml
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
# Wait until REST endpoint is available (01_core usually ensures this, but we add safety)
|
||||
- name: "XWIKI | Wait until REST answers"
|
||||
uri:
|
||||
url: "http://127.0.0.1:{{ XWIKI_HOST_PORT }}/xwiki/rest/"
|
||||
status_code: [200,401]
|
||||
register: _rest_ping
|
||||
retries: 60
|
||||
delay: 5
|
||||
until: _rest_ping is succeeded
|
||||
|
||||
# Check if the target admin already exists (404 = missing)
|
||||
- name: "XWIKI | Check if target admin user exists"
|
||||
uri:
|
||||
url: "{{ XWIKI_REST_GENERAL }}/users/{{ XWIKI_ADMIN_USER | urlencode }}"
|
||||
method: GET
|
||||
user: "{{ XWIKI_SUPERADMIN_USERNAME }}"
|
||||
password: "{{ XWIKI_SUPERADMIN_PASSWORD }}"
|
||||
force_basic_auth: true
|
||||
status_code: [200,404]
|
||||
register: _admin_exists
|
||||
|
||||
# Create admin user if not existing
|
||||
- name: "XWIKI | Create admin user via REST"
|
||||
uri:
|
||||
url: "{{ XWIKI_REST_GENERAL }}/users"
|
||||
method: POST
|
||||
user: "{{ XWIKI_SUPERADMIN_USERNAME }}"
|
||||
password: "{{ XWIKI_SUPERADMIN_PASSWORD }}"
|
||||
force_basic_auth: true
|
||||
status_code: 201
|
||||
headers:
|
||||
Content-Type: "application/xml"
|
||||
body: |
|
||||
<user>
|
||||
<firstName>{{ users.administrator.firstname | default('Admin') }}</firstName>
|
||||
<lastName>{{ users.administrator.lastname | default('User') }}</lastName>
|
||||
<email>{{ users.administrator.email }}</email>
|
||||
<username>{{ XWIKI_ADMIN_USER }}</username>
|
||||
<password>{{ XWIKI_ADMIN_PASS }}</password>
|
||||
</user>
|
||||
when: _admin_exists.status == 404
|
@@ -14,3 +14,4 @@ oidc.userinfoclaims={{ XWIKI_OIDC_GROUPS_CLAIM }}
|
||||
oidc.groups.claim={{ XWIKI_OIDC_GROUPS_CLAIM }}
|
||||
oidc.groups.mapping=XWiki.XWikiAdminGroup={{ XWIKI_OIDC_ADMIN_PROVIDER_GROUP }}
|
||||
{% endif %}
|
||||
xwiki.superadminpassword={{ XWIKI_SUPERADMIN_PASSWORD }}
|
||||
|
@@ -32,8 +32,13 @@ XWIKI_ADMIN_USER: "{{ users.administrator.username }}"
|
||||
XWIKI_ADMIN_PASS: "{{ users.administrator.password }}"
|
||||
XWIKI_ADMIN_GROUP: "{{ application_id }}-administrator"
|
||||
|
||||
# Superadministrator
|
||||
XWIKI_SUPERADMIN_PASSWORD: "{{ applications | get_app_conf(application_id, 'credentials.superadminpassword') }}"
|
||||
XWIKI_SUPERADMIN_USERNAME: "superadmin"
|
||||
|
||||
# REST endpoint (local inside container)
|
||||
XWIKI_REST_BASE: "http://127.0.0.1:{{ XWIKI_HOST_PORT }}/xwiki/rest/jobs?jobType=install&async=false"
|
||||
XWIKI_REST_GENERAL: "http://127.0.0.1:{{ XWIKI_HOST_PORT }}/xwiki/rest/wikis/xwiki"
|
||||
|
||||
# Extension IDs + Versions (pin versions explicitly)
|
||||
XWIKI_EXT_LDAP_ID: "org.xwiki.contrib.ldap:ldap-authenticator"
|
||||
|
Reference in New Issue
Block a user