diff --git a/REUSE.toml b/REUSE.toml
index f23bdfa3..fb5cde4d 100644
--- a/REUSE.toml
+++ b/REUSE.toml
@@ -14,7 +14,7 @@ SPDX-FileCopyrightText = "2023 Bundesministerium des Innern und für Heimat, PG
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
-path = "helmfile/files/theme/*"
+path = "helmfile/files/theme/**"
SPDX-FileCopyrightText = "2024 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH"
SPDX-License-Identifier = "Apache-2.0"
diff --git a/cspell.json b/cspell.json
index 1cac37b5..8fc9cd98 100644
--- a/cspell.json
+++ b/cspell.json
@@ -4,79 +4,81 @@
"dictionaryDefinitions": [],
"dictionaries": [],
"words": [
- "openDesk",
+ "Addressbooks",
"AppSuite",
- "Collabora",
- "Digitale",
- "Jitsi",
- "Nextcloud",
- "Öffentlichen",
- "OpenProject",
- "Souveränität",
- "Verwaltung",
- "Zentrum",
- "Keycloak",
- "NATS",
- "slapadd",
- "slapcat",
- "RDBMS",
- "Velero",
- "Univention",
- "OIDC",
- "kcadmin",
- "DMARC",
- "homeserver",
- "Bundesministerium",
- "Innern",
- "Heimat",
- "Projektgruppe",
+ "Arbeitsplatz",
"Aufbau",
- "Filepicker",
- "Weboffice",
- "Xchange",
- "opencode",
- "seccomp",
- "psql",
- "databasename",
- "helmfile",
- "gotmpl",
- "containerd",
- "letsencrypt",
- "CNCF",
- "kubespray",
- "ICAP",
+ "bootstrap",
+ "Bundesministerium",
"Ceph",
+ "clamav",
+ "CNCF",
+ "Collabora",
+ "commandline",
+ "configurability",
+ "containerd",
"Coturn",
- "Minio",
- "Kyverno",
- "Otterize",
- "IBAC",
- "pubkeys",
- "Grundschutz",
- "Kubescape",
- "Gitflow",
- "hadolint",
+ "cryptpad",
+ "databasename",
+ "Digitale",
+ "DMARC",
"explorative",
+ "Filepicker",
+ "filestore",
+ "Gitflow",
+ "gotmpl",
+ "Grundschutz",
+ "hadolint",
+ "Heimat",
+ "helmfile",
+ "helmfiles",
+ "homeserver",
+ "IBAC",
+ "ICAP",
+ "IMAPS",
+ "Innern",
+ "Jitsi",
+ "kcadmin",
+ "Keycloak",
+ "Kubescape",
+ "kubespray",
+ "Kyverno",
+ "letsencrypt",
+ "localpart",
+ "Minio",
+ "NATS",
+ "Nextcloud",
+ "nindent",
"Nordeck",
"Nubus",
- "Souveräne",
- "Arbeitsplatz",
- "commandline",
- "helmfiles",
- "SMTPS",
- "IMAPS",
- "xwiki",
- "cryptpad",
- "clamav",
- "templating",
- "localpart",
- "Addressbooks",
- "filestore",
- "trashbin",
- "bootstrap",
- "configurability",
+ "Öffentlichen",
+ "OIDC",
+ "opencode",
+ "openDesk",
+ "OpenProject",
+ "Otterize",
+ "Projektgruppe",
+ "psql",
+ "pubkeys",
+ "RDBMS",
+ "seccomp",
"selfsigned",
- "truststore"
+ "slapadd",
+ "slapcat",
+ "SMTPS",
+ "Souveräne",
+ "Souveränität",
+ "templating",
+ "trashbin",
+ "truststore",
+ "Univention",
+ "Velero",
+ "Verwaltung",
+ "Videokonferenz",
+ "Weboffice",
+ "Xchange",
+ "xwiki",
+ "Zentrum"
],
"ignoreWords": [],
"import": []
diff --git a/docs/migrations.md b/docs/migrations.md
index f016b298..2ce25ec9 100644
--- a/docs/migrations.md
+++ b/docs/migrations.md
@@ -11,6 +11,7 @@ SPDX-License-Identifier: Apache-2.0
* [Releases upgrade details](#releases-upgrade-details)
* [From v1.0.0](#from-v100)
* [Pre-upgrade: Manual checks/steps from v1.0.0](#pre-upgrade-manual-checkssteps-from-v100)
+ * [Helmfile Cleanup: Restructured `/helmfile/files/theme` folder](#helmfile-cleanup-restructured-helmfilefilestheme-folder)
* [Helmfile Cleanup: Consistent use of `*.yaml.gotmpl`](#helmfile-cleanup-consistent-use-of-yamlgotmpl)
* [Helmfile Cleanup: Prefixing certain app directories with `opendesk-`](#helmfile-cleanup-prefixing-certain-app-directories-with-opendesk-)
* [Helmfile Cleanup: Helmfile Cleanup: Splitting external vs. openDesk services](#helmfile-cleanup-helmfile-cleanup-splitting-external-vs-opendesk-services)
@@ -76,6 +77,10 @@ Explanation of the table's columns:
### Pre-upgrade: Manual checks/steps from v1.0.0
+#### Helmfile Cleanup: Restructured `/helmfile/files/theme` folder
+
+If you make use of the [theme folder](../helmfile/files/theme/) or the [`theme.yaml.gotmpl`](../helmfile/environments/default/theme.yaml.gotmpl), e.g. to applying your own imagery, please ensure you adhere to the new structure of the folder and the yaml-file.
+
#### Helmfile Cleanup: Consistent use of `*.yaml.gotmpl`
In v1.0.0 the files in [`/helmfile/environments/default`](../helmfile/environments/default/) had mixed extensions,
diff --git a/helmfile/apps/element/helmfile-child.yaml.gotmpl b/helmfile/apps/element/helmfile-child.yaml.gotmpl
index 96c31790..7f564e2f 100644
--- a/helmfile/apps/element/helmfile-child.yaml.gotmpl
+++ b/helmfile/apps/element/helmfile-child.yaml.gotmpl
@@ -112,15 +112,9 @@ repositories:
url: "{{ .Values.global.helmRegistry | default .Values.charts.synapsePipe.registry }}/{{ .Values.charts.synapsePipe.repository }}"
releases:
- # During upgrade 1.0.0 -> 1.1.0 the chart 'opendesk-element' has been moved to 'opendesk-element-web'
- name: "opendesk-element"
chart: "element-repo/{{ .Values.charts.element.name }}"
version: "{{ .Values.charts.element.version }}"
- installed: false
-
- - name: "opendesk-element-web"
- chart: "element-repo/{{ .Values.charts.elementWeb.name }}"
- version: "{{ .Values.charts.elementWeb.version }}"
values:
- "values-element.yaml.gotmpl"
{{ range .Values.customization.release.opendeskElement }}
diff --git a/helmfile/apps/element/values-element.yaml.gotmpl b/helmfile/apps/element/values-element.yaml.gotmpl
index 4092933e..47645263 100644
--- a/helmfile/apps/element/values-element.yaml.gotmpl
+++ b/helmfile/apps/element/values-element.yaml.gotmpl
@@ -149,6 +149,7 @@ resources:
{{ .Values.resources.element | toYaml | nindent 2 }}
theme:
+ title: "Chat - {{ .Values.theme.texts.productName }}"
{{ .Values.theme | toYaml | nindent 2 }}
...
diff --git a/helmfile/apps/jitsi/values-jitsi.yaml.gotmpl b/helmfile/apps/jitsi/values-jitsi.yaml.gotmpl
index 32bd5562..06dc812a 100644
--- a/helmfile/apps/jitsi/values-jitsi.yaml.gotmpl
+++ b/helmfile/apps/jitsi/values-jitsi.yaml.gotmpl
@@ -63,6 +63,7 @@ settings:
keycloakClientId: "opendesk-jitsi"
theme:
+ title: "Videokonferenz - {{ .Values.theme.texts.productName }}"
{{ .Values.theme | toYaml | nindent 2 }}
jitsi:
diff --git a/helmfile/apps/nubus/values-nubus.yaml.gotmpl b/helmfile/apps/nubus/values-nubus.yaml.gotmpl
index 4ec97c8d..8273c73e 100644
--- a/helmfile/apps/nubus/values-nubus.yaml.gotmpl
+++ b/helmfile/apps/nubus/values-nubus.yaml.gotmpl
@@ -423,7 +423,7 @@ nubusStackDataUms:
umcMemcachedHostname: {{ .Values.cache.umsSelfservice.host | quote }}
umcMemcachedUsername: ""
externalMailDomain: {{ .Values.global.mailDomain | default .Values.global.domain }}
- umcHtmlTitle: "openDesk Portal"
+ umcHtmlTitle: "Portal - {{ .Values.theme.texts.productName }}"
smtpHost: {{ printf "%s.%s.svc.%s" "postfix" (.Values.postfix.namespace | default .Release.Namespace) .Values.cluster.networking.domain | quote }}
smtpPort: 25
smtpUser: ""
@@ -443,8 +443,8 @@ nubusStackDataUms:
portalGroupwareLinkBase: {{ printf "https://%s.%s" .Values.global.hosts.openxchange .Values.global.domain }}
portalFileshareLinkBase: {{ printf "https://%s.%s" .Values.global.hosts.nextcloud .Values.global.domain }}
portalNotesLinkBase: {{ printf "https://%s.%s" .Values.global.hosts.notes .Values.global.domain }}
- portalTitleDE: "openDesk Portal"
- portalTitleEN: "openDesk Portal"
+ portalTitleDE: "Portal - {{ .Values.theme.texts.productName }}"
+ portalTitleEN: "Portal - {{ .Values.theme.texts.productName }}"
oxDefaultContext: "1"
componentEnabled:
notes: {{ .Values.notes.enabled }}
@@ -526,7 +526,7 @@ nubusUmcServer:
nubusUmcGateway:
umcGateway:
- umcHtmlTitle: "openDesk Portal"
+ umcHtmlTitle: "Portal - {{ .Values.theme.texts.productName }}"
ingress:
certManager:
enabled: false
diff --git a/helmfile/apps/nubus/values-opendesk-customization.yaml.gotmpl b/helmfile/apps/nubus/values-opendesk-customization.yaml.gotmpl
index 79ecbfa4..daf941ae 100644
--- a/helmfile/apps/nubus/values-opendesk-customization.yaml.gotmpl
+++ b/helmfile/apps/nubus/values-opendesk-customization.yaml.gotmpl
@@ -516,12 +516,12 @@ nubusPortalFrontend:
{{ .Values.resources.umsPortalFrontend | toYaml | nindent 4 }}
portalFrontend:
branding:
- css: {{ .Values.theme.styles.portalCss | toJson }}
+ css: {{ .Values.theme.styles.portal.main | toJson }}
# Requires .ico, .svg does not work.
- favicon: {{ .Values.theme.imagery.faviconIcoB64 | toJson }}
+ favicon: {{ .Values.theme.imagery.portal.faviconIco | toJson }}
# The actual `logo` is set in customizing image, the logo down here is for for waiting spinner.
- logo: {{ .Values.theme.imagery.portalWaitingSpinnerSvgB64 | toJson }}
- backgroundImage: {{ .Values.theme.imagery.portalLogoBackgroundSvgB64 | toJson }}
+ logo: {{ .Values.theme.imagery.portal.waitingSpinnerSvg | toJson }}
+ backgroundImage: {{ .Values.theme.imagery.portal.logoBackgroundSvg | toJson }}
nubusStackDataUms:
containerSecurityContext:
diff --git a/helmfile/apps/opendesk-services/helmfile-child.yaml.gotmpl b/helmfile/apps/opendesk-services/helmfile-child.yaml.gotmpl
index f4421ec6..a7f622a1 100644
--- a/helmfile/apps/opendesk-services/helmfile-child.yaml.gotmpl
+++ b/helmfile/apps/opendesk-services/helmfile-child.yaml.gotmpl
@@ -44,7 +44,7 @@ repositories:
# openDesk Grafana Dashboards
# https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-dashboards
- - name: "dashboards-repo"
+ - name: "opendesk-dashboards-repo"
keyring: "../../files/gpg-pubkeys/opencode.gpg"
verify: {{ .Values.charts.opendeskDashboards.verify }}
username: {{ env "OD_PRIVATE_REGISTRY_USERNAME" | quote }}
@@ -52,6 +52,16 @@ repositories:
oci: true
url: "{{ .Values.global.helmRegistry | default .Values.charts.opendeskDashboards.registry }}/{{ .Values.charts.opendeskDashboards.repository }}"
+ # openDesk Static Files
+ # https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-static-files
+ - name: "opendesk-static-files-repo"
+ keyring: "../../files/gpg-pubkeys/opencode.gpg"
+ verify: {{ .Values.charts.opendeskStaticFiles.verify }}
+ username: {{ env "OD_PRIVATE_REGISTRY_USERNAME" | quote }}
+ password: {{ env "OD_PRIVATE_REGISTRY_PASSWORD" | quote }}
+ oci: true
+ url: "{{ .Values.global.helmRegistry | default .Values.charts.opendeskStaticFiles.registry }}/{{ .Values.charts.opendeskStaticFiles.repository }}"
+
releases:
- name: "opendesk-otterize"
chart: "otterize-repo/{{ .Values.charts.otterize.name }}"
@@ -97,14 +107,23 @@ releases:
timeout: 900
- name: "opendesk-dashboards"
- chart: "dashboards-repo/{{ .Values.charts.opendeskDashboards.name }}"
+ chart: "opendesk-dashboards-repo/{{ .Values.charts.opendeskDashboards.name }}"
version: "{{ .Values.charts.opendeskDashboards.version }}"
values:
- - "values-dashboards.yaml.gotmpl"
+ - "values-opendesk-dashboards.yaml.gotmpl"
- {{ .Values.customization.release.opendeskDashboards | default "additionalValues: false" }}
installed: {{ .Values.monitoring.grafana.dashboards.enabled }}
timeout: 900
+ - name: "opendesk-static-files"
+ chart: "opendesk-static-files-repo/{{ .Values.charts.opendeskStaticFiles.name }}"
+ version: "{{ .Values.charts.opendeskStaticFiles.version }}"
+ values:
+ - "values-opendesk-static-files.yaml.gotmpl"
+ - {{ .Values.customization.release.opendeskStaticFiles | default "additionalValues: false" }}
+ installed: {{ .Values.staticFiles.enabled }}
+ timeout: 900
+
commonLabels:
deployStage: "030-opendesk-services"
component: "opendesk-services"
diff --git a/helmfile/apps/opendesk-services/values-dashboards.yaml.gotmpl b/helmfile/apps/opendesk-services/values-opendesk-dashboards.yaml.gotmpl
similarity index 100%
rename from helmfile/apps/opendesk-services/values-dashboards.yaml.gotmpl
rename to helmfile/apps/opendesk-services/values-opendesk-dashboards.yaml.gotmpl
diff --git a/helmfile/apps/opendesk-services/values-opendesk-static-files.yaml.gotmpl b/helmfile/apps/opendesk-services/values-opendesk-static-files.yaml.gotmpl
new file mode 100644
index 00000000..a7f1d764
--- /dev/null
+++ b/helmfile/apps/opendesk-services/values-opendesk-static-files.yaml.gotmpl
@@ -0,0 +1,107 @@
+{{/*
+SPDX-FileCopyrightText: 2024 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH
+SPDX-License-Identifier: Apache-2.0
+*/}}
+---
+global:
+ domain: {{ .Values.global.domain | quote }}
+ hosts:
+ {{ .Values.global.hosts | toYaml | nindent 4 }}
+ imagePullSecrets:
+ {{ .Values.global.imagePullSecrets | toYaml | nindent 4 }}
+
+cleanup:
+ deletePodsOnSuccess: {{ .Values.debug.cleanup.deletePodsOnSuccess }}
+ deletePodsOnSuccessTimeout: {{ .Values.debug.cleanup.deletePodsOnSuccessTimeout }}
+
+containerSecurityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - "ALL"
+ enabled: true
+ runAsUser: 101
+ runAsGroup: 101
+ seccompProfile:
+ type: "RuntimeDefault"
+ readOnlyRootFilesystem: true
+ runAsNonRoot: true
+ seLinuxOptions:
+ {{ .Values.seLinuxOptions.opendeskStaticFiles | toYaml | nindent 4 }}
+
+ingress:
+ ingressClassName: {{ .Values.ingress.ingressClassName | quote }}
+ host: "{{ .Values.global.hosts.static }}.{{ .Values.global.domain }}"
+ tls:
+ secretName: {{ .Values.ingress.tls.secretName | quote }}
+
+image:
+ registry: {{ coalesce .Values.repositories.image.dockerHub .Values.global.imageRegistry .Values.images.opendeskStaticFiles.registry | quote }}
+ repository: {{ .Values.images.opendeskStaticFiles.repository | quote }}
+ tag: {{ .Values.images.opendeskStaticFiles.tag | quote }}
+ imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
+
+
+podSecurityContext:
+ enabled: true
+ fsGroup: 101
+ fsGroupChangePolicy: "Always"
+
+replicaCount: {{ .Values.replicas.opendeskStaticFiles }}
+
+resources:
+ {{ .Values.resources.opendeskStaticFiles | toYaml | nindent 2 }}
+
+service:
+ type: "ClusterIP"
+
+theme:
+ imagery:
+ assets:
+ element:
+ subdomain: {{ .Values.global.hosts.element }}
+ paths:
+ - path: "/vector-icons/favicon.........ico"
+ data: {{ .Values.theme.imagery.chat.faviconIco }}
+ jitsi:
+ subdomain: {{ .Values.global.hosts.jitsi }}
+ paths:
+ - path: "/images/favicon.svg"
+ data: {{ .Values.theme.imagery.videoconference.faviconSvg }}
+ keycloak:
+ subdomain: {{ .Values.global.hosts.keycloak }}
+ paths:
+ - path: "/resources/...../login/UCS/img/favicon.ico"
+ data: {{ .Values.theme.imagery.portal.faviconIco }}
+ nextcloud:
+ subdomain: {{ .Values.global.hosts.nextcloud }}
+ paths:
+ - path: "/core/img/favicon-touch.png"
+ data: {{ .Values.theme.imagery.files.faviconPng }}
+ - path: "/core/img/favicon.ico"
+ data: {{ .Values.theme.imagery.files.faviconIco }}
+ openproject:
+ subdomain: {{ .Values.global.hosts.openproject }}
+ paths:
+ - path: "/custom_style/........../favicon/favicon.svg"
+ data: {{ .Values.theme.imagery.projects.faviconSvg }}
+ openxchange:
+ subdomain: {{ .Values.global.hosts.openxchange }}
+ paths:
+ - path: "/appsuite/favicon.ico"
+ data: {{ .Values.theme.imagery.groupware.faviconIco }}
+ - path: "/appsuite/favicon.svg"
+ data: {{ .Values.theme.imagery.groupware.faviconSvg }}
+ portal:
+ subdomain: {{ .Values.global.hosts.nubus }}
+ paths:
+ - path: "/favicon.ico"
+ data: {{ .Values.theme.imagery.portal.faviconIco }}
+ xwiki:
+ subdomain: {{ .Values.global.hosts.xwiki }}
+ paths:
+ - path: "/resources/icons/xwiki/favicon.svg"
+ data: {{ .Values.theme.imagery.knowledge.faviconSvg }}
+ - path: "/resources/icons/xwiki/favicon16.png"
+ data: {{ .Values.theme.imagery.knowledge.faviconPng }}
+...
diff --git a/helmfile/apps/openproject/values.yaml.gotmpl b/helmfile/apps/openproject/values.yaml.gotmpl
index 4dc9edad..665a7047 100644
--- a/helmfile/apps/openproject/values.yaml.gotmpl
+++ b/helmfile/apps/openproject/values.yaml.gotmpl
@@ -40,7 +40,7 @@ dbInit:
environment:
# For more details and more options see
# https://www.openproject.org/docs/installation-and-operations/configuration/environment/
- OPENPROJECT_APP__TITLE: "Projects | {{ .Values.theme.texts.productName }}"
+ OPENPROJECT_APP__TITLE: "Projekte - {{ .Values.theme.texts.productName }}"
OPENPROJECT_LOG__LEVEL: {{ if .Values.debug.enabled }}"debug"{{ else }}"info"{{ end }}
OPENPROJECT_LOGIN__REQUIRED: "true"
OPENPROJECT_USER__DEFAULT__TIMEZONE: "Europe/Berlin"
diff --git a/helmfile/apps/xwiki/values.yaml.gotmpl b/helmfile/apps/xwiki/values.yaml.gotmpl
index 22e186da..f1bd004d 100644
--- a/helmfile/apps/xwiki/values.yaml.gotmpl
+++ b/helmfile/apps/xwiki/values.yaml.gotmpl
@@ -141,9 +141,6 @@ postgresql:
properties:
"attachment:xwiki:FlamingoThemes.Iceberg@logo.svg": "data:image/svg+xml;base64,{{ .Values.theme.imagery.logoHeaderSvgB64 }}"
- "attachment:xwiki:XWiki.DefaultSkin@icons.xwiki.favicon.svg": "data:image/svg+xml;base64,{{ .Values.theme.imagery.faviconSvgB64 }}"
- "attachment:xwiki:XWiki.DefaultSkin@icons.xwiki.favicon16.png": "data:image/png;base64,{{ .Values.theme.imagery.favicon16PngB64 }}"
- "attachment:xwiki:XWiki.DefaultSkin@icons.xwiki.favicon144.png": "data:image/png;base64,{{ .Values.theme.imagery.favicon144PngB64 }}"
"property:xwiki:XWiki.XWikiServerXwiki^XWiki.XWikiServerClass.secure": 1
"property:xwiki:XWiki.XWikiServerXwiki^XWiki.XWikiServerClass.server": "{{ .Values.global.hosts.xwiki }}.{{ .Values.global.domain }}"
"property:xwiki:XWiki.XWikiServerXwiki^XWiki.XWikiServerClass.port": 443
@@ -193,7 +190,7 @@ properties:
## LDAP filter to only synchronize some groups
"property:xwiki:LDAPUserImport.WebHome^LDAPUserImport.LDAPUserImportConfigClass.ldapGroupImportSearchFilter":
"(&(objectClass=opendeskKnowledgemanagementGroup)(opendeskKnowledgemanagementEnabled=TRUE))"
- "property:xwiki:XWiki.XWikiPreferences^XWiki.XWikiPreferences.title": "{{ .Values.theme.texts.productName }} Wissen - $!tdoc.displayTitle"
+ "property:xwiki:XWiki.XWikiPreferences^XWiki.XWikiPreferences.title": "Wissen - $!tdoc.displayTitle - {{ .Values.theme.texts.productName }}"
cluster:
replicas: {{ .Values.replicas.xwiki }}
diff --git a/helmfile/environments/default/charts.yaml.gotmpl b/helmfile/environments/default/charts.yaml.gotmpl
index f91db86c..7c432c95 100644
--- a/helmfile/environments/default/charts.yaml.gotmpl
+++ b/helmfile/environments/default/charts.yaml.gotmpl
@@ -21,7 +21,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-certificates"
name: "opendesk-certificates"
- version: "3.1.0"
+ version: "3.1.1"
verify: true
clamav:
# providerCategory: "Platform"
@@ -104,7 +104,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-element"
name: "opendesk-element"
- version: "5.0.1"
+ version: "6.0.0"
verify: true
elementWeb:
# providerCategory: "Platform"
@@ -114,7 +114,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-element"
name: "opendesk-element-web"
- version: "5.0.1"
+ version: "6.0.0"
verify: true
elementWellKnown:
# providerCategory: "Platform"
@@ -124,7 +124,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-element"
name: "opendesk-well-known"
- version: "5.0.1"
+ version: "6.0.0"
verify: true
home:
# providerCategory: "Platform"
@@ -156,7 +156,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-jitsi"
name: "opendesk-jitsi"
- version: "2.1.1"
+ version: "3.0.1"
verify: true
mariadb:
# providerCategory: "Platform"
@@ -216,7 +216,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-element"
name: "opendesk-matrix-user-verification-service"
- version: "5.0.1"
+ version: "6.0.1"
verify: true
memcached:
# providerCategory: "Community"
@@ -340,6 +340,16 @@ charts:
name: "opendesk-keycloak-bootstrap"
version: "2.2.0"
verify: true
+ opendeskStaticFiles:
+ # providerCategory: "Platform"
+ # providerResponsible: "openDesk"
+ # upstreamRegistry: "https://registry.opencode.de"
+ # upstreamRepository: "bmi/opendesk/components/platform-development/charts/opendesk-static-files/opendesk-static-files"
+ registry: "registry.opencode.de"
+ repository: "bmi/opendesk/components/platform-development/charts/opendesk-static-files"
+ name: "opendesk-static-files"
+ version: "3.0.1"
+ verify: true
openproject:
# providerCategory: "Supplier"
# providerResponsible: "openProject"
@@ -444,7 +454,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-element"
name: "opendesk-synapse"
- version: "5.0.1"
+ version: "6.0.1"
verify: true
synapseAdmin:
# Component is required for openDesk Enterprise only.
@@ -468,7 +478,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-element"
name: "opendesk-synapse-create-account"
- version: "5.0.1"
+ version: "6.0.0"
verify: true
synapseGroupsync:
# Component is required for openDesk Enterprise only.
@@ -492,7 +502,7 @@ charts:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/charts/opendesk-element"
name: "opendesk-synapse-web"
- version: "5.0.1"
+ version: "6.0.0"
verify: true
xwiki:
# providerCategory: "Supplier"
diff --git a/helmfile/environments/default/customization.yaml.gotmpl b/helmfile/environments/default/customization.yaml.gotmpl
index 772fa3f5..2eb3cd86 100644
--- a/helmfile/environments/default/customization.yaml.gotmpl
+++ b/helmfile/environments/default/customization.yaml.gotmpl
@@ -50,12 +50,16 @@ customization:
openproject: {}
# openproject-bootstrap
opendeskOpenprojectBootstrap: {}
- # services
+ # xwiki
+ xwiki: {}
+ # openDesk services
opendeskOtterize: {}
opendeskHome: {}
opendeskCertificates: {}
opendeskAlerts: {}
opendeskDashboards: {}
+ opendeskStaticFiles: {}
+ # external services
redis: {}
memcached: {}
postgresql: {}
@@ -65,8 +69,6 @@ customization:
clamav: {}
clamavSimple: {}
minio: {}
- # xwiki
- xwiki: {}
# openDesk Enterprise Components
cassandra: {}
diff --git a/helmfile/environments/default/debug.yaml.gotmpl b/helmfile/environments/default/debug.yaml.gotmpl
index b53563bb..41dd6e57 100644
--- a/helmfile/environments/default/debug.yaml.gotmpl
+++ b/helmfile/environments/default/debug.yaml.gotmpl
@@ -7,9 +7,9 @@ debug:
deletePodsOnSuccess: true
# When deletePodsOnSuccess is enabled, the pod will be deleted after configured seconds.
deletePodsOnSuccessTimeout: 60
- # Keep persistence on deletion of this release.
+ # Keep persistence on deletion of a release.
keepPVCOnDelete: false
- # Keep additional resources, like certificates on deletion of this release.
+ # Keep additional resources, like certificates on deletion of a release.
keepRessourceOnDelete: true
# should activate debug output in all components and even allow e.g. successfully executed jobs
# to stay available. This is going to be implemented on a case by case basis when we actually
diff --git a/helmfile/environments/default/global.yaml.gotmpl b/helmfile/environments/default/global.yaml.gotmpl
index bc8cac76..a616017e 100644
--- a/helmfile/environments/default/global.yaml.gotmpl
+++ b/helmfile/environments/default/global.yaml.gotmpl
@@ -48,6 +48,7 @@ global:
nubus: "portal"
openproject: "projects"
openxchange: "webmail"
+ static: "static"
synapse: "matrix"
synapseFederation: "matrix-federation"
whiteboard: "whiteboard"
diff --git a/helmfile/environments/default/images.yaml.gotmpl b/helmfile/environments/default/images.yaml.gotmpl
index 7402255d..f147b468 100644
--- a/helmfile/environments/default/images.yaml.gotmpl
+++ b/helmfile/environments/default/images.yaml.gotmpl
@@ -628,6 +628,14 @@ images:
registry: "registry.opencode.de"
repository: "bmi/opendesk/components/platform-development/images/opendesk-keycloak-bootstrap"
tag: "1.2.1@sha256:f5ce0be27580c6347c5e700c4fa271a811d45d8a0e4b40ffe8a4d0e3d47e670f"
+ opendeskStaticFiles:
+ # providerCategory: "Community"
+ # providerResponsible: "Element"
+ # upstreamRegistry: "https://registry-1.docker.io"
+ # upstreamRepository: "library/nginx"
+ registry: "registry-1.docker.io"
+ repository: "library/nginx"
+ tag: "1.27.3-alpine3.20@sha256:41523187cf7d7a2f2677a80609d9caa14388bf5c1fbca9c410ba3de602aaaab4"
openproject:
# providerCategory: "Supplier"
# providerResponsible: "OpenProject"
@@ -859,7 +867,7 @@ images:
# upstreamRepository: "library/nginx"
registry: "registry-1.docker.io"
repository: "library/nginx"
- tag: "1.27.0-bookworm@sha256:1445eb9c6dc5e9619346c836ef6fbd6a95092e4663f27dcfce116f051cdbd232"
+ tag: "1.27.3-alpine3.20@sha256:41523187cf7d7a2f2677a80609d9caa14388bf5c1fbca9c410ba3de602aaaab4"
xwiki:
# providerCategory: "Supplier"
# providerResponsible: "XWiki"
diff --git a/helmfile/environments/default/opendesk_main.yaml.gotmpl b/helmfile/environments/default/opendesk_main.yaml.gotmpl
index 7b8db222..f803af51 100644
--- a/helmfile/environments/default/opendesk_main.yaml.gotmpl
+++ b/helmfile/environments/default/opendesk_main.yaml.gotmpl
@@ -70,6 +70,9 @@ postgresql:
redis:
enabled: true
namespace: ~
+staticFiles:
+ enabled: true
+ namespace: ~
xwiki:
enabled: true
namespace: ~
diff --git a/helmfile/environments/default/replicas.yaml.gotmpl b/helmfile/environments/default/replicas.yaml.gotmpl
index 998d7f78..74136ad8 100644
--- a/helmfile/environments/default/replicas.yaml.gotmpl
+++ b/helmfile/environments/default/replicas.yaml.gotmpl
@@ -155,6 +155,10 @@ replicas:
# -- scalable: true
nextcloudExporter: 1
+ # -- component: openDesk Static Files
+ # -- scalable: true
+ opendeskStaticFiles: 1
+
# -- component: Project management (OpenProject)
# -- scalable: true
openprojectWeb: 1
diff --git a/helmfile/environments/default/resources.yaml.gotmpl b/helmfile/environments/default/resources.yaml.gotmpl
index d08b60fc..219a1e41 100644
--- a/helmfile/environments/default/resources.yaml.gotmpl
+++ b/helmfile/environments/default/resources.yaml.gotmpl
@@ -134,6 +134,13 @@ resources:
requests:
cpu: 0.1
memory: "256Mi"
+ opendeskStaticFiles:
+ limits:
+ cpu: 99
+ memory: "64Mi"
+ requests:
+ cpu: 0.01
+ memory: "16Mi"
umsKeycloak:
limits:
cpu: 99
diff --git a/helmfile/environments/default/selinux.yaml.gotmpl b/helmfile/environments/default/selinux.yaml.gotmpl
index 4b5ae0e5..10d50867 100644
--- a/helmfile/environments/default/selinux.yaml.gotmpl
+++ b/helmfile/environments/default/selinux.yaml.gotmpl
@@ -41,6 +41,7 @@ seLinuxOptions:
notesFrontend: ~
notesYProvider: ~
opendeskKeycloakBootstrap: ~
+ opendeskStaticFiles: ~
openproject: ~
openprojectBootstrap: ~
openprojectDbInit: ~
diff --git a/helmfile/environments/default/theme.yaml.gotmpl b/helmfile/environments/default/theme.yaml.gotmpl
index 6a64a0f0..f51cb2c4 100644
--- a/helmfile/environments/default/theme.yaml.gotmpl
+++ b/helmfile/environments/default/theme.yaml.gotmpl
@@ -39,48 +39,64 @@ theme:
## Define imagery
#
imagery:
- # Xwiki
- faviconSvgB64: {{ readFile "./../../files/theme/favicon.svg" | b64enc | quote }}
- faviconIcoB64: {{ readFile "./../../files/theme/favicon.ico" | b64enc | quote }}
- favicon16PngB64: {{ readFile "./../../files/theme/favicon16.png" | b64enc | quote }}
- favicon144PngB64: {{ readFile "./../../files/theme/favicon144.png" | b64enc | quote }}
logoHeaderSvgB64: {{ readFile "./../../files/theme/logoHeader.svg" | b64enc | quote }}
-
- # Jitsi
logoHeaderInvertedSvgB64: {{ readFile "./../../files/theme/logoHeaderInverted.svg" | b64enc | quote }}
- # Portal
- portalLogoBackgroundSvgB64: {{ readFile "./../../files/theme/empty.svg" | b64enc | quote }}
- portalWaitingSpinnerSvgB64: {{ readFile "./../../files/theme/portalWaitingSpinner.svg" | b64enc | quote }}
+ chat:
+ faviconIco: {{ readFile "./../../files/theme/chat/favicon.ico" | b64enc | quote }}
+
+ files:
+ faviconIco: {{ readFile "./../../files/theme/files/favicon.ico" | b64enc | quote }}
+ faviconPng: {{ readFile "./../../files/theme/files/favicon.png" | b64enc | quote }}
+
+ groupware:
+ faviconIco: {{ readFile "./../../files/theme/groupware/favicon.ico" | b64enc | quote }}
+ faviconSvg: {{ readFile "./../../files/theme/groupware/favicon.svg" | b64enc | quote }}
+
+ knowledge:
+ faviconSvg: {{ readFile "./../../files/theme/knowledge/favicon.svg" | b64enc | quote }}
+ faviconPng: {{ readFile "./../../files/theme/knowledge/favicon.png" | b64enc | quote }}
+
+ portal:
+ faviconIco: {{ readFile "./../../files/theme/portal/favicon.ico" | b64enc | quote }}
+ waitingSpinnerSvg: {{ readFile "./../../files/theme/portal/waitingSpinner.svg" | b64enc }}
+ logoBackgroundSvg: {{ readFile "./../../files/theme/empty.svg" | b64enc | quote }}
portalTiles:
- adminAnnouncement: {{ readFile "./../../files/portal-tiles/admin_announcement.svg" | b64enc | quote }}
- adminContext: {{ readFile "./../../files/portal-tiles/admin_context.svg" | b64enc | quote }}
- adminFunctionalmailbox: {{ readFile "./../../files/portal-tiles/admin_functionalmailbox.svg" | b64enc | quote }}
- adminGroup: {{ readFile "./../../files/portal-tiles/admin_group.svg" | b64enc | quote }}
- adminResource: {{ readFile "./../../files/portal-tiles/admin_resource.svg" | b64enc | quote }}
- adminUser: {{ readFile "./../../files/portal-tiles/admin_user.svg" | b64enc | quote }}
- anonymousLogin: {{ readFile "./../../files/portal-tiles/anonymous_login.svg" | b64enc | quote }}
- dummyCircle: {{ readFile "./../../files/portal-tiles/dummy_circle.svg" | b64enc | quote }}
- fileshareActivity: {{ readFile "./../../files/portal-tiles/fileshare_activity.svg" | b64enc | quote }}
- fileshareDirectdocOdp: {{ readFile "./../../files/portal-tiles/fileshare_directdoc_odp.svg" | b64enc | quote }}
- fileshareDirectdocOds: {{ readFile "./../../files/portal-tiles/fileshare_directdoc_ods.svg" | b64enc | quote }}
- fileshareDirectdocOdt: {{ readFile "./../../files/portal-tiles/fileshare_directdoc_odt.svg" | b64enc | quote }}
- fileshareFiles: {{ readFile "./../../files/portal-tiles/fileshare_files.svg" | b64enc | quote }}
- groupwareCalendar: {{ readFile "./../../files/portal-tiles/groupware_calendar.svg" | b64enc | quote }}
- groupwareContacts: {{ readFile "./../../files/portal-tiles/groupware_contacts.svg" | b64enc | quote }}
- groupwareMail: {{ readFile "./../../files/portal-tiles/groupware_mail.svg" | b64enc | quote }}
- groupwareTasks: {{ readFile "./../../files/portal-tiles/groupware_tasks.svg" | b64enc | quote }}
- managementKnowledge: {{ readFile "./../../files/portal-tiles/management_knowledge.svg" | b64enc | quote }}
- managementProject: {{ readFile "./../../files/portal-tiles/management_project.svg" | b64enc | quote }}
- notes: {{ readFile "./../../files/portal-tiles/misc_notes.svg" | b64enc | quote }}
- realtimeCollaboration: {{ readFile "./../../files/portal-tiles/realtime_collaboration.svg" | b64enc | quote }}
- realtimeVideoconference: {{ readFile "./../../files/portal-tiles/realtime_videoconference.svg" | b64enc | quote }}
- selfserviceChangepassword: {{ readFile "./../../files/portal-tiles/selfservice_changepassword.svg" | b64enc | quote }}
- selfserviceEditprofile: {{ readFile "./../../files/portal-tiles/selfservice_editprofile.svg" | b64enc | quote }}
- selfserviceProtectaccount: {{ readFile "./../../files/portal-tiles/selfservice_protectaccount.svg" | b64enc | quote }}
+ adminAnnouncement: {{ readFile "./../../files/theme/portal-tiles/admin_announcement.svg" | b64enc | quote }}
+ adminContext: {{ readFile "./../../files/theme/portal-tiles/admin_context.svg" | b64enc | quote }}
+ adminFunctionalmailbox: {{ readFile "./../../files/theme/portal-tiles/admin_functionalmailbox.svg" | b64enc | quote }}
+ adminGroup: {{ readFile "./../../files/theme/portal-tiles/admin_group.svg" | b64enc | quote }}
+ adminResource: {{ readFile "./../../files/theme/portal-tiles/admin_resource.svg" | b64enc | quote }}
+ adminUser: {{ readFile "./../../files/theme/portal-tiles/admin_user.svg" | b64enc | quote }}
+ anonymousLogin: {{ readFile "./../../files/theme/portal-tiles/anonymous_login.svg" | b64enc | quote }}
+ dummyCircle: {{ readFile "./../../files/theme/portal-tiles/dummy_circle.svg" | b64enc | quote }}
+ fileshareActivity: {{ readFile "./../../files/theme/portal-tiles/fileshare_activity.svg" | b64enc | quote }}
+ fileshareDirectdocOdp: {{ readFile "./../../files/theme/portal-tiles/fileshare_directdoc_odp.svg" | b64enc | quote }}
+ fileshareDirectdocOds: {{ readFile "./../../files/theme/portal-tiles/fileshare_directdoc_ods.svg" | b64enc | quote }}
+ fileshareDirectdocOdt: {{ readFile "./../../files/theme/portal-tiles/fileshare_directdoc_odt.svg" | b64enc | quote }}
+ fileshareFiles: {{ readFile "./../../files/theme/portal-tiles/fileshare_files.svg" | b64enc | quote }}
+ groupwareCalendar: {{ readFile "./../../files/theme/portal-tiles/groupware_calendar.svg" | b64enc | quote }}
+ groupwareContacts: {{ readFile "./../../files/theme/portal-tiles/groupware_contacts.svg" | b64enc | quote }}
+ groupwareMail: {{ readFile "./../../files/theme/portal-tiles/groupware_mail.svg" | b64enc | quote }}
+ groupwareTasks: {{ readFile "./../../files/theme/portal-tiles/groupware_tasks.svg" | b64enc | quote }}
+ managementKnowledge: {{ readFile "./../../files/theme/portal-tiles/management_knowledge.svg" | b64enc | quote }}
+ managementProject: {{ readFile "./../../files/theme/portal-tiles/management_project.svg" | b64enc | quote }}
+ notes: {{ readFile "./../../files/theme/portal-tiles/misc_notes.svg" | b64enc | quote }}
+ realtimeCollaboration: {{ readFile "./../../files/theme/portal-tiles/realtime_collaboration.svg" | b64enc | quote }}
+ realtimeVideoconference: {{ readFile "./../../files/theme/portal-tiles/realtime_videoconference.svg" | b64enc | quote }}
+ selfserviceChangepassword: {{ readFile "./../../files/theme/portal-tiles/selfservice_changepassword.svg" | b64enc | quote }}
+ selfserviceEditprofile: {{ readFile "./../../files/theme/portal-tiles/selfservice_editprofile.svg" | b64enc | quote }}
+ selfserviceProtectaccount: {{ readFile "./../../files/theme/portal-tiles/selfservice_protectaccount.svg" | b64enc | quote }}
+
+ projects:
+ faviconSvg: {{ readFile "./../../files/theme/projects/favicon.svg" | b64enc | quote }}
+
+ videoconference:
+ faviconSvg: {{ readFile "./../../files/theme/videoconference/favicon.svg" | b64enc | quote }}
## Where required define complete Stylesheets
#
styles:
- portalCss: {{ readFile "./../../files/theme/portalStylesheet.css" | b64enc }}
+ portal:
+ main: {{ readFile "./../../files/theme/portal/stylesheet.css" | b64enc }}
...
diff --git a/helmfile/files/theme/_dev/red.ico b/helmfile/files/theme/_dev/red.ico
new file mode 100644
index 00000000..29ade171
Binary files /dev/null and b/helmfile/files/theme/_dev/red.ico differ
diff --git a/helmfile/files/theme/_dev/red.png b/helmfile/files/theme/_dev/red.png
new file mode 100644
index 00000000..fc225308
Binary files /dev/null and b/helmfile/files/theme/_dev/red.png differ
diff --git a/helmfile/files/theme/_dev/red.svg b/helmfile/files/theme/_dev/red.svg
new file mode 100644
index 00000000..61182609
--- /dev/null
+++ b/helmfile/files/theme/_dev/red.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/helmfile/files/theme/chat/favicon.ico b/helmfile/files/theme/chat/favicon.ico
new file mode 100644
index 00000000..61e71022
Binary files /dev/null and b/helmfile/files/theme/chat/favicon.ico differ
diff --git a/helmfile/files/theme/favicon.ico b/helmfile/files/theme/favicon.ico
deleted file mode 100644
index 667f9244..00000000
Binary files a/helmfile/files/theme/favicon.ico and /dev/null differ
diff --git a/helmfile/files/theme/favicon144.png b/helmfile/files/theme/favicon144.png
deleted file mode 100644
index 0825116f..00000000
Binary files a/helmfile/files/theme/favicon144.png and /dev/null differ
diff --git a/helmfile/files/theme/favicon16.png b/helmfile/files/theme/favicon16.png
deleted file mode 100644
index 6bf08436..00000000
Binary files a/helmfile/files/theme/favicon16.png and /dev/null differ
diff --git a/helmfile/files/theme/files/favicon.ico b/helmfile/files/theme/files/favicon.ico
new file mode 100644
index 00000000..e481d2ab
Binary files /dev/null and b/helmfile/files/theme/files/favicon.ico differ
diff --git a/helmfile/files/theme/files/favicon.png b/helmfile/files/theme/files/favicon.png
new file mode 100644
index 00000000..7e3a6cda
Binary files /dev/null and b/helmfile/files/theme/files/favicon.png differ
diff --git a/helmfile/files/theme/groupware/favicon.ico b/helmfile/files/theme/groupware/favicon.ico
new file mode 100644
index 00000000..f44c8566
Binary files /dev/null and b/helmfile/files/theme/groupware/favicon.ico differ
diff --git a/helmfile/files/theme/groupware/favicon.svg b/helmfile/files/theme/groupware/favicon.svg
new file mode 100644
index 00000000..822a7bd3
--- /dev/null
+++ b/helmfile/files/theme/groupware/favicon.svg
@@ -0,0 +1,5 @@
+
diff --git a/helmfile/files/theme/knowledge/favicon.png b/helmfile/files/theme/knowledge/favicon.png
new file mode 100644
index 00000000..f1509678
Binary files /dev/null and b/helmfile/files/theme/knowledge/favicon.png differ
diff --git a/helmfile/files/theme/knowledge/favicon.svg b/helmfile/files/theme/knowledge/favicon.svg
new file mode 100644
index 00000000..ff6494ed
--- /dev/null
+++ b/helmfile/files/theme/knowledge/favicon.svg
@@ -0,0 +1,5 @@
+
diff --git a/helmfile/files/portal-tiles/admin_announcement.svg b/helmfile/files/theme/portal-tiles/admin_announcement.svg
similarity index 100%
rename from helmfile/files/portal-tiles/admin_announcement.svg
rename to helmfile/files/theme/portal-tiles/admin_announcement.svg
diff --git a/helmfile/files/portal-tiles/admin_context.svg b/helmfile/files/theme/portal-tiles/admin_context.svg
similarity index 100%
rename from helmfile/files/portal-tiles/admin_context.svg
rename to helmfile/files/theme/portal-tiles/admin_context.svg
diff --git a/helmfile/files/portal-tiles/admin_functionalmailbox.svg b/helmfile/files/theme/portal-tiles/admin_functionalmailbox.svg
similarity index 100%
rename from helmfile/files/portal-tiles/admin_functionalmailbox.svg
rename to helmfile/files/theme/portal-tiles/admin_functionalmailbox.svg
diff --git a/helmfile/files/portal-tiles/admin_group.svg b/helmfile/files/theme/portal-tiles/admin_group.svg
similarity index 100%
rename from helmfile/files/portal-tiles/admin_group.svg
rename to helmfile/files/theme/portal-tiles/admin_group.svg
diff --git a/helmfile/files/portal-tiles/admin_resource.svg b/helmfile/files/theme/portal-tiles/admin_resource.svg
similarity index 100%
rename from helmfile/files/portal-tiles/admin_resource.svg
rename to helmfile/files/theme/portal-tiles/admin_resource.svg
diff --git a/helmfile/files/portal-tiles/admin_user.svg b/helmfile/files/theme/portal-tiles/admin_user.svg
similarity index 100%
rename from helmfile/files/portal-tiles/admin_user.svg
rename to helmfile/files/theme/portal-tiles/admin_user.svg
diff --git a/helmfile/files/portal-tiles/anonymous_login.svg b/helmfile/files/theme/portal-tiles/anonymous_login.svg
similarity index 100%
rename from helmfile/files/portal-tiles/anonymous_login.svg
rename to helmfile/files/theme/portal-tiles/anonymous_login.svg
diff --git a/helmfile/files/portal-tiles/dummy_circle.svg b/helmfile/files/theme/portal-tiles/dummy_circle.svg
similarity index 100%
rename from helmfile/files/portal-tiles/dummy_circle.svg
rename to helmfile/files/theme/portal-tiles/dummy_circle.svg
diff --git a/helmfile/files/portal-tiles/fileshare_activity.svg b/helmfile/files/theme/portal-tiles/fileshare_activity.svg
similarity index 100%
rename from helmfile/files/portal-tiles/fileshare_activity.svg
rename to helmfile/files/theme/portal-tiles/fileshare_activity.svg
diff --git a/helmfile/files/portal-tiles/fileshare_directdoc_odp.svg b/helmfile/files/theme/portal-tiles/fileshare_directdoc_odp.svg
similarity index 100%
rename from helmfile/files/portal-tiles/fileshare_directdoc_odp.svg
rename to helmfile/files/theme/portal-tiles/fileshare_directdoc_odp.svg
diff --git a/helmfile/files/portal-tiles/fileshare_directdoc_ods.svg b/helmfile/files/theme/portal-tiles/fileshare_directdoc_ods.svg
similarity index 100%
rename from helmfile/files/portal-tiles/fileshare_directdoc_ods.svg
rename to helmfile/files/theme/portal-tiles/fileshare_directdoc_ods.svg
diff --git a/helmfile/files/portal-tiles/fileshare_directdoc_odt.svg b/helmfile/files/theme/portal-tiles/fileshare_directdoc_odt.svg
similarity index 100%
rename from helmfile/files/portal-tiles/fileshare_directdoc_odt.svg
rename to helmfile/files/theme/portal-tiles/fileshare_directdoc_odt.svg
diff --git a/helmfile/files/portal-tiles/fileshare_files.svg b/helmfile/files/theme/portal-tiles/fileshare_files.svg
similarity index 100%
rename from helmfile/files/portal-tiles/fileshare_files.svg
rename to helmfile/files/theme/portal-tiles/fileshare_files.svg
diff --git a/helmfile/files/portal-tiles/groupware_calendar.svg b/helmfile/files/theme/portal-tiles/groupware_calendar.svg
similarity index 100%
rename from helmfile/files/portal-tiles/groupware_calendar.svg
rename to helmfile/files/theme/portal-tiles/groupware_calendar.svg
diff --git a/helmfile/files/portal-tiles/groupware_contacts.svg b/helmfile/files/theme/portal-tiles/groupware_contacts.svg
similarity index 100%
rename from helmfile/files/portal-tiles/groupware_contacts.svg
rename to helmfile/files/theme/portal-tiles/groupware_contacts.svg
diff --git a/helmfile/files/portal-tiles/groupware_mail.svg b/helmfile/files/theme/portal-tiles/groupware_mail.svg
similarity index 100%
rename from helmfile/files/portal-tiles/groupware_mail.svg
rename to helmfile/files/theme/portal-tiles/groupware_mail.svg
diff --git a/helmfile/files/portal-tiles/groupware_tasks.svg b/helmfile/files/theme/portal-tiles/groupware_tasks.svg
similarity index 100%
rename from helmfile/files/portal-tiles/groupware_tasks.svg
rename to helmfile/files/theme/portal-tiles/groupware_tasks.svg
diff --git a/helmfile/files/portal-tiles/management_knowledge.svg b/helmfile/files/theme/portal-tiles/management_knowledge.svg
similarity index 100%
rename from helmfile/files/portal-tiles/management_knowledge.svg
rename to helmfile/files/theme/portal-tiles/management_knowledge.svg
diff --git a/helmfile/files/portal-tiles/management_project.svg b/helmfile/files/theme/portal-tiles/management_project.svg
similarity index 100%
rename from helmfile/files/portal-tiles/management_project.svg
rename to helmfile/files/theme/portal-tiles/management_project.svg
diff --git a/helmfile/files/portal-tiles/misc_notes.svg b/helmfile/files/theme/portal-tiles/misc_notes.svg
similarity index 100%
rename from helmfile/files/portal-tiles/misc_notes.svg
rename to helmfile/files/theme/portal-tiles/misc_notes.svg
diff --git a/helmfile/files/portal-tiles/realtime_collaboration.svg b/helmfile/files/theme/portal-tiles/realtime_collaboration.svg
similarity index 100%
rename from helmfile/files/portal-tiles/realtime_collaboration.svg
rename to helmfile/files/theme/portal-tiles/realtime_collaboration.svg
diff --git a/helmfile/files/portal-tiles/realtime_videoconference.svg b/helmfile/files/theme/portal-tiles/realtime_videoconference.svg
similarity index 100%
rename from helmfile/files/portal-tiles/realtime_videoconference.svg
rename to helmfile/files/theme/portal-tiles/realtime_videoconference.svg
diff --git a/helmfile/files/portal-tiles/selfservice_changepassword.svg b/helmfile/files/theme/portal-tiles/selfservice_changepassword.svg
similarity index 100%
rename from helmfile/files/portal-tiles/selfservice_changepassword.svg
rename to helmfile/files/theme/portal-tiles/selfservice_changepassword.svg
diff --git a/helmfile/files/portal-tiles/selfservice_editprofile.svg b/helmfile/files/theme/portal-tiles/selfservice_editprofile.svg
similarity index 100%
rename from helmfile/files/portal-tiles/selfservice_editprofile.svg
rename to helmfile/files/theme/portal-tiles/selfservice_editprofile.svg
diff --git a/helmfile/files/portal-tiles/selfservice_protectaccount.svg b/helmfile/files/theme/portal-tiles/selfservice_protectaccount.svg
similarity index 100%
rename from helmfile/files/portal-tiles/selfservice_protectaccount.svg
rename to helmfile/files/theme/portal-tiles/selfservice_protectaccount.svg
diff --git a/helmfile/files/theme/portal/favicon.ico b/helmfile/files/theme/portal/favicon.ico
new file mode 100644
index 00000000..041f0d61
Binary files /dev/null and b/helmfile/files/theme/portal/favicon.ico differ
diff --git a/helmfile/files/theme/portalLogoBackground.svg b/helmfile/files/theme/portal/logoBackground.svg
similarity index 100%
rename from helmfile/files/theme/portalLogoBackground.svg
rename to helmfile/files/theme/portal/logoBackground.svg
diff --git a/helmfile/files/theme/portalStylesheet.css b/helmfile/files/theme/portal/stylesheet.css
similarity index 100%
rename from helmfile/files/theme/portalStylesheet.css
rename to helmfile/files/theme/portal/stylesheet.css
diff --git a/helmfile/files/theme/favicon.svg b/helmfile/files/theme/portal/waitingSpinner.svg
similarity index 100%
rename from helmfile/files/theme/favicon.svg
rename to helmfile/files/theme/portal/waitingSpinner.svg
diff --git a/helmfile/files/theme/portalWaitingSpinner.svg b/helmfile/files/theme/portalWaitingSpinner.svg
deleted file mode 100644
index eb76781c..00000000
--- a/helmfile/files/theme/portalWaitingSpinner.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
\ No newline at end of file
diff --git a/helmfile/files/theme/projects/favicon.svg b/helmfile/files/theme/projects/favicon.svg
new file mode 100644
index 00000000..2c72b7f4
--- /dev/null
+++ b/helmfile/files/theme/projects/favicon.svg
@@ -0,0 +1,6 @@
+
diff --git a/helmfile/files/theme/videoconference/favicon.svg b/helmfile/files/theme/videoconference/favicon.svg
new file mode 100644
index 00000000..9078559d
--- /dev/null
+++ b/helmfile/files/theme/videoconference/favicon.svg
@@ -0,0 +1,5 @@
+