Merge branch 'master' into proof-of-work-ui

pull/7/head
Mikunj Varsani 6 years ago committed by GitHub
commit 512b71a9d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -96,17 +96,6 @@ final class OnboardingKeyPairViewController : OnboardingBaseViewController {
setUpViewHierarchy() setUpViewHierarchy()
handleModeChanged() // Perform initial update handleModeChanged() // Perform initial update
updateKeyPair() updateKeyPair()
// Test
// ================
let _ = LokiMessagingAPI.retrieveAllMessages().done { result in
print(result.task.originalRequest!)
print(result.task.response!)
}
let _ = LokiMessagingAPI.sendTestMessage().done { result in
print(result.task.originalRequest!)
print(result.task.response!)
}
// ================
} }
private func setUpViewHierarchy() { private func setUpViewHierarchy() {

@ -14,8 +14,8 @@ public extension ECKeyPair {
// Check that it's a valid hexadecimal encoding // Check that it's a valid hexadecimal encoding
let allowedCharacters = CharacterSet(charactersIn: "0123456789ABCDEF") let allowedCharacters = CharacterSet(charactersIn: "0123456789ABCDEF")
guard candidate.uppercased().unicodeScalars.allSatisfy({ allowedCharacters.contains($0) }) else { return false } guard candidate.uppercased().unicodeScalars.allSatisfy({ allowedCharacters.contains($0) }) else { return false }
// Check that it has either length 33 and a leading "05" or length 32 // Check that it has either length 66 and a leading "05" or length 64
guard (candidate.count == 33 && candidate.hasPrefix("05")) || candidate.count == 32 else { return false } guard (candidate.count == 66 && candidate.hasPrefix("05")) || candidate.count == 64 else { return false }
// It appears to be a valid public key // It appears to be a valid public key
return true return true
} }

@ -1,6 +1,6 @@
import PromiseKit import PromiseKit
public struct LokiMessagingAPI { @objc public final class LokiMessagingAPI : NSObject {
private static var baseURL: String { return textSecureServerURL } private static var baseURL: String { return textSecureServerURL }
private static var port: String { return "8080" } private static var port: String { return "8080" }
@ -9,39 +9,30 @@ public struct LokiMessagingAPI {
// MARK: Types // MARK: Types
private enum Method : String { private enum Method : String {
case retrieveAllMessages = "retrieve" case retrieveAllMessages = "retrieve"
case send = "store" case sendMessage = "store"
} }
public typealias Response = TSNetworkManager.NetworkManagerResult public typealias RawResponse = TSNetworkManager.NetworkManagerResult
// MARK: Lifecycle // MARK: Lifecycle
private init() { } override private init() { }
// MARK: API // MARK: API
private static func invoke(_ method: Method, parameters: [String:String] = [:]) -> Promise<Response> { private static func invoke(_ method: Method, parameters: [String:String] = [:]) -> (request: TSRequest, promise: Promise<RawResponse>) {
let url = URL(string: "\(baseURL):\(port)/\(apiVersion)/storage_rpc")! let url = URL(string: "\(baseURL):\(port)/\(apiVersion)/storage_rpc")!
let request = TSRequest(url: url, method: "POST", parameters: [ "method" : method.rawValue, "params" : parameters ]) let request = TSRequest(url: url, method: "POST", parameters: [ "method" : method.rawValue, "params" : parameters ])
return TSNetworkManager.shared().makePromise(request: request) return (request, TSNetworkManager.shared().makePromise(request: request))
} }
public static func sendTestMessage() -> Promise<Response> { @objc public static func sendMessage(_ message: [String:String]) -> TSRequest {
let hour = 60 * 60 * 1000 return invoke(.sendMessage, parameters: message).request
let ttl = String(4 * 24 * hour)
let parameters = [
"pubKey" : "0371e72be8dd42ff77105e474a3ac26a503d017fb4562409c639eaf5965f5b31", // TODO: Receiver's public key
"ttl" : ttl,
"nonce" : "AAAAAAAA5rs=", // TODO: Proof of work
"timestamp" : "1556259498201", // TODO: Message send time
"data" : "CAESvgMKA1BVVBIPL2FwaS92MS9tZXNzYWdlGqIDCGUSQjA1MDM3MWU3MmJlOGRkNDJmZjc3MTA1ZTQ3NGEzYWMyNmE1MDNkMDE3ZmI0NTYyNDA5YzYzOWVhZjU5NjVmNWIzYzgBKK3QrcKlLULQAlxclJTbzKeQjJPfPlvo0VdoNw+O6kmpAUAKz2Mmz0YDHnhIsFgdWlBIoudqxVDu7swq5Z4cUqMfcQ5Z0b03/dVjkmFYo79Hzv7wkmRlPsfqAOVLBgV06sLVl+C5d8EmDtfH+k2iT62HnD8fub8tIxHn2l0MCefB4kO8tbA4dl/n/IXlvRAFS7OPJiq3jLyykyZkauAW7SVdDBAO6exJlNyOHTgSaHF924V3a/s3BK0useVMbzJSun9cx68Jm3WGERMFqrd75X70PN933zUSHedBAmMFW1Mvecko1G854tfNPZllP7OO/o+6XrQm8hMoe0Zo3POelrXwRdX88jp9VSEio/Yugq9MMcBuMsU5G0ePK5ZJMNfGLwExGSLY4br3sYpJz5yO7slpq2GgPuO6t9hWwIfzWynvNIfVtDxBkLVSV5XZU7720p/KP6kqZWCGHyCsAQ==" // TODO: Encrypted content
]
return invoke(.send, parameters: parameters)
} }
public static func retrieveAllMessages() -> Promise<Response> { public static func retrieveAllMessages() -> Promise<RawResponse> {
let parameters = [ let parameters = [
"pubKey" : OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey, "pubKey" : OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey,
"lastHash" : "" "lastHash" : "" // TODO: Implement
] ]
return invoke(.retrieveAllMessages, parameters: parameters) return invoke(.retrieveAllMessages, parameters: parameters).promise
} }
} }

@ -929,7 +929,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
NSString *destination = message[@"destination"]; NSString *destination = message[@"destination"];
NSString *data = message[@"content"]; NSString *data = message[@"content"];
NSString *_Nullable nonce = [ProofOfWork calculateWithData:data pubKey:destination timestamp:timestamp.unsignedIntegerValue ttl:ttl.integerValue]; NSString *nonce = [ProofOfWork calculateWithData:data pubKey:destination timestamp:timestamp.unsignedIntegerValue ttl:ttl.integerValue];
// Return our timestamp along with the nonce // Return our timestamp along with the nonce
// These will help us identify which nonce belongs to which message // These will help us identify which nonce belongs to which message
@ -943,7 +944,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
[promises addObject:promise]; [promises addObject:promise];
} }
// Wait for all the PoW Calculations to finish // Wait for all the PoW calculations to finish
return PMKWhen(promises); return PMKWhen(promises);
} }

