mirror of https://github.com/oxen-io/session-ios
Added PreKeyRecord <-> Contact pubkey mapping.
parent
d130415973
commit
a90aa82710
@ -1 +1 @@
|
|||||||
Subproject commit b3aff1eb5bab24ca0bfc545e9b8b1589fa79abe3
|
Subproject commit 21ee23a8e22e91459835b682d821f862f75be233
|
@ -0,0 +1,29 @@
|
|||||||
|
#import "OWSPrimaryStorage.h"
|
||||||
|
#import "PreKeyRecord.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface OWSPrimaryStorage (Loki)
|
||||||
|
|
||||||
|
# pragma mark - Prekey for contacts
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if we have PreKeyRecord for the given contact.
|
||||||
|
|
||||||
|
@param pubKey The hex encoded public ket of the contact.
|
||||||
|
@return Whether we have a prekey or not.
|
||||||
|
*/
|
||||||
|
- (BOOL)hasPreKeyForContact:(NSString *)pubKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Get the PreKeyRecord associated with the given contact.
|
||||||
|
If the record doesn't exist then this will generate a new one.
|
||||||
|
|
||||||
|
@param pubKey The hex encoded public key of the contact.
|
||||||
|
@return The record associated with the contact.
|
||||||
|
*/
|
||||||
|
- (PreKeyRecord *)getPreKeyForContact:(NSString *)pubKey;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@ -0,0 +1,48 @@
|
|||||||
|
#import "OWSPrimaryStorage+Loki.h"
|
||||||
|
#import "OWSPrimaryStorage+PreKeyStore.h"
|
||||||
|
#import "YapDatabaseConnection+OWS.h"
|
||||||
|
|
||||||
|
#define LokiPreKeyContactCollection @"LokiPreKeyContactCollection"
|
||||||
|
|
||||||
|
@implementation OWSPrimaryStorage (Loki)
|
||||||
|
|
||||||
|
# pragma mark - Prekey for contacts
|
||||||
|
|
||||||
|
- (BOOL)hasPreKeyForContact:(NSString *)pubKey {
|
||||||
|
int preKeyId = [self.dbReadWriteConnection intForKey:pubKey inCollection:LokiPreKeyContactCollection];
|
||||||
|
return preKeyId > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (PreKeyRecord *)getPreKeyForContact:(NSString *)pubKey {
|
||||||
|
OWSAssertDebug(pubKey.length > 0);
|
||||||
|
int preKeyId = [self.dbReadWriteConnection intForKey:pubKey inCollection:LokiPreKeyContactCollection];
|
||||||
|
|
||||||
|
// If we don't have an id then generate and store a new one
|
||||||
|
if (preKeyId < 1) {
|
||||||
|
return [self generateAndStorePreKeyForContact:pubKey];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the pre key otherwise just generate a new one
|
||||||
|
@try {
|
||||||
|
return [self throws_loadPreKey:preKeyId];
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
OWSLogWarn(@"[Loki] New prekey had to be generated for %@", pubKey);
|
||||||
|
return [self generateAndStorePreKeyForContact:pubKey];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Generate prekey for a contact and store it
|
||||||
|
- (PreKeyRecord *)generateAndStorePreKeyForContact:(NSString *)pubKey {
|
||||||
|
OWSAssertDebug(pubKey.length > 0);
|
||||||
|
|
||||||
|
NSArray<PreKeyRecord *> *records = [self generatePreKeyRecords:1];
|
||||||
|
[self storePreKeyRecords:records];
|
||||||
|
|
||||||
|
OWSAssertDebug(records.count > 0);
|
||||||
|
PreKeyRecord *record = [records firstObject];
|
||||||
|
[self.dbReadWriteConnection setInt:record.Id forKey:pubKey inCollection:LokiPreKeyContactCollection];
|
||||||
|
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
Loading…
Reference in New Issue