LoginDataFlow.swift 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import AuthenticationServices
  2. enum Login {
  3. enum Config {
  4. static let credentialsKey = "FreeAPS.Credentials"
  5. }
  6. }
  7. protocol LoginProvider: Provider {
  8. func authorize(credentials: ASAuthorizationAppleIDCredential)
  9. var credentials: ASAuthorizationAppleIDCredential? { get }
  10. }
  11. struct CredentialsWrapper: Codable {
  12. enum CodingKeys: String, CodingKey {
  13. case credentials
  14. }
  15. var credentials: ASAuthorizationAppleIDCredential
  16. init(_ credentials: ASAuthorizationAppleIDCredential) {
  17. self.credentials = credentials
  18. }
  19. func encode(to encoder: Encoder) throws {
  20. var container = encoder.container(keyedBy: CodingKeys.self)
  21. let data = try NSKeyedArchiver.archivedData(withRootObject: credentials, requiringSecureCoding: true)
  22. try container.encode(data, forKey: .credentials)
  23. }
  24. init(from decoder: Decoder) throws {
  25. let container = try decoder.container(keyedBy: CodingKeys.self)
  26. let data = try container.decode(Data.self, forKey: .credentials)
  27. credentials = try (NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? ASAuthorizationAppleIDCredential)!
  28. }
  29. }