ManaCore + ManaTokens als Swift-Package für alle nativen mana-e.V.-Apps. Phase α aus mana/docs/MANA_SWIFT.md durch. ManaCore: - AuthClient gegen mana-auth (Login, Refresh, Status-Maschine) - AuthenticatedTransport (URLSession + 401-Retry) - ManaAppConfig-Protocol für App-injizierbare Konfig - KeychainStore mit optionaler Shared-Access-Group - JWT-Parser für lokale Expiry-Prüfung - AuthError, CoreLog (interne OSLog-Logger) ManaTokens: - 12 Vereins-Tokens als dynamic Light/Dark Colors - 5 Brand-Literale (mana-yellow, spectrum-orange, ...) - Spacing, Radius, Typography aus mana/docs/THEMING.md Tests: 12 Unit-Tests grün via swift test. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
42 lines
1.6 KiB
Swift
42 lines
1.6 KiB
Swift
import Foundation
|
|
|
|
/// App-spezifische Konfiguration für ManaCore. Wird von der konsumierenden
|
|
/// App beim Erzeugen eines `AuthClient` injiziert.
|
|
///
|
|
/// ManaCore hardcoded nichts App-Spezifisches. Bundle-ID, Auth-Server-URL
|
|
/// und Keychain-Adressierung kommen ausschließlich hierüber.
|
|
public protocol ManaAppConfig: Sendable {
|
|
/// Basis-URL des mana-auth-Servers, z.B. `https://auth.mana.how`.
|
|
var authBaseURL: URL { get }
|
|
|
|
/// Keychain-Service-Identifier, üblich `ev.mana.<app>`. Trennt
|
|
/// Token-Einträge verschiedener Apps voneinander, falls keine
|
|
/// shared Access-Group benutzt wird.
|
|
var keychainService: String { get }
|
|
|
|
/// Optional: Shared-Keychain-Access-Group für Cross-App-SSO.
|
|
/// `nil` bedeutet: nur App-eigener Keychain-Zugriff.
|
|
///
|
|
/// Wenn gesetzt, müssen alle teilnehmenden Apps unter derselben
|
|
/// Apple-Developer-Team-ID provisioniert sein und das Entitlement
|
|
/// `keychain-access-groups` mit demselben Wert tragen.
|
|
var keychainAccessGroup: String? { get }
|
|
}
|
|
|
|
/// Standard-Implementierung von ``ManaAppConfig``. Apps können diese
|
|
/// nutzen oder ein eigenes Type adoptieren.
|
|
public struct DefaultManaAppConfig: ManaAppConfig {
|
|
public let authBaseURL: URL
|
|
public let keychainService: String
|
|
public let keychainAccessGroup: String?
|
|
|
|
public init(
|
|
authBaseURL: URL,
|
|
keychainService: String,
|
|
keychainAccessGroup: String? = nil
|
|
) {
|
|
self.authBaseURL = authBaseURL
|
|
self.keychainService = keychainService
|
|
self.keychainAccessGroup = keychainAccessGroup
|
|
}
|
|
}
|