62 lines
1.8 KiB
Swift
62 lines
1.8 KiB
Swift
import SwiftUI
|
|
|
|
@main
|
|
struct CalendarrApp: App {
|
|
@State private var appState = AppState()
|
|
|
|
var body: some Scene {
|
|
WindowGroup {
|
|
RootView()
|
|
.environment(appState)
|
|
}
|
|
}
|
|
}
|
|
|
|
@Observable
|
|
class AppState {
|
|
var serverURL: String = ""
|
|
var authToken: String = ""
|
|
var username: String = ""
|
|
var isAdmin: Bool = false
|
|
|
|
var isConfigured: Bool { !serverURL.isEmpty }
|
|
var isLoggedIn: Bool { !authToken.isEmpty }
|
|
|
|
init() {
|
|
serverURL = UserDefaults.standard.string(forKey: "serverURL") ?? ""
|
|
authToken = UserDefaults.standard.string(forKey: "authToken") ?? ""
|
|
username = UserDefaults.standard.string(forKey: "username") ?? ""
|
|
isAdmin = UserDefaults.standard.bool(forKey: "isAdmin")
|
|
}
|
|
|
|
func saveServer(url: String) {
|
|
serverURL = url.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
if serverURL.hasSuffix("/") { serverURL = String(serverURL.dropLast()) }
|
|
UserDefaults.standard.set(serverURL, forKey: "serverURL")
|
|
}
|
|
|
|
func saveLogin(token: String, user: String, admin: Bool) {
|
|
authToken = token
|
|
username = user
|
|
isAdmin = admin
|
|
UserDefaults.standard.set(token, forKey: "authToken")
|
|
UserDefaults.standard.set(user, forKey: "username")
|
|
UserDefaults.standard.set(admin, forKey: "isAdmin")
|
|
}
|
|
|
|
func logout() {
|
|
authToken = ""
|
|
username = ""
|
|
isAdmin = false
|
|
UserDefaults.standard.removeObject(forKey: "authToken")
|
|
UserDefaults.standard.removeObject(forKey: "username")
|
|
UserDefaults.standard.removeObject(forKey: "isAdmin")
|
|
}
|
|
|
|
func resetServer() {
|
|
logout()
|
|
serverURL = ""
|
|
UserDefaults.standard.removeObject(forKey: "serverURL")
|
|
}
|
|
}
|