chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import Foundation
|
||||
|
||||
enum OpenCodeWebCookieSupport {
|
||||
private static let requestCookieNames: Set<String> = ["auth", "__Host-auth"]
|
||||
|
||||
struct Context {
|
||||
let settings: ProviderSettingsSnapshot.OpenCodeProviderSettings?
|
||||
let provider: UsageProvider
|
||||
let browserDetection: BrowserDetection
|
||||
let allowCached: Bool
|
||||
}
|
||||
|
||||
static func requestCookieHeader(from rawHeader: String?) -> String? {
|
||||
CookieHeaderNormalizer.filteredHeader(from: rawHeader, allowedNames: self.requestCookieNames)
|
||||
}
|
||||
|
||||
static func resolveCookieHeader(
|
||||
context: Context,
|
||||
invalidCookie: @autoclosure () -> Error,
|
||||
missingCookie: @autoclosure () -> Error) throws -> String
|
||||
{
|
||||
if let settings = context.settings, settings.cookieSource == .manual {
|
||||
if let header = self.requestCookieHeader(from: settings.manualCookieHeader) {
|
||||
return header
|
||||
}
|
||||
throw invalidCookie()
|
||||
}
|
||||
|
||||
#if os(macOS)
|
||||
if context.allowCached,
|
||||
let cached = CookieHeaderCache.load(provider: context.provider),
|
||||
let header = self.requestCookieHeader(from: cached.cookieHeader)
|
||||
{
|
||||
return header
|
||||
}
|
||||
let session = try OpenCodeCookieImporter.importSession(
|
||||
browserDetection: context.browserDetection,
|
||||
preferredBrowsers: self.automaticImportOrder(provider: context.provider))
|
||||
guard let header = self.requestCookieHeader(from: session.cookieHeader) else {
|
||||
throw missingCookie()
|
||||
}
|
||||
CookieHeaderCache.store(
|
||||
provider: context.provider,
|
||||
cookieHeader: header,
|
||||
sourceLabel: session.sourceLabel)
|
||||
return header
|
||||
#else
|
||||
throw missingCookie()
|
||||
#endif
|
||||
}
|
||||
|
||||
#if os(macOS)
|
||||
static func automaticImportOrder(provider: UsageProvider) -> BrowserCookieImportOrder {
|
||||
ProviderDefaults.metadata[provider]?.browserCookieOrder ?? [.chrome]
|
||||
}
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user