// // Copyright 2026 Novaloop AG // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. // Please see LICENSE files in the repository root for full details. // import Foundation /// Pins HealthChat's server, OIDC and push configuration by overriding `AppSettings` at startup. /// /// - `accountProviders` / `allowOtherAccountProviders` lock every user to `healthchat.ch` (the server name; /// `.well-known` delegates to `matrix.healthchat.ch`) and hide the change-server / create-account UI. /// - `oAuthRedirectURL` uses the app's own URL scheme so the OIDC/MAS callback needs no associated domain. /// - Legacy `element.io` help/encryption/copyright URLs are passed through unchanged for now. struct HealthChatAppSettingsHook: AppSettingsHookProtocol { func configure(_ appSettings: AppSettings) -> AppSettings { appSettings.override(accountProviders: ["healthchat.ch"], allowOtherAccountProviders: false, hideBrandChrome: false, pushGatewayBaseURL: "https://sygnal.healthchat.ch", oAuthRedirectURL: "ch.healthchat.element:/oauth/callback", websiteURL: "https://healthchat.ch", logoURL: "https://app.healthchat.ch/themes/element/img/logos/element-logo.png", copyrightURL: appSettings.copyrightURL, acceptableUseURL: "https://www.healthchat.ch/datenschutz", privacyURL: "https://www.healthchat.ch/datenschutz", encryptionURL: appSettings.encryptionURL, deviceVerificationURL: appSettings.deviceVerificationURL, chatBackupDetailsURL: appSettings.chatBackupDetailsURL, identityPinningViolationDetailsURL: appSettings.identityPinningViolationDetailsURL, historySharingDetailsURL: appSettings.historySharingDetailsURL, elementWebHosts: ["app.healthchat.ch"], accountProvisioningHost: appSettings.accountProvisioningHost, bugReportApplicationID: appSettings.bugReportApplicationID, analyticsTermsURL: appSettings.analyticsTermsURL, mapTilerConfiguration: AppSettings.bundledMapTilerConfiguration) return appSettings } }