Files
omnivore/apple/OmnivoreKit/Sources/Services/Authentication/AuthModels.swift
2024-04-16 21:00:27 +08:00

91 lines
2.0 KiB
Swift

import Foundation
import Models
struct CreatePendingAccountParams: Encodable {
let token: String
let provider: AuthProvider
let name: String?
init(token: String, provider: AuthProvider, fullName: PersonNameComponents?) {
self.token = token
self.provider = provider
self.name = fullName?.formattedMediumLengthName
}
}
struct SignInParams: Encodable {
let token: String
let provider: AuthProvider
}
struct EmailSignInParams: Encodable {
let email: String
let password: String
}
struct EmailSignUpParams: Encodable {
let email: String
let password: String
let username: String
let name: String
}
enum AuthProvider: String, Encodable {
case apple = "APPLE"
case google = "GOOGLE"
}
struct AuthPayload: Decodable {
let authCookieString: String
let authToken: String
}
struct EmailAuthPayload: Decodable {
let authCookieString: String?
let authToken: String?
let pendingEmailVerification: Bool?
}
struct CreateAccountParams: Encodable {
let pendingUserToken: String
let userProfile: NewUserProfile
}
struct PendingUserAuthPayload: Decodable {
let pendingUserToken: String
let pendingUserProfile: NewUserProfile
}
struct PendingEmailVerificationAuthPayload: Decodable {
let pendingEmailVerificationToken: String
}
extension AuthPayload {
var commentedAuthCookieString: String {
authCookieString.replacingOccurrences(of: "HttpOnly", with: "comment=ios-webview-cookie; HttpOnly")
}
}
extension LoginError {
static func make(serverError: ServerError) -> LoginError {
switch serverError {
case .noConnection, .timeout:
return .network
case .unauthenticated:
return .unauthorized
case .unknown:
return .unknown
case .pendingEmailVerification, .stillProcessing:
return .pendingEmailVerification
}
}
}
private extension PersonNameComponents {
var formattedMediumLengthName: String {
let formatter = PersonNameComponentsFormatter()
formatter.style = .medium
return formatter.string(from: self)
}
}