Various fixes

This commit is contained in:
Ilya Laktyushin
2022-08-28 23:21:45 +02:00
parent 132158d943
commit b4e057f444
5 changed files with 185 additions and 30 deletions

View File

@@ -231,6 +231,8 @@ public enum AuthorizationCodeVerificationError {
case limitExceeded
case generic
case codeExpired
case invalidEmailToken
case invalidEmailAddress
}
private enum AuthorizationCodeResult {
@@ -312,6 +314,8 @@ public enum AuthorizationSendEmailCodeError {
case limitExceeded
case codeExpired
case timeout
case invalidEmail
case emailNotAllowed
}
public enum AuthorizationEmailVerificationError {
@@ -320,6 +324,8 @@ public enum AuthorizationEmailVerificationError {
case codeExpired
case invalidCode
case timeout
case invalidEmailToken
case emailNotAllowed
}
public struct ChangeLoginEmailData: Equatable {
@@ -335,6 +341,10 @@ public func sendLoginEmailChangeCode(account: Account, email: String) -> Signal<
return .fail(.limitExceeded)
} else if errorDescription == "CODE_HASH_EXPIRED" || errorDescription == "PHONE_CODE_EXPIRED" {
return .fail(.codeExpired)
} else if errorDescription.hasPrefix("EMAIL_INVALID") {
return .fail(.invalidEmail)
} else if errorDescription.hasPrefix("EMAIL_NOT_ALLOWED") {
return .fail(.emailNotAllowed)
} else {
return .fail(.generic)
}
@@ -359,6 +369,10 @@ public func sendLoginEmailCode(account: UnauthorizedAccount, email: String) -> S
return .fail(.limitExceeded)
} else if errorDescription == "CODE_HASH_EXPIRED" || errorDescription == "PHONE_CODE_EXPIRED" {
return .fail(.codeExpired)
} else if errorDescription.hasPrefix("EMAIL_INVALID") {
return .fail(.invalidEmail)
} else if errorDescription.hasPrefix("EMAIL_NOT_ALLOWED") {
return .fail(.emailNotAllowed)
} else {
return .fail(.generic)
}
@@ -389,6 +403,39 @@ public func sendLoginEmailCode(account: UnauthorizedAccount, email: String) -> S
|> ignoreValues
}
public func verifyLoginEmailChange(account: Account, code: AuthorizationCode.EmailVerification) -> Signal<Never, AuthorizationEmailVerificationError> {
let verification: Api.EmailVerification
switch code {
case let .emailCode(code):
verification = .emailVerificationCode(code: code)
case let .appleToken(token):
verification = .emailVerificationApple(token: token)
case let .googleToken(token):
verification = .emailVerificationGoogle(token: token)
}
return account.network.request(Api.functions.account.verifyEmail(purpose: .emailVerifyPurposeLoginChange, verification: verification), automaticFloodWait: false)
|> `catch` { error -> Signal<Api.account.EmailVerified, AuthorizationEmailVerificationError> in
let errorDescription = error.errorDescription ?? ""
if errorDescription.hasPrefix("FLOOD_WAIT") {
return .fail(.limitExceeded)
} else if errorDescription == "CODE_HASH_EXPIRED" || errorDescription == "PHONE_CODE_EXPIRED" || errorDescription == "EMAIL_VERIFY_EXPIRED" {
return .fail(.codeExpired)
} else if errorDescription == "CODE_INVALID" {
return .fail(.invalidCode)
} else if errorDescription == "EMAIL_TOKEN_INVALID" {
return .fail(.invalidEmailToken)
} else if errorDescription == "EMAIL_NOT_ALLOWED" {
return .fail(.emailNotAllowed)
} else {
return .fail(.generic)
}
}
|> mapToSignal { _ -> Signal<Never, AuthorizationEmailVerificationError> in
return .never()
}
}
public func verifyLoginEmailSetup(account: UnauthorizedAccount, code: AuthorizationCode.EmailVerification) -> Signal<Never, AuthorizationEmailVerificationError> {
return account.postbox.transaction { transaction -> Signal<Never, AuthorizationEmailVerificationError> in
if let state = transaction.getState() as? UnauthorizedAccountState {
@@ -409,10 +456,14 @@ public func verifyLoginEmailSetup(account: UnauthorizedAccount, code: Authorizat
let errorDescription = error.errorDescription ?? ""
if errorDescription.hasPrefix("FLOOD_WAIT") {
return .fail(.limitExceeded)
} else if errorDescription == "CODE_HASH_EXPIRED" || errorDescription == "PHONE_CODE_EXPIRED" {
} else if errorDescription == "CODE_HASH_EXPIRED" || errorDescription == "PHONE_CODE_EXPIRED" || errorDescription == "EMAIL_VERIFY_EXPIRED" {
return .fail(.codeExpired)
} else if errorDescription == "" {
} else if errorDescription == "CODE_INVALID" {
return .fail(.invalidCode)
} else if errorDescription == "EMAIL_TOKEN_INVALID" {
return .fail(.invalidEmailToken)
} else if errorDescription == "EMAIL_NOT_ALLOWED" {
return .fail(.emailNotAllowed)
} else {
return .fail(.generic)
}
@@ -502,12 +553,16 @@ public func authorizeWithCode(accountManager: AccountManager<TelegramAccountMana
case let (_, errorDescription):
if errorDescription.hasPrefix("FLOOD_WAIT") {
return .fail(.limitExceeded)
} else if errorDescription == "PHONE_CODE_INVALID" {
} else if errorDescription == "PHONE_CODE_INVALID" || errorDescription == "EMAIL_CODE_INVALID" {
return .fail(.invalidCode)
} else if errorDescription == "CODE_HASH_EXPIRED" || errorDescription == "PHONE_CODE_EXPIRED" {
return .fail(.codeExpired)
} else if errorDescription == "PHONE_NUMBER_UNOCCUPIED" {
return .single(.signUp)
} else if errorDescription == "EMAIL_TOKEN_INVALID" {
return .fail(.invalidEmailToken)
} else if errorDescription == "EMAIL_ADDRESS_INVALID" {
return .fail(.invalidEmailAddress)
} else {
return .fail(.generic)
}