/* * private static void sendMediaPush(Context context, Recipients recipients, long messageId) * { * JobManager jobManager = ApplicationContext.getInstance(context).getJobManager(); * jobManager.add(new PushMediaSendJob(context, messageId, recipients.getPrimaryRecipient().getNumber())); * } * * private static void sendGroupPush(Context context, Recipients recipients, long messageId, long filterRecipientId) * { * JobManager jobManager = ApplicationContext.getInstance(context).getJobManager(); * jobManager.add(new PushGroupSendJob(context, messageId, recipients.getPrimaryRecipient().getNumber(), filterRecipientId)); * } * * private static void sendSms(Context context, Recipients recipients, long messageId) * { * JobManager jobManager = ApplicationContext.getInstance(context).getJobManager(); * jobManager.add(new SmsSendJob(context, messageId, recipients.getPrimaryRecipient().getName())); * } * * private static void sendMms(Context context, long messageId) * { * JobManager jobManager = ApplicationContext.getInstance(context).getJobManager(); * jobManager.add(new MmsSendJob(context, messageId)); * } */ private async static Task <bool> isPushTextSend(Recipients recipients, bool keyExchange) { try { if (!TextSecurePreferences.isPushRegistered()) { return(false); } if (keyExchange) { return(false); } Recipient recipient = recipients.getPrimaryRecipient(); String destination = Utils.canonicalizeNumber(recipient.getNumber()); return(await isPushDestination(destination)); } catch (InvalidNumberException e) { //Log.w(TAG, e); return(false); } }
public static TextSecureAccountManager createManager() { return(new TextSecureAccountManager(PUSH_URL, new TextSecurePushTrustStore(), TextSecurePreferences.getLocalNumber(), TextSecurePreferences.getPushServerPassword(), USER_AGENT)); }
protected override async Task <string> ExecuteAsync() { //if (!TextSecurePreferences.isPushRegistered()) return; int availableKeys = await App.Current.accountManager.getPreKeysCount(); if (availableKeys >= PREKEY_MINIMUM && TextSecurePreferences.isSignedPreKeyRegistered()) { Debug.WriteLine("Available keys sufficient: " + availableKeys); return(""); } List <PreKeyRecord> preKeyRecords = await PreKeyUtil.generatePreKeys(/*context, masterSecret*/); PreKeyRecord lastResortKeyRecord = await PreKeyUtil.generateLastResortKey(/*context, masterSecret*/); IdentityKeyPair identityKey = IdentityKeyUtil.GetIdentityKeyPair(/*context, masterSecret*/); SignedPreKeyRecord signedPreKeyRecord = PreKeyUtil.generateSignedPreKey(/*context, masterSecret, */ identityKey); Debug.WriteLine("Registering new prekeys..."); await App.Current.accountManager.setPreKeys(identityKey.getPublicKey(), lastResortKeyRecord, signedPreKeyRecord, preKeyRecords); TextSecurePreferences.setSignedPreKeyRegistered(true); //App.Current.Worker.AddTaskActivities(new CleanPreKeysTask()); return(""); }
/* * private static boolean isPushMediaSend(Context context, Recipients recipients) * { * try * { * if (!TextSecurePreferences.isPushRegistered(context)) * { * return false; * } * * if (recipients.getRecipientsList().size() > 1) * { * return false; * } * * Recipient recipient = recipients.getPrimaryRecipient(); * String destination = Util.canonicalizeNumber(context, recipient.getNumber()); * * return isPushDestination(context, destination); * } * catch (InvalidNumberException e) * { * Log.w(TAG, e); * return false; * } * } * * private static boolean isGroupPushSend(Recipients recipients) * { * return GroupUtil.isEncodedGroup(recipients.getPrimaryRecipient().getNumber()); * }*/ private static bool isSelfSend(Recipients recipients) { try { if (!TextSecurePreferences.isPushRegistered()) { return(false); } if (!recipients.IsSingleRecipient) { return(false); } if (recipients.IsGroupRecipient) { return(false); } String e164number = Utils.canonicalizeNumber(recipients.getPrimaryRecipient().getNumber()); return(TextSecurePreferences.getLocalNumber().Equals(e164number)); } catch (InvalidNumberException e) { //Log.w("MessageSender", e); return(false); } }
private void markAsVerified(String number, String password, String signalingKey) { TextSecurePreferences.setVerifying(false); TextSecurePreferences.setPushRegistered(true); TextSecurePreferences.setLocalNumber(number); TextSecurePreferences.setPushServerPassword(password); TextSecurePreferences.setSignalingKey(signalingKey); TextSecurePreferences.setSignedPreKeyRegistered(true); //TextSecurePreferences.setPromptedPushRegistration(true); }
private async Task <bool> handleRegistration(string receivedSmsVerificationCode) { try { var registrationId = KeyHelper.generateRegistrationId(false); TextSecurePreferences.setLocalRegistrationId((int)registrationId); await App.Current.accountManager.verifyAccountWithCode(receivedSmsVerificationCode, signalingKey, registrationId, false); //await PushHelper.getInstance().OpenChannelAndUpload(); // also updates push channel id Recipient self = DatabaseFactory.getRecipientDatabase().GetSelfRecipient(number); IdentityKeyUtil.generateIdentityKeys(); IdentityKeyPair identityKey = IdentityKeyUtil.GetIdentityKeyPair(); List <PreKeyRecord> records = await PreKeyUtil.generatePreKeys(); PreKeyRecord lastResort = await PreKeyUtil.generateLastResortKey(); SignedPreKeyRecord signedPreKey = await PreKeyUtil.generateSignedPreKey(identityKey); await App.Current.accountManager.setPreKeys(identityKey.getPublicKey(), lastResort, signedPreKey, records); DatabaseFactory.getIdentityDatabase().SaveIdentity(self.getRecipientId(), identityKey.getPublicKey()); //await DirectoryHelper.refreshDirectory(App.Current.accountManager, TextSecurePreferences.getLocalNumber()); markAsVerified(number, password, signalingKey); } catch (RateLimitException ex) { return(false); } catch (AuthorizationFailedException ex) { return(false); } catch (PushNetworkException ex) { return(false); } catch (NonSuccessfulResponseCodeException ex) { return(false); } catch (Exception ex) { return(false); //throw new Exception(ex.Message); } return(true); }
protected override async Task <string> ExecuteAsync() { try { String sessionKey = TextSecurePreferences.getSignalingKey(); TextSecureEnvelope envelope = new TextSecureEnvelope(data, sessionKey); handle(envelope, true); } catch (/*IOException | InvalidVersion*/ Exception e) { Debug.WriteLine($"{this.GetType().Name}: Error: {e.Message}"); } return(""); }
protected override string Execute() { if (TextSecurePreferences.isSignedPreKeyRegistered()) { Log.Warn("Signed prekey already registered..."); return(""); } IdentityKeyPair identityKeyPair = IdentityKeyUtil.GetIdentityKeyPair(); var signedPreKeyRecord = PreKeyUtil.generateSignedPreKey(identityKeyPair); App.Current.accountManager.setSignedPreKey(signedPreKeyRecord); TextSecurePreferences.setSignedPreKeyRegistered(true); return(""); }
public async Task <Recipients> getGroupMembers(byte[] groupId, bool includeSelf) { String localNumber = TextSecurePreferences.getLocalNumber(); List <String> members = await getCurrentMembers(groupId); List <Recipient> recipients = new List <Recipient>(); foreach (String member in members) { if (!includeSelf && member.Equals(localNumber)) { continue; } recipients.AddRange(RecipientFactory.getRecipientsFromString(member, false) .getRecipientsList()); } return(RecipientFactory.getRecipientsFor(recipients, false)); }
public uint GetLocalRegistrationId() { return((uint)TextSecurePreferences.GetLocalRegistrationId()); }
private bool IsFirstLaunch() { return(TextSecurePreferences.getLocalNumber() == String.Empty); }
public String GetSignalingKey() { return(TextSecurePreferences.getSignalingKey()); }
public String GetPassword() { return(TextSecurePreferences.getPushServerPassword()); }
public String GetUser() { return(TextSecurePreferences.getLocalNumber()); }
public static SignalServiceAccountManager createManager() { return(new SignalServiceAccountManager(PUSH_URLS, TextSecurePreferences.getLocalNumber(), TextSecurePreferences.getPushServerPassword(), USER_AGENT)); }
public static String canonicalizeNumber(String number) { String localNumber = TextSecurePreferences.getLocalNumber(); return(PhoneNumberFormatter.formatNumber(number, localNumber)); }
private void handleMessage(SignalServiceEnvelope envelope, May <long> smsMessageId) { try { SignalProtocolStore axolotlStore = new TextSecureAxolotlStore(); SignalServiceAddress localAddress = new SignalServiceAddress(TextSecurePreferences.getLocalNumber()); SignalServiceCipher cipher = new SignalServiceCipher(localAddress, axolotlStore); SignalServiceContent content = cipher.decrypt(envelope); if (content.getDataMessage().HasValue) { SignalServiceDataMessage message = content.getDataMessage().ForceGetValue(); if (message.isEndSession()) { handleEndSessionMessage(envelope, message, smsMessageId); } else if (message.isGroupUpdate()) { handleGroupMessage(envelope, message, smsMessageId); } else if (message.getAttachments().HasValue) { handleMediaMessage(envelope, message, smsMessageId); } else { handleTextMessage(envelope, message, smsMessageId); } } /*else if (content.getSyncMessage().HasValue) TODO: SYNC enable * { * TextSecureSyncMessage syncMessage = content.getSyncMessage().ForceGetValue(); * * if (syncMessage.getSent().HasValue) handleSynchronizeSentMessage(masterSecret, syncMessage.getSent().ForceGetValue(), smsMessageId); * else if (syncMessage.getRequest().HasValue) handleSynchronizeRequestMessage(masterSecret, syncMessage.getRequest().ForceGetValue()); * }*/ if (envelope.isPreKeySignalMessage()) { App.Current.Worker.AddTaskActivities(new RefreshPreKeysTask()); //ApplicationContext.getInstance(context).getJobManager().add(new RefreshPreKeysJob(context)); } } catch (InvalidVersionException e) { Log.Warn(e); handleInvalidVersionMessage(envelope, smsMessageId); } catch (InvalidMessageException e) { Log.Warn(e); handleCorruptMessage(envelope, smsMessageId); } catch (InvalidKeyIdException e) { Log.Warn(e); handleCorruptMessage(envelope, smsMessageId); } catch (InvalidKeyException e) { Log.Warn(e); handleCorruptMessage(envelope, smsMessageId); } catch (NoSessionException e) { Log.Warn(e); handleNoSessionMessage(envelope, smsMessageId); } catch (LegacyMessageException e) { Log.Warn(e); handleLegacyMessage(envelope, smsMessageId); } catch (DuplicateMessageException e) { Log.Warn(e); handleDuplicateMessage(envelope, smsMessageId); } catch (libsignal.exceptions.UntrustedIdentityException e) { Log.Warn(e); handleUntrustedIdentityMessage(envelope, smsMessageId); } catch (Exception e) { Log.Warn($"Unexpected Exception"); } }
private void handleMessage(/*MasterSecretUnion masterSecret, */ TextSecureEnvelope envelope /*, Optional<Long> smsMessageId*/) { try { AxolotlStore axolotlStore = new TextSecureAxolotlStore(); TextSecureAddress localAddress = new TextSecureAddress(TextSecurePreferences.getLocalNumber()); TextSecureCipher cipher = new TextSecureCipher(localAddress, axolotlStore); TextSecureContent content = cipher.decrypt(envelope); if (content.getDataMessage().HasValue) { TextSecureDataMessage message = content.getDataMessage().ForceGetValue(); if (message.isEndSession()) { handleEndSessionMessage(/*masterSecret, */ envelope, message /*, smsMessageId*/); } //else if (message.isGroupUpdate()) handleGroupMessage(masterSecret, envelope, message, smsMessageId); //else if (message.getAttachments().isPresent()) handleMediaMessage(masterSecret, envelope, message, smsMessageId); else { handleTextMessage(/*masterSecret, */ envelope, message /*, smsMessageId*/); } } /*else if (content.getSyncMessage().HasValue) TODO: SYNC enable * { * TextSecureSyncMessage syncMessage = content.getSyncMessage().ForceGetValue(); * * if (syncMessage.getSent().HasValue) handleSynchronizeSentMessage(masterSecret, syncMessage.getSent().ForceGetValue(), smsMessageId); * else if (syncMessage.getRequest().HasValue) handleSynchronizeRequestMessage(masterSecret, syncMessage.getRequest().ForceGetValue()); * }*/ if (envelope.isPreKeyWhisperMessage()) { App.Current.Worker.AddTaskActivities(new RefreshPreKeysTask()); //ApplicationContext.getInstance(context).getJobManager().add(new RefreshPreKeysJob(context)); } } catch (InvalidVersionException e) { //Log.w(TAG, e); //handleInvalidVersionMessage(masterSecret, envelope, smsMessageId); } /* catch (InvalidMessageException | InvalidKeyIdException | InvalidKeyException | MmsException e) { * Log.w(TAG, e); * handleCorruptMessage(masterSecret, envelope, smsMessageId); * } catch (NoSessionException e) * { * Log.w(TAG, e); * handleNoSessionMessage(masterSecret, envelope, smsMessageId); * } * catch (LegacyMessageException e) * { * Log.w(TAG, e); * handleLegacyMessage(masterSecret, envelope, smsMessageId); * } * catch (DuplicateMessageException e) * { * Log.w(TAG, e); * handleDuplicateMessage(masterSecret, envelope, smsMessageId); * } * catch (UntrustedIdentityException e) * { * Log.w(TAG, e); * handleUntrustedIdentityMessage(masterSecret, envelope, smsMessageId); * }*/ }
/// <summary> /// Invoked when the application is launched normally by the end user. Other entry points /// will be used such as when the application is launched to open a specific file. /// </summary> /// <param name="e">Details about the launch request and process.</param> protected override async void OnLaunched(LaunchActivatedEventArgs e) { #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = false; } #endif DispatcherHelper.Initialize(); if (TextSecurePreferences.getLocalNumber() == string.Empty) { Debug.WriteLine("Launching first launch experience"); OnFirstLaunched(e); return; } Debug.WriteLine("Launching..."); /*if (TextSecurePreferences.isPushRegistered() == true) * { * TaskHelper.getInstance().RegisterPushReceiver(); * * if (channel == null) * { * var response = await PushHelper.getInstance().OpenChannelAndUpload(); * channel = response.Channel; * } * * }*/ accountManager = TextSecureCommunicationFactory.createManager(); Worker = new TaskWorker(); Worker.Start(); //await DirectoryHelper.refreshDirectory(); // var task = new EchoActivity("ASDFFDSA"); var websocketTask = new WebsocketTask(); Task.Factory.StartNew(() => { try { var messageReceiver = TextSecureCommunicationFactory.createReceiver(); var pipe = messageReceiver.createMessagePipe(); pipe.MessageReceived += OnMessageRecevied; } catch (Exception ex) { Debug.WriteLine("Failed asd:" + ex.Message); } }); //Worker.AddTaskActivities(websocketTask); /*if (rootFrame.Content == null) * { * // When the navigation stack isn't restored navigate to the first page, * // configuring the new page by passing required information as a navigation * // parameter * rootFrame.Navigate(typeof(MainPage), e.Arguments); * }*/ // Ensure the current window is active Frame rootFrame = Window.Current.Content as Frame; _frame = rootFrame; if (rootFrame == null) { rootFrame = new Frame(); } rootFrame.Navigate(typeof(ExtendedSplash), e.Arguments); Window.Current.Content = rootFrame; Window.Current.Activate(); BackButtonManager.RegisterFrame(rootFrame, true, true, true); }