@ -366,7 +366,7 @@ NS_ASSUME_NONNULL_BEGIN
// Params for our message server // Params for our message server
lokiMessage[@"pubKey"] = message[@"destination"]; lokiMessage[@"pubKey"] = message[@"destination"];
lokiMessage[@"data"] = message[@"content"]; lokiMessage[@"data"] = message[@"content"];
lokiMessage[@"ttl"] = ttl; lokiMessage[@"ttl"] = [ttl stringValue];
NSDictionary *_Nullable nonce = [self getNonceFromArray:nonceArray forMessage:message]; NSDictionary *_Nullable nonce = [self getNonceFromArray:nonceArray forMessage:message];
if (nonce) { if (nonce) {
@ -380,7 +380,6 @@ NS_ASSUME_NONNULL_BEGIN
return modifiedMessages; return modifiedMessages;
} }
+ (NSDictionary *_Nullable)getNonceFromArray:(NSArray *)nonceArray forMessage:(NSDictionary *)message { + (NSDictionary *_Nullable)getNonceFromArray:(NSArray *)nonceArray forMessage:(NSDictionary *)message {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"destination == %@ AND deviceId == %d", message[@"destination"], message[@"destinationDeviceId"]]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"destination == %@ AND deviceId == %d", message[@"destination"], message[@"destinationDeviceId"]];
NSArray *filtered = [nonceArray filteredArrayUsingPredicate:predicate]; NSArray *filtered = [nonceArray filteredArrayUsingPredicate:predicate];
@ -406,8 +405,7 @@ NS_ASSUME_NONNULL_BEGIN
NSString *path = [textSecureMessagesAPI stringByAppendingString:recipientId]; NSString *path = [textSecureMessagesAPI stringByAppendingString:recipientId];
NSDictionary *parameters = [lokiMessages objectAtIndex:0]; NSDictionary *parameters = [lokiMessages objectAtIndex:0];
TSRequest *request = [TSRequest requestWithUrl:[NSURL URLWithString:path] method:@"PUT" parameters:parameters]; return [LokiMessagingAPI sendMessage:parameters];
return request;
} }
+ (TSRequest *)submitMessageRequestWithRecipient:(NSString *)recipientId + (TSRequest *)submitMessageRequestWithRecipient:(NSString *)recipientId

Loading…
Cancel
Save