2022-02-11 17:24:33 +00:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-27 06:02:57 +00:00
|
|
|
struct EmailSignInParams: Encodable {
|
|
|
|
|
let email: String
|
|
|
|
|
let password: String
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-30 16:10:41 +00:00
|
|
|
struct EmailSignUpParams: Encodable {
|
|
|
|
|
let email: String
|
|
|
|
|
let password: String
|
|
|
|
|
let username: String
|
|
|
|
|
let name: String
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-11 17:24:33 +00:00
|
|
|
enum AuthProvider: String, Encodable {
|
|
|
|
|
case apple = "APPLE"
|
|
|
|
|
case google = "GOOGLE"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct AuthPayload: Decodable {
|
|
|
|
|
let authCookieString: String
|
|
|
|
|
let authToken: String
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 19:06:07 +00:00
|
|
|
struct EmailAuthPayload: Decodable {
|
2022-08-02 05:18:37 +00:00
|
|
|
let authCookieString: String?
|
|
|
|
|
let authToken: String?
|
2022-07-29 19:06:07 +00:00
|
|
|
let pendingEmailVerification: Bool?
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-11 17:24:33 +00:00
|
|
|
struct CreateAccountParams: Encodable {
|
|
|
|
|
let pendingUserToken: String
|
2022-12-06 05:35:46 +00:00
|
|
|
let userProfile: NewUserProfile
|
2022-02-11 17:24:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct PendingUserAuthPayload: Decodable {
|
|
|
|
|
let pendingUserToken: String
|
2022-12-06 05:35:46 +00:00
|
|
|
let pendingUserProfile: NewUserProfile
|
2022-02-11 17:24:33 +00:00
|
|
|
}
|
|
|
|
|
|
2022-07-30 16:10:41 +00:00
|
|
|
struct PendingEmailVerificationAuthPayload: Decodable {
|
|
|
|
|
let pendingEmailVerificationToken: String
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-11 17:24:33 +00:00
|
|
|
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
|
2022-07-27 06:40:44 +00:00
|
|
|
case .pendingEmailVerification:
|
|
|
|
|
return .pendingEmailVerification
|
2022-02-11 17:24:33 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private extension PersonNameComponents {
|
|
|
|
|
var formattedMediumLengthName: String {
|
|
|
|
|
let formatter = PersonNameComponentsFormatter()
|
|
|
|
|
formatter.style = .medium
|
|
|
|
|
return formatter.string(from: self)
|
|
|
|
|
}
|
|
|
|
|
}
|