add expiration timer to configuration message

pull/431/head
Brice-W 4 years ago
parent a840d61f4e
commit 2f0fe36905

@ -101,15 +101,17 @@ extension ConfigurationMessage {
public let encryptionKeyPair: ECKeyPair public let encryptionKeyPair: ECKeyPair
public let members: Set<String> public let members: Set<String>
public let admins: Set<String> public let admins: Set<String>
public let expirationTimer: UInt32
public var isValid: Bool { !members.isEmpty && !admins.isEmpty } public var isValid: Bool { !members.isEmpty && !admins.isEmpty }
public init(publicKey: String, name: String, encryptionKeyPair: ECKeyPair, members: Set<String>, admins: Set<String>) { public init(publicKey: String, name: String, encryptionKeyPair: ECKeyPair, members: Set<String>, admins: Set<String>, expirationTimer: UInt32) {
self.publicKey = publicKey self.publicKey = publicKey
self.name = name self.name = name
self.encryptionKeyPair = encryptionKeyPair self.encryptionKeyPair = encryptionKeyPair
self.members = members self.members = members
self.admins = admins self.admins = admins
self.expirationTimer = expirationTimer
} }
public required init?(coder: NSCoder) { public required init?(coder: NSCoder) {
@ -118,11 +120,13 @@ extension ConfigurationMessage {
let encryptionKeyPair = coder.decodeObject(forKey: "encryptionKeyPair") as! ECKeyPair?, let encryptionKeyPair = coder.decodeObject(forKey: "encryptionKeyPair") as! ECKeyPair?,
let members = coder.decodeObject(forKey: "members") as! Set<String>?, let members = coder.decodeObject(forKey: "members") as! Set<String>?,
let admins = coder.decodeObject(forKey: "admins") as! Set<String>? else { return nil } let admins = coder.decodeObject(forKey: "admins") as! Set<String>? else { return nil }
let expirationTimer = coder.decodeObject(forKey: "expirationTimer") as? UInt32 ?? 0
self.publicKey = publicKey self.publicKey = publicKey
self.name = name self.name = name
self.encryptionKeyPair = encryptionKeyPair self.encryptionKeyPair = encryptionKeyPair
self.members = members self.members = members
self.admins = admins self.admins = admins
self.expirationTimer = expirationTimer
} }
public func encode(with coder: NSCoder) { public func encode(with coder: NSCoder) {
@ -131,6 +135,7 @@ extension ConfigurationMessage {
coder.encode(encryptionKeyPair, forKey: "encryptionKeyPair") coder.encode(encryptionKeyPair, forKey: "encryptionKeyPair")
coder.encode(members, forKey: "members") coder.encode(members, forKey: "members")
coder.encode(admins, forKey: "admins") coder.encode(admins, forKey: "admins")
coder.encode(expirationTimer, forKey: "expirationTimer")
} }
public static func fromProto(_ proto: SNProtoConfigurationMessageClosedGroup) -> ClosedGroup? { public static func fromProto(_ proto: SNProtoConfigurationMessageClosedGroup) -> ClosedGroup? {
@ -146,7 +151,8 @@ extension ConfigurationMessage {
} }
let members = Set(proto.members.map { $0.toHexString() }) let members = Set(proto.members.map { $0.toHexString() })
let admins = Set(proto.admins.map { $0.toHexString() }) let admins = Set(proto.admins.map { $0.toHexString() })
let result = ClosedGroup(publicKey: publicKey, name: name, encryptionKeyPair: encryptionKeyPair, members: members, admins: admins) let expirationTimer = proto.expirationTimer
let result = ClosedGroup(publicKey: publicKey, name: name, encryptionKeyPair: encryptionKeyPair, members: members, admins: admins, expirationTimer: expirationTimer)
guard result.isValid else { return nil } guard result.isValid else { return nil }
return result return result
} }
@ -165,6 +171,7 @@ extension ConfigurationMessage {
} }
result.setMembers(members.map { Data(hex: $0) }) result.setMembers(members.map { Data(hex: $0) })
result.setAdmins(admins.map { Data(hex: $0) }) result.setAdmins(admins.map { Data(hex: $0) })
result.setExpirationTimer(expirationTimer)
do { do {
return try result.build() return try result.build()
} catch { } catch {

@ -207,8 +207,7 @@ extension MessageReceiver {
let allClosedGroupPublicKeys = storage.getUserClosedGroupPublicKeys() let allClosedGroupPublicKeys = storage.getUserClosedGroupPublicKeys()
for closedGroup in message.closedGroups { for closedGroup in message.closedGroups {
guard !allClosedGroupPublicKeys.contains(closedGroup.publicKey) else { continue } guard !allClosedGroupPublicKeys.contains(closedGroup.publicKey) else { continue }
handleNewClosedGroup(groupPublicKey: closedGroup.publicKey, name: closedGroup.name, encryptionKeyPair: closedGroup.encryptionKeyPair, handleNewClosedGroup(groupPublicKey: closedGroup.publicKey, name: closedGroup.name, encryptionKeyPair: closedGroup.encryptionKeyPair, members: [String](closedGroup.members), admins: [String](closedGroup.admins), expirationTimer: closedGroup.expirationTimer, messageSentTimestamp: message.sentTimestamp!, using: transaction)
members: [String](closedGroup.members), admins: [String](closedGroup.admins), expirationTimer: 0, messageSentTimestamp: message.sentTimestamp!, using: transaction)
} }
// Open groups // Open groups
for openGroupURL in message.openGroups { for openGroupURL in message.openGroups {

@ -22,7 +22,7 @@ extension ConfigurationMessage {
guard storage.isClosedGroup(groupPublicKey), guard storage.isClosedGroup(groupPublicKey),
let encryptionKeyPair = storage.getLatestClosedGroupEncryptionKeyPair(for: groupPublicKey) else { return } let encryptionKeyPair = storage.getLatestClosedGroupEncryptionKeyPair(for: groupPublicKey) else { return }
let closedGroup = ClosedGroup(publicKey: groupPublicKey, name: thread.groupModel.groupName!, encryptionKeyPair: encryptionKeyPair, let closedGroup = ClosedGroup(publicKey: groupPublicKey, name: thread.groupModel.groupName!, encryptionKeyPair: encryptionKeyPair,
members: Set(thread.groupModel.groupMemberIds), admins: Set(thread.groupModel.groupAdminIds)) members: Set(thread.groupModel.groupMemberIds), admins: Set(thread.groupModel.groupAdminIds), expirationTimer: thread.disappearingMessagesDuration(with: transaction))
closedGroups.insert(closedGroup) closedGroups.insert(closedGroup)
case .openGroup: case .openGroup:
if let v2OpenGroup = storage.getV2OpenGroup(for: thread.uniqueId!) { if let v2OpenGroup = storage.getV2OpenGroup(for: thread.uniqueId!) {

Loading…
Cancel
Save