TwitterAuthProvider.swift 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2023 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. import Foundation
  15. /// Utility class for constructing Twitter Sign In credentials.
  16. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  17. @objc(FIRTwitterAuthProvider) open class TwitterAuthProvider: NSObject {
  18. /// A string constant identifying the Twitter identity provider.
  19. @objc public static let id = "twitter.com"
  20. /// Creates an `AuthCredential` for a Twitter sign in.
  21. /// - Parameter token: The Twitter OAuth token.
  22. /// - Parameter secret: The Twitter OAuth secret.
  23. /// - Returns: An AuthCredential containing the Twitter credentials.
  24. @objc open class func credential(withToken token: String, secret: String) -> AuthCredential {
  25. return TwitterAuthCredential(withToken: token, secret: secret)
  26. }
  27. @available(*, unavailable)
  28. @objc override public init() {
  29. fatalError("This class is not meant to be initialized.")
  30. }
  31. }
  32. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  33. @objc(FIRTwitterAuthCredential) class TwitterAuthCredential: AuthCredential, NSSecureCoding {
  34. let token: String
  35. let secret: String
  36. init(withToken token: String, secret: String) {
  37. self.token = token
  38. self.secret = secret
  39. super.init(provider: TwitterAuthProvider.id)
  40. }
  41. override func prepare(_ request: VerifyAssertionRequest) {
  42. request.providerAccessToken = token
  43. request.providerOAuthTokenSecret = secret
  44. }
  45. // MARK: Secure Coding
  46. static var supportsSecureCoding = true
  47. func encode(with coder: NSCoder) {
  48. coder.encode(token, forKey: "token")
  49. coder.encode(secret, forKey: "secret")
  50. }
  51. required init?(coder: NSCoder) {
  52. guard let token = coder.decodeObject(of: NSString.self, forKey: "token") as? String,
  53. let secret = coder.decodeObject(of: NSString.self, forKey: "secret") as? String else {
  54. return nil
  55. }
  56. self.token = token
  57. self.secret = secret
  58. super.init(provider: TwitterAuthProvider.id)
  59. }
  60. }