Implement login with scanned QR code flows

This commit is contained in:
Stefan Ceriu
2022-10-11 15:56:37 +03:00
committed by Stefan Ceriu
parent bbd3470659
commit fa3866ea76
19 changed files with 442 additions and 139 deletions
@@ -17,23 +17,78 @@
import Foundation
struct QRLoginCode: Codable {
var user: String?
var initiator: QRLoginDataInitiatorDevice?
var rendezvous: QRLoginRendezvous?
let rendezvous: RendezvousDetails
let intent: String
}
enum QRLoginDataInitiatorDevice: String, Codable {
case new = "new_device"
case existing = "existing_device"
}
struct QRLoginRendezvous: Codable {
var transport: QRLoginRendezvousTransportDetails
var algorithm: String?
struct RendezvousDetails: Codable {
let algorithm: String
var transport: RendezvousTransportDetails?
var key: String?
}
struct QRLoginRendezvousTransportDetails: Codable {
var type: String
var uri: String?
struct RendezvousTransportDetails: Codable {
let type: String
let uri: String
}
struct RendezvousMessage: Codable {
let iv: String
let ciphertext: String
}
struct QRLoginRendezvousPayload: Codable {
let type: `Type`
var intent: Intent?
var outcome: Outcome?
var protocols: [`Protocol`]?
var `protocol`: `Protocol`?
var homeserver: String?
var user: String?
var loginToken: String?
var deviceId: String?
var deviceKey: String?
var verifyingDeviceId: String?
var verifyingDeviceKey: String?
var masterKey: String?
enum CodingKeys: String, CodingKey {
case type
case intent
case outcome
case homeserver
case user
case protocols
case `protocol`
case loginToken = "login_token"
case deviceId = "device_id"
case deviceKey = "device_key"
case verifyingDeviceId = "verifying_device_id"
case verifyingDeviceKey = "verifying_device_key"
case masterKey = "master_key"
}
enum `Type`: String, Codable {
case loginStart = "m.login.start"
case loginProgress = "m.login.progress"
case loginFinish = "m.login.finish"
}
enum Intent: String, Codable {
case loginStart = "login.start"
}
enum Outcome: String, Codable {
case success = "success"
case declined = "declined"
}
enum `Protocol`: String, Codable {
case loginToken = "login_token"
}
}