init: init proj
This commit is contained in:
64
DDYSClient/Services/CookieManager.swift
Normal file
64
DDYSClient/Services/CookieManager.swift
Normal file
@@ -0,0 +1,64 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user