SwiftAPI.swift 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750
  1. /*
  2. * Copyright 2022 Google LLC
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. import Foundation
  17. import XCTest
  18. import FirebaseAuth
  19. import FirebaseCore
  20. #if !os(macOS)
  21. import UIKit
  22. #endif
  23. /// This file tests public methods and enums. Each function maps to a public header file.
  24. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  25. class AuthAPI_hOnlyTests: XCTestCase {
  26. // Each function corresponds with a public header.
  27. func FIRActionCodeSettings_h() {
  28. let codeSettings = FirebaseAuth.ActionCodeSettings()
  29. // Currently kept for backwards compatibility?
  30. codeSettings.setIOSBundleID("abc")
  31. codeSettings.iOSBundleID = "abc"
  32. codeSettings.setAndroidPackageName("name", installIfNotAvailable: true, minimumVersion: "10.0")
  33. let _: Bool = codeSettings.handleCodeInApp
  34. let _: Bool = codeSettings.androidInstallIfNotAvailable
  35. if let _: URL = codeSettings.url,
  36. let _: String = codeSettings.iOSBundleID,
  37. let _: String = codeSettings.androidPackageName,
  38. let _: String = codeSettings.androidMinimumVersion,
  39. let _: String = codeSettings.dynamicLinkDomain,
  40. let _: String = codeSettings.linkDomain {}
  41. codeSettings.linkDomain = nil
  42. codeSettings.linkDomain = ""
  43. }
  44. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  45. func FIRAuthAdditionalUserInfo_h(credential: AuthCredential) async throws {
  46. let auth = FirebaseAuth.Auth.auth()
  47. let user = auth.currentUser!
  48. let authDataResult = try await user.reauthenticate(with: credential)
  49. let additionalUserInfo = authDataResult.additionalUserInfo!
  50. let _: String = additionalUserInfo.providerID
  51. let _: Bool = additionalUserInfo.isNewUser
  52. if let _: [String: Any] = additionalUserInfo.profile,
  53. let _: String = additionalUserInfo.username {}
  54. }
  55. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  56. func ActionCodeOperationTests() async throws {
  57. let auth = FirebaseAuth.Auth.auth()
  58. let info = try await auth.checkActionCode("code")
  59. let _: ActionCodeOperation = info.operation
  60. let _: String = info.email
  61. if let _: String = info.previousEmail {}
  62. }
  63. func ActionCodeURL() {
  64. if let url = FirebaseAuth.ActionCodeURL(link: "string") {
  65. let _: ActionCodeOperation = url.operation
  66. if let _: String = url.apiKey,
  67. let _: String = url.code,
  68. let _: URL = url.continueURL,
  69. let _: String = url.languageCode {}
  70. }
  71. }
  72. func authProperties(auth: Auth) {
  73. let _: Bool = auth.shareAuthStateAcrossDevices
  74. if let _: FirebaseApp = auth.app,
  75. let _: User = auth.currentUser,
  76. let _: String = auth.languageCode,
  77. let _: AuthSettings = auth.settings,
  78. let _: String = auth.userAccessGroup,
  79. let _: String = auth.tenantID,
  80. let _: String = auth.customAuthDomain
  81. {}
  82. #if os(iOS)
  83. if let _: Data = auth.apnsToken {}
  84. // TODO: This API was defined in the ObjC SDK, but seems to be a no-op.
  85. // auth.apnsToken = Data()
  86. #endif
  87. }
  88. func FIRAuth_h(credential: AuthCredential) throws {
  89. let auth = FirebaseAuth.Auth.auth()
  90. let user = auth.currentUser!
  91. auth.updateCurrentUser(user) { _ in
  92. }
  93. auth.signIn(withEmail: "abc@abc.com", password: "password") { result, error in
  94. }
  95. auth.signIn(withEmail: "abc@abc.com", link: "link") { result, error in
  96. }
  97. #if os(iOS)
  98. let provider = OAuthProvider(providerID: "abc")
  99. provider.getCredentialWith(nil) { credential, error in
  100. auth.signIn(with: credential!) { result, error in
  101. }
  102. }
  103. auth.signIn(with: OAuthProvider(providerID: "abc"), uiDelegate: nil) { result, error in
  104. }
  105. #endif
  106. auth.signInAnonymously { result, error in
  107. }
  108. auth.signIn(withCustomToken: "abc") { result, error in
  109. }
  110. auth.createUser(withEmail: "email", password: "password") { result, error in
  111. }
  112. auth.confirmPasswordReset(withCode: "code", newPassword: "password") { error in
  113. }
  114. auth.checkActionCode("abc") { codeInfo, error in
  115. }
  116. auth.verifyPasswordResetCode("code") { email, error in
  117. }
  118. auth.applyActionCode("code") { error in
  119. }
  120. auth.sendPasswordReset(withEmail: "email") { error in
  121. }
  122. let actionCodeSettings = ActionCodeSettings()
  123. auth.sendPasswordReset(withEmail: "email", actionCodeSettings: actionCodeSettings) { error in
  124. }
  125. auth.sendSignInLink(toEmail: "email", actionCodeSettings: actionCodeSettings) { error in
  126. }
  127. try auth.signOut()
  128. _ = auth.isSignIn(withEmailLink: "link")
  129. let handle = auth.addStateDidChangeListener { auth, user in
  130. }
  131. auth.removeStateDidChangeListener(handle)
  132. _ = auth.addIDTokenDidChangeListener { auth, user in
  133. }
  134. auth.removeIDTokenDidChangeListener(handle)
  135. auth.useAppLanguage()
  136. auth.useEmulator(withHost: "myHost", port: 123)
  137. #if os(iOS)
  138. _ = auth.canHandle(URL(fileURLWithPath: "/my/path"))
  139. auth.setAPNSToken(Data(), type: AuthAPNSTokenType.prod)
  140. _ = auth.canHandleNotification([:])
  141. #if !targetEnvironment(macCatalyst)
  142. auth.initializeRecaptchaConfig { _ in
  143. }
  144. #endif
  145. #endif
  146. auth.revokeToken(withAuthorizationCode: "A")
  147. try auth.useUserAccessGroup("abc")
  148. let nilUser = try auth.getStoredUser(forAccessGroup: "def")
  149. // If nilUser is not optional, this will raise a compiler error.
  150. // This condition does not need to execute, and may not if prior
  151. // functions throw.
  152. if let _ = nilUser {
  153. XCTAssert(true)
  154. }
  155. }
  156. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  157. func FIRAuth_hAsync(credential: AuthCredential) async throws {
  158. let auth = FirebaseAuth.Auth.auth()
  159. let user = auth.currentUser!
  160. try await auth.updateCurrentUser(user)
  161. _ = try await auth.signIn(withEmail: "abc@abc.com", password: "password")
  162. _ = try await auth.signIn(withEmail: "abc@abc.com", link: "link")
  163. #if os(iOS)
  164. let provider = OAuthProvider(providerID: "abc")
  165. let credential = try await provider.credential(with: nil)
  166. _ = try await auth.signIn(with: credential)
  167. _ = try await auth.signIn(with: OAuthProvider(providerID: "abc"), uiDelegate: nil)
  168. #if !targetEnvironment(macCatalyst)
  169. try await auth.initializeRecaptchaConfig()
  170. #endif
  171. #endif
  172. _ = try await auth.signInAnonymously()
  173. _ = try await auth.signIn(withCustomToken: "abc")
  174. _ = try await auth.createUser(withEmail: "email", password: "password")
  175. _ = try await auth.confirmPasswordReset(withCode: "code", newPassword: "password")
  176. _ = try await auth.checkActionCode("abc")
  177. _ = try await auth.verifyPasswordResetCode("code")
  178. _ = try await auth.applyActionCode("code")
  179. _ = try await auth.sendPasswordReset(withEmail: "email")
  180. let actionCodeSettings = ActionCodeSettings()
  181. _ = try await auth.sendPasswordReset(
  182. withEmail: "email",
  183. actionCodeSettings: actionCodeSettings
  184. )
  185. _ = try await auth.sendSignInLink(toEmail: "email", actionCodeSettings: actionCodeSettings)
  186. try await auth.revokeToken(withAuthorizationCode: "string")
  187. }
  188. #if !os(macOS)
  189. func FIRAuthAPNSTokenType_h() {
  190. _ = AuthAPNSTokenType.unknown
  191. _ = AuthAPNSTokenType.sandbox
  192. _ = AuthAPNSTokenType.prod
  193. }
  194. #endif
  195. func authCredential(credential: AuthCredential) {
  196. let _: String = credential.provider
  197. }
  198. func authDataResult(result: AuthDataResult) {
  199. let _: User = result.user
  200. if let _: AdditionalUserInfo = result.additionalUserInfo,
  201. let _: AuthCredential = result.credential {}
  202. }
  203. func FIRAuthErrors_h() {
  204. _ = AuthErrorCode.invalidCustomToken
  205. _ = AuthErrorCode.customTokenMismatch
  206. _ = AuthErrorCode.invalidCredential
  207. _ = AuthErrorCode.userDisabled
  208. _ = AuthErrorCode.operationNotAllowed
  209. _ = AuthErrorCode.emailAlreadyInUse
  210. _ = AuthErrorCode.invalidEmail
  211. _ = AuthErrorCode.wrongPassword
  212. _ = AuthErrorCode.tooManyRequests
  213. _ = AuthErrorCode.userNotFound
  214. _ = AuthErrorCode.accountExistsWithDifferentCredential
  215. _ = AuthErrorCode.requiresRecentLogin
  216. _ = AuthErrorCode.providerAlreadyLinked
  217. _ = AuthErrorCode.noSuchProvider
  218. _ = AuthErrorCode.invalidUserToken
  219. _ = AuthErrorCode.networkError
  220. _ = AuthErrorCode.userTokenExpired
  221. _ = AuthErrorCode.invalidAPIKey
  222. _ = AuthErrorCode.userMismatch
  223. _ = AuthErrorCode.credentialAlreadyInUse
  224. _ = AuthErrorCode.weakPassword
  225. _ = AuthErrorCode.appNotAuthorized
  226. _ = AuthErrorCode.expiredActionCode
  227. _ = AuthErrorCode.invalidActionCode
  228. _ = AuthErrorCode.invalidMessagePayload
  229. _ = AuthErrorCode.invalidSender
  230. _ = AuthErrorCode.invalidRecipientEmail
  231. _ = AuthErrorCode.missingEmail
  232. _ = AuthErrorCode.missingIosBundleID
  233. _ = AuthErrorCode.missingAndroidPackageName
  234. _ = AuthErrorCode.unauthorizedDomain
  235. _ = AuthErrorCode.invalidContinueURI
  236. _ = AuthErrorCode.missingContinueURI
  237. _ = AuthErrorCode.missingPhoneNumber
  238. _ = AuthErrorCode.invalidPhoneNumber
  239. _ = AuthErrorCode.missingVerificationCode
  240. _ = AuthErrorCode.invalidVerificationCode
  241. _ = AuthErrorCode.missingVerificationID
  242. _ = AuthErrorCode.invalidVerificationID
  243. _ = AuthErrorCode.missingAppCredential
  244. _ = AuthErrorCode.invalidAppCredential
  245. _ = AuthErrorCode.sessionExpired
  246. _ = AuthErrorCode.quotaExceeded
  247. _ = AuthErrorCode.missingAppToken
  248. _ = AuthErrorCode.notificationNotForwarded
  249. _ = AuthErrorCode.appNotVerified
  250. _ = AuthErrorCode.captchaCheckFailed
  251. _ = AuthErrorCode.webContextAlreadyPresented
  252. _ = AuthErrorCode.webContextCancelled
  253. _ = AuthErrorCode.appVerificationUserInteractionFailure
  254. _ = AuthErrorCode.invalidClientID
  255. _ = AuthErrorCode.webNetworkRequestFailed
  256. _ = AuthErrorCode.webInternalError
  257. _ = AuthErrorCode.webSignInUserInteractionFailure
  258. _ = AuthErrorCode.localPlayerNotAuthenticated
  259. _ = AuthErrorCode.nullUser
  260. _ = AuthErrorCode.dynamicLinkNotActivated
  261. _ = AuthErrorCode.invalidProviderID
  262. _ = AuthErrorCode.tenantIDMismatch
  263. _ = AuthErrorCode.unsupportedTenantOperation
  264. _ = AuthErrorCode.invalidDynamicLinkDomain
  265. _ = AuthErrorCode.invalidHostingLinkDomain
  266. _ = AuthErrorCode.rejectedCredential
  267. _ = AuthErrorCode.gameKitNotLinked
  268. _ = AuthErrorCode.secondFactorRequired
  269. _ = AuthErrorCode.missingMultiFactorSession
  270. _ = AuthErrorCode.missingMultiFactorInfo
  271. _ = AuthErrorCode.invalidMultiFactorSession
  272. _ = AuthErrorCode.multiFactorInfoNotFound
  273. _ = AuthErrorCode.adminRestrictedOperation
  274. _ = AuthErrorCode.unverifiedEmail
  275. _ = AuthErrorCode.secondFactorAlreadyEnrolled
  276. _ = AuthErrorCode.maximumSecondFactorCountExceeded
  277. _ = AuthErrorCode.unsupportedFirstFactor
  278. _ = AuthErrorCode.emailChangeNeedsVerification
  279. _ = AuthErrorCode.missingOrInvalidNonce
  280. _ = AuthErrorCode.missingClientIdentifier
  281. _ = AuthErrorCode.recaptchaNotEnabled
  282. _ = AuthErrorCode.missingRecaptchaToken
  283. _ = AuthErrorCode.invalidRecaptchaToken
  284. _ = AuthErrorCode.invalidRecaptchaAction
  285. _ = AuthErrorCode.missingClientType
  286. _ = AuthErrorCode.missingRecaptchaVersion
  287. _ = AuthErrorCode.invalidRecaptchaVersion
  288. _ = AuthErrorCode.invalidReqType
  289. _ = AuthErrorCode.keychainError
  290. _ = AuthErrorCode.internalError
  291. _ = AuthErrorCode.malformedJWT
  292. }
  293. func authSettings(settings: AuthSettings) {
  294. let _: Bool = settings.isAppVerificationDisabledForTesting
  295. settings.isAppVerificationDisabledForTesting = true
  296. }
  297. func authTokenResult(result: AuthTokenResult) {
  298. let _: String = result.token
  299. let _: Date = result.expirationDate
  300. let _: Date = result.authDate
  301. let _: Date = result.issuedAtDate
  302. let _: String = result.signInProvider
  303. let _: String = result.signInSecondFactor
  304. let _: [String: Any] = result.claims
  305. }
  306. #if !os(macOS) && !os(watchOS)
  307. func FIRAuthUIDelegate_h() {
  308. class AuthUIImpl: NSObject, AuthUIDelegate {
  309. func present(_ viewControllerToPresent: UIViewController, animated flag: Bool,
  310. completion: (() -> Void)? = nil) {}
  311. func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {}
  312. }
  313. let obj = AuthUIImpl()
  314. obj.present(UIViewController(), animated: true) {}
  315. obj.dismiss(animated: false) {}
  316. }
  317. #endif
  318. func FIREmailAuthProvider_h() {
  319. _ = EmailAuthProvider.credential(withEmail: "e@email.com", password: "password")
  320. _ = EmailAuthProvider.credential(withEmail: "e@email.com", link: "link")
  321. }
  322. func FIRFacebookAuthProvider_h() {
  323. _ = FacebookAuthProvider.credential(withAccessToken: "token")
  324. }
  325. #if os(iOS)
  326. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  327. func FIRFedederatedAuthProvider_hAsync() async throws {
  328. class FederatedAuthImplementation: NSObject, FederatedAuthProvider {
  329. // TODO: Document this API breakage - needing to add this function for classes implementing
  330. // FederatedAuthProvider.
  331. func credential(with UIDelegate: AuthUIDelegate?) async throws -> AuthCredential {
  332. return FacebookAuthProvider.credential(withAccessToken: "token")
  333. }
  334. }
  335. let obj = FederatedAuthImplementation()
  336. _ = try await obj.credential(with: nil)
  337. }
  338. func FIRFederatedAuthProvider_h() {
  339. class FederatedAuthImplementation: NSObject, FederatedAuthProvider {
  340. func credential(with UIDelegate: AuthUIDelegate?) async throws -> AuthCredential {
  341. return FacebookAuthProvider.credential(withAccessToken: "token")
  342. }
  343. }
  344. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  345. func FIRFedederatedAuthProvider_hAsync() async throws {
  346. let obj = FederatedAuthImplementation()
  347. _ = try await obj.credential(with: nil)
  348. }
  349. }
  350. #endif
  351. #if !os(watchOS)
  352. func FIRGameCenterAuthProvider_h() {
  353. GameCenterAuthProvider.getCredential { _, _ in
  354. }
  355. }
  356. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  357. func FIRGameCenterAuthProvider_hAsync() async throws {
  358. _ = try await GameCenterAuthProvider.getCredential()
  359. }
  360. #endif
  361. func FIRGitHubAuthProvider_h() {
  362. _ = GitHubAuthProvider.credential(withToken: "token")
  363. }
  364. func FIRGoogleAuthProvider_h() {
  365. _ = GoogleAuthProvider.credential(withIDToken: "token", accessToken: "aToken")
  366. }
  367. #if os(iOS)
  368. func FIRMultiFactor_h(obj: MultiFactor) {
  369. let provider = PhoneAuthProvider.provider(auth: FirebaseAuth.Auth.auth())
  370. let credential = provider.credential(withVerificationID: "id",
  371. verificationCode: "code")
  372. obj.getSessionWithCompletion { _, _ in
  373. }
  374. obj
  375. .enroll(with: PhoneMultiFactorGenerator.assertion(with: credential),
  376. displayName: "name") { _ in
  377. }
  378. let mfi = obj.enrolledFactors[0]
  379. obj.unenroll(with: mfi) { _ in
  380. }
  381. obj.unenroll(withFactorUID: "uid") { _ in
  382. }
  383. let _: [MultiFactorInfo] = obj.enrolledFactors
  384. }
  385. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  386. func FIRMultiFactor_hAsync(obj: MultiFactor) async throws {
  387. let provider = PhoneAuthProvider.provider(auth: FirebaseAuth.Auth.auth())
  388. let credential = provider.credential(withVerificationID: "id",
  389. verificationCode: "code")
  390. _ = try await obj.session()
  391. try await obj.enroll(
  392. with: PhoneMultiFactorGenerator.assertion(with: credential),
  393. displayName: "name"
  394. )
  395. let mfi = obj.enrolledFactors[0]
  396. try await obj.unenroll(with: mfi)
  397. try await obj.unenroll(withFactorUID: "uid")
  398. }
  399. func multiFactorAssertion(assertion: MultiFactorAssertion) {
  400. let _: String = assertion.factorID
  401. }
  402. func multiFactorInfo(mfi: MultiFactorInfo) {
  403. let _: String = mfi.uid
  404. let _: Date = mfi.enrollmentDate
  405. let _: String = mfi.factorID
  406. if let _: String = mfi.displayName {}
  407. }
  408. func FIRMultiFactorResolver_h(error: NSError) {
  409. let provider = PhoneAuthProvider.provider(auth: FirebaseAuth.Auth.auth())
  410. let credential = provider.credential(withVerificationID: "id",
  411. verificationCode: "code")
  412. if let obj = error
  413. // TODO: AuthErrorUserInfoMultiFactorResolverKey
  414. .userInfo[AuthErrors.userInfoMultiFactorResolverKey] as? MultiFactorResolver {
  415. obj.resolveSignIn(with: PhoneMultiFactorGenerator.assertion(with: credential)) { _, _ in
  416. }
  417. let _: MultiFactorSession = obj.session
  418. let _: [MultiFactorInfo] = obj.hints
  419. let _: Auth = obj.auth
  420. }
  421. }
  422. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  423. func FIRMultiFactorResolver_hAsync(error: NSError) async throws {
  424. let provider = PhoneAuthProvider.provider(auth: FirebaseAuth.Auth.auth())
  425. let credential = provider.credential(withVerificationID: "id",
  426. verificationCode: "code")
  427. if let obj = error
  428. .userInfo[AuthErrors.userInfoMultiFactorResolverKey] as? MultiFactorResolver {
  429. _ = try await obj.resolveSignIn(with: PhoneMultiFactorGenerator.assertion(with: credential))
  430. }
  431. }
  432. #endif
  433. func oauthCredential(credential: OAuthCredential) {
  434. if let _: String = credential.idToken,
  435. let _: String = credential.accessToken,
  436. let _: String = credential.secret {}
  437. }
  438. func FIROAuthProvider_h() {
  439. let _: (String, Auth) -> OAuthProvider = OAuthProvider.init(providerID:auth:)
  440. let _: (AuthProviderID, Auth) -> OAuthProvider = OAuthProvider.init(providerID:auth:)
  441. let _: (String) -> OAuthProvider = OAuthProvider.provider(providerID:)
  442. let _: (String, Auth) -> OAuthProvider = OAuthProvider.provider(providerID:auth:)
  443. let _: (AuthProviderID) -> OAuthProvider = OAuthProvider.provider(providerID:)
  444. let _: (AuthProviderID, Auth) -> OAuthProvider = OAuthProvider.provider(providerID:auth:)
  445. // `auth` defaults to `nil`
  446. let provider = OAuthProvider(providerID: "id")
  447. let _: String = provider.providerID
  448. #if os(iOS)
  449. let _: (String, String, String?) -> OAuthCredential =
  450. OAuthProvider.credential(withProviderID:idToken:accessToken:)
  451. let _: (AuthProviderID, String, String?) -> OAuthCredential =
  452. OAuthProvider.credential(providerID:idToken:accessToken:)
  453. // `accessToken` defaults to `nil`
  454. let _: OAuthCredential =
  455. OAuthProvider.credential(providerID: .apple, idToken: "")
  456. let _: (String, String) -> OAuthCredential =
  457. OAuthProvider.credential(withProviderID:accessToken:)
  458. let _: (AuthProviderID, String) -> OAuthCredential = OAuthProvider
  459. .credential(providerID:accessToken:)
  460. let _: (String, String, String, String) -> OAuthCredential =
  461. OAuthProvider.credential(withProviderID:idToken:rawNonce:accessToken:)
  462. let _: (AuthProviderID, String, String, String?) -> OAuthCredential =
  463. OAuthProvider.credential(providerID:idToken:rawNonce:accessToken:)
  464. // `accessToken` defaults to `nil`
  465. let _: OAuthCredential =
  466. OAuthProvider.credential(providerID: .apple, idToken: "", rawNonce: "")
  467. let _: (String, String, String) -> OAuthCredential =
  468. OAuthProvider.credential(withProviderID:idToken:rawNonce:)
  469. provider.getCredentialWith(provider as? AuthUIDelegate) { credential, error in
  470. }
  471. #endif
  472. let _: String = provider.providerID
  473. if let _: [String] = provider.scopes,
  474. let _: [String: String] = provider.customParameters {}
  475. }
  476. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  477. func FIROAuthProvider_h() async throws {
  478. let provider = OAuthProvider(providerID: "abc")
  479. #if os(iOS)
  480. provider.getCredentialWith(provider as? AuthUIDelegate) { credential, error in
  481. }
  482. _ = try await provider.credential(with: provider as? AuthUIDelegate)
  483. #endif
  484. }
  485. #if os(iOS)
  486. func FIRPhoneAuthProvider_h(mfi: PhoneMultiFactorInfo) {
  487. _ = PhoneAuthProvider.provider()
  488. let provider = PhoneAuthProvider.provider(auth: FirebaseAuth.Auth.auth())
  489. provider.verifyPhoneNumber("123", uiDelegate: nil) { _, _ in
  490. }
  491. provider.verifyPhoneNumber("123", uiDelegate: nil, multiFactorSession: nil) { _, _ in
  492. }
  493. provider.verifyPhoneNumber(
  494. with: mfi,
  495. uiDelegate: nil,
  496. multiFactorSession: nil
  497. ) { _, _ in
  498. }
  499. provider.verifyPhoneNumber("123", uiDelegate: nil, multiFactorSession: nil) { _, _ in
  500. }
  501. _ = provider.credential(withVerificationID: "id", verificationCode: "code")
  502. }
  503. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  504. func FIRPhoneAuthProvider_hAsync(mfi: PhoneMultiFactorInfo) async throws {
  505. _ = PhoneAuthProvider.provider()
  506. let provider = PhoneAuthProvider.provider(auth: FirebaseAuth.Auth.auth())
  507. _ = try await provider.verifyPhoneNumber("123", uiDelegate: nil)
  508. _ = try await provider.verifyPhoneNumber("123", uiDelegate: nil, multiFactorSession: nil)
  509. _ = try await provider.verifyPhoneNumber(with: mfi, uiDelegate: nil,
  510. multiFactorSession: nil)
  511. _ = try await provider.verifyPhoneNumber("123", uiDelegate: nil, multiFactorSession: nil)
  512. }
  513. func FIRPhoneMultiFactorGenerator_h() {
  514. let credential = PhoneAuthProvider.provider().credential(withVerificationID: "id",
  515. verificationCode: "code")
  516. _ = PhoneMultiFactorGenerator.assertion(with: credential)
  517. }
  518. func phoneMultiFactorInfo(mfi: PhoneMultiFactorInfo) {
  519. let _: String = mfi.phoneNumber
  520. }
  521. func FIRTOTPSecret_h(session: MultiFactorSession) async throws {
  522. let obj = try await TOTPMultiFactorGenerator.generateSecret(with: session)
  523. _ = obj.sharedSecretKey()
  524. _ = obj.generateQRCodeURL(withAccountName: "name", issuer: "issuer")
  525. obj.openInOTPApp(withQRCodeURL: "url")
  526. }
  527. func FIRTOTPMultiFactorGenerator_h(session: MultiFactorSession, secret: TOTPSecret) {
  528. TOTPMultiFactorGenerator.generateSecret(with: session) { _, _ in
  529. }
  530. _ = TOTPMultiFactorGenerator.assertionForEnrollment(with: secret,
  531. oneTimePassword: "code")
  532. _ = TOTPMultiFactorGenerator.assertionForSignIn(
  533. withEnrollmentID: "id", oneTimePassword: "code"
  534. )
  535. }
  536. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  537. func FIRTOTPMultiFactorGenerator_hAsync(session: MultiFactorSession) async throws {
  538. _ = try await TOTPMultiFactorGenerator.generateSecret(with: session)
  539. }
  540. #endif
  541. func FIRTwitterAuthProvider_h() {
  542. _ = TwitterAuthProvider.credential(withToken: "token", secret: "secret")
  543. }
  544. func FIRUser_h() {
  545. let auth = FirebaseAuth.Auth.auth()
  546. let user = auth.currentUser!
  547. let credential = GoogleAuthProvider.credential(withIDToken: "token", accessToken: "aToken")
  548. user.updatePassword(to: "password") { _ in
  549. }
  550. let changeRequest = user.createProfileChangeRequest()
  551. user.reload { _ in
  552. }
  553. user.reauthenticate(with: credential) { _, _ in
  554. }
  555. #if os(iOS)
  556. let phoneCredential = PhoneAuthProvider.provider().credential(withVerificationID: "id",
  557. verificationCode: "code")
  558. user.updatePhoneNumber(phoneCredential) { _ in
  559. }
  560. let provider = PhoneAuthProvider.provider(auth: FirebaseAuth.Auth.auth())
  561. user.reauthenticate(with: provider as! FederatedAuthProvider, uiDelegate: nil)
  562. user.link(with: provider as! FederatedAuthProvider, uiDelegate: nil) { _, _ in
  563. }
  564. #endif
  565. user.getIDTokenResult { _, _ in
  566. }
  567. user.getIDTokenResult(forcingRefresh: true) { _, _ in
  568. }
  569. user.getIDToken { _, _ in
  570. }
  571. user.getIDTokenForcingRefresh(true) { _, _ in
  572. }
  573. user.link(with: credential) { _, _ in
  574. }
  575. user.unlink(fromProvider: "abc") { _, _ in
  576. }
  577. user.sendEmailVerification { _ in
  578. }
  579. user.sendEmailVerification(with: ActionCodeSettings()) { _ in
  580. }
  581. user.delete { _ in
  582. }
  583. user.sendEmailVerification(beforeUpdatingEmail: "email") { _ in
  584. }
  585. user.sendEmailVerification(
  586. beforeUpdatingEmail: "email",
  587. actionCodeSettings: ActionCodeSettings()
  588. ) { _ in
  589. }
  590. changeRequest.commitChanges { _ in
  591. }
  592. let _: String = user.providerID
  593. let _: String = user.uid
  594. if let _: String = user.displayName,
  595. let _: URL = user.photoURL,
  596. let _: String = user.email,
  597. let _: String = user.phoneNumber {}
  598. }
  599. func userProperties(user: User) {
  600. let changeRequest = user.createProfileChangeRequest()
  601. let _: Bool = user.isAnonymous
  602. let _: Bool = user.isEmailVerified
  603. let _: [UserInfo] = user.providerData
  604. let _: UserMetadata = user.metadata
  605. #if os(iOS)
  606. let _: MultiFactor = user.multiFactor
  607. #endif
  608. if let _: String = user.refreshToken,
  609. let _: String = user.tenantID,
  610. let _: String = changeRequest.displayName,
  611. let _: URL = changeRequest.photoURL {}
  612. }
  613. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  614. func FIRUser_hAsync() async throws {
  615. let auth = FirebaseAuth.Auth.auth()
  616. let user = auth.currentUser!
  617. let credential = GoogleAuthProvider.credential(withIDToken: "token", accessToken: "aToken")
  618. try await user.updatePassword(to: "password")
  619. let changeRequest = user.createProfileChangeRequest()
  620. try await user.reload()
  621. try await user.reauthenticate(with: credential)
  622. #if os(iOS)
  623. let phoneCredential = PhoneAuthProvider.provider().credential(withVerificationID: "id",
  624. verificationCode: "code")
  625. try await user.updatePhoneNumber(phoneCredential)
  626. let provider = PhoneAuthProvider.provider(auth: FirebaseAuth.Auth.auth())
  627. try await user.reauthenticate(with: provider as! FederatedAuthProvider, uiDelegate: nil)
  628. try await user.link(with: provider as! FederatedAuthProvider, uiDelegate: nil)
  629. #endif
  630. _ = try await user.getIDTokenResult()
  631. _ = try await user.getIDTokenResult(forcingRefresh: true)
  632. _ = try await user.getIDToken()
  633. _ = try await user.link(with: credential)
  634. _ = try await user.unlink(fromProvider: "abc")
  635. try await user.sendEmailVerification()
  636. try await user.sendEmailVerification(with: ActionCodeSettings())
  637. try await user.delete()
  638. try await user.sendEmailVerification(beforeUpdatingEmail: "email")
  639. try await user.sendEmailVerification(
  640. beforeUpdatingEmail: "email",
  641. actionCodeSettings: ActionCodeSettings()
  642. )
  643. try await changeRequest.commitChanges()
  644. }
  645. func userInfoProperties(userInfo: UserInfo) {
  646. let _: String = userInfo.providerID
  647. let _: String = userInfo.uid
  648. if let _: String = userInfo.displayName,
  649. let _: URL = userInfo.photoURL,
  650. let _: String = userInfo.email,
  651. let _: String = userInfo.phoneNumber {}
  652. }
  653. func userMetadataProperties(metadata: UserMetadata) {
  654. if let _: Date = metadata.lastSignInDate,
  655. let _: Date = metadata.creationDate {}
  656. }
  657. func regression13429(id: AuthProviderID) -> Int {
  658. switch id {
  659. case .apple:
  660. return 1
  661. case .email:
  662. return 2
  663. case .facebook:
  664. return 3
  665. case .gameCenter:
  666. return 4
  667. case .gitHub:
  668. return 5
  669. case .google:
  670. return 6
  671. case .phone:
  672. return 7
  673. case .custom("myCustom"):
  674. return 8
  675. default:
  676. return 9
  677. }
  678. }
  679. func regression13430(error: NSError) -> Int {
  680. if let firebaseError = error as? AuthErrorCode, firebaseError == .networkError {
  681. return 1
  682. }
  683. if let firebaseError = error as? AuthErrorCode, firebaseError.code == .invalidPhoneNumber {
  684. switch firebaseError.localizedDescription {
  685. case "TOO_SHORT":
  686. return 1
  687. case "TOO_LONG":
  688. return 1
  689. default:
  690. return 1
  691. }
  692. }
  693. return 2
  694. }
  695. }