@ -150,7 +150,7 @@ extension MessageReceiver {
for closedGroup in message . closedGroups {
guard ! allClosedGroupPublicKeys . contains ( closedGroup . publicKey ) else { continue }
handleNewClosedGroup ( groupPublicKey : closedGroup . publicKey , name : closedGroup . name , encryptionKeyPair : closedGroup . encryptionKeyPair ,
members : [ String ] ( closedGroup . members ) , admins : [ String ] ( closedGroup . admins ) , using: transaction )
members : [ String ] ( closedGroup . members ) , admins : [ String ] ( closedGroup . admins ) , messageSentTimestamp: message . sentTimestamp ! , using: transaction )
}
let allOpenGroups = Set ( storage . getAllUserOpenGroups ( ) . keys )
for openGroupURL in message . openGroups {
@ -262,10 +262,11 @@ extension MessageReceiver {
let groupPublicKey = publicKeyAsData . toHexString ( )
let members = membersAsData . map { $0 . toHexString ( ) }
let admins = adminsAsData . map { $0 . toHexString ( ) }
handleNewClosedGroup ( groupPublicKey : groupPublicKey , name : name , encryptionKeyPair : encryptionKeyPair , members : members , admins : admins , using : transaction )
handleNewClosedGroup ( groupPublicKey : groupPublicKey , name : name , encryptionKeyPair : encryptionKeyPair ,
members : members , admins : admins , messageSentTimestamp : message . sentTimestamp ! , using : transaction )
}
private static func handleNewClosedGroup ( groupPublicKey : String , name : String , encryptionKeyPair : ECKeyPair , members : [ String ] , admins : [ String ] , using transaction : Any ) {
private static func handleNewClosedGroup ( groupPublicKey : String , name : String , encryptionKeyPair : ECKeyPair , members : [ String ] , admins : [ String ] , messageSentTimestamp: UInt64 , using transaction : Any ) {
let transaction = transaction as ! YapDatabaseReadWriteTransaction
// C r e a t e t h e g r o u p
let groupID = LKGroupUtilities . getEncodedClosedGroupIDAsData ( groupPublicKey )
@ -282,6 +283,8 @@ extension MessageReceiver {
Storage . shared . addClosedGroupPublicKey ( groupPublicKey , using : transaction )
// S t o r e t h e k e y p a i r
Storage . shared . addClosedGroupEncryptionKeyPair ( encryptionKeyPair , for : groupPublicKey , using : transaction )
// S t o r e t h e f o r m a t i o n t i m e s t a m p
Storage . shared . setClosedGroupFormationTimestamp ( to : messageSentTimestamp , for : groupPublicKey , using : transaction )
// N o t i f y t h e P N s e r v e r
let _ = PushNotificationAPI . performOperation ( . subscribe , for : groupPublicKey , publicKey : getUserHexEncodedPublicKey ( ) )
// N o t i f y t h e u s e r
@ -459,8 +462,10 @@ extension MessageReceiver {
}
let group = thread . groupModel
// C h e c k t h a t t h e m e s s a g e i s n ' t f r o m b e f o r e t h e g r o u p w a s c r e a t e d
guard Double ( message . sentTimestamp ! ) > thread . creationDate . timeIntervalSince1970 * 1000 else {
return SNLog ( " Ignoring closed group update from before thread was created. " )
if let formationTimestamp = Storage . shared . getClosedGroupFormationTimestamp ( for : groupPublicKey ) {
guard message . sentTimestamp ! > formationTimestamp else {
return SNLog ( " Ignoring closed group update from before thread was created. " )
}
}
// C h e c k t h a t t h e s e n d e r i s a m e m b e r o f t h e g r o u p
guard Set ( group . groupMemberIds ) . contains ( message . sender ! ) else {