mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.7 KiB
Swift
46 lines
1.7 KiB
Swift
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Foundation
|
|
import GRDB
|
|
import SessionSnodeKit
|
|
import SessionUtilitiesKit
|
|
|
|
public extension SnodeAPI.AuthenticationInfo {
|
|
init(
|
|
_ db: Database,
|
|
threadId: String,
|
|
using dependencies: Dependencies
|
|
) throws {
|
|
switch SessionId.Prefix(from: threadId) {
|
|
case .standard:
|
|
guard let keyPair: KeyPair = Identity.fetchUserEd25519KeyPair(db, using: dependencies) else {
|
|
throw SnodeAPIError.noKeyPair
|
|
}
|
|
|
|
self = .standard(pubkey: threadId, ed25519KeyPair: keyPair)
|
|
|
|
case .group:
|
|
struct GroupAuthData: Codable, FetchableRecord {
|
|
let groupIdentityPrivateKey: Data?
|
|
let authData: Data?
|
|
}
|
|
|
|
let authData: GroupAuthData? = try? ClosedGroup
|
|
.filter(id: threadId)
|
|
.select(.authData, .groupIdentityPrivateKey)
|
|
.asRequest(of: GroupAuthData.self)
|
|
.fetchOne(db)
|
|
|
|
switch (authData?.groupIdentityPrivateKey, authData?.authData) {
|
|
case (.some(let privateKey), _):
|
|
self = .groupAdmin(pubkey: threadId, ed25519SecretKey: Array(privateKey))
|
|
|
|
case (_, .some(let authData)): self = .groupMember(pubkey: threadId, authData: authData)
|
|
default: throw SnodeAPIError.invalidAuthentication
|
|
}
|
|
|
|
default: throw SnodeAPIError.invalidAuthentication
|
|
}
|
|
}
|
|
}
|