Files
ddys-client/DDYSClient/Services/CookieManager.swift
2026-02-26 22:15:35 +08:00

65 lines
1.9 KiB
Swift

import Foundation
import SwiftUI
@Observable
final class CookieManager {
static let shared = CookieManager()
private let cookieKey = "ddys_cookie_string"
private let defaults = UserDefaults.standard
var cookieString: String {
get { defaults.string(forKey: cookieKey) ?? "" }
set {
defaults.set(newValue, forKey: cookieKey)
applyCookies()
}
}
var isAuthenticated: Bool {
!cookieString.isEmpty
}
private init() {
applyCookies()
}
func applyCookies() {
guard !cookieString.isEmpty else { return }
let storage = HTTPCookieStorage.shared
// ddys cookies
if let cookies = storage.cookies(for: URL(string: "https://ddys.io")!) {
for cookie in cookies {
storage.deleteCookie(cookie)
}
}
// cookies
let pairs = cookieString.split(separator: ";").map { $0.trimmingCharacters(in: .whitespaces) }
for pair in pairs {
let parts = pair.split(separator: "=", maxSplits: 1)
guard parts.count == 2 else { continue }
let name = String(parts[0]).trimmingCharacters(in: .whitespaces)
let value = String(parts[1]).trimmingCharacters(in: .whitespaces)
let properties: [HTTPCookiePropertyKey: Any] = [
.name: name,
.value: value,
.domain: ".ddys.io",
.path: "/",
.secure: "TRUE",
]
if let cookie = HTTPCookie(properties: properties) {
storage.setCookie(cookie)
}
}
}
func clearCookies() {
cookieString = ""
if let cookies = HTTPCookieStorage.shared.cookies(for: URL(string: "https://ddys.io")!) {
for cookie in cookies {
HTTPCookieStorage.shared.deleteCookie(cookie)
}
}
}
}