Merge & update for core changes

This commit is contained in:
nielsandriesse 2020-09-18 11:07:44 +10:00
commit 45a2ea996b
8 changed files with 26 additions and 20 deletions

View File

@ -524,7 +524,7 @@
<service <service
android:name="org.thoughtcrime.securesms.loki.api.PushNotificationService" android:name="org.thoughtcrime.securesms.loki.api.PushNotificationService"
android:enabled="true" android:enabled="true"
android:exported="true"> android:exported="false">
<intent-filter> <intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" /> <action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter> </intent-filter>
@ -681,7 +681,9 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<!-- Session --> <!-- Session -->
<receiver android:name="org.thoughtcrime.securesms.loki.api.BackgroundPollListener" > <receiver
android:name="org.thoughtcrime.securesms.loki.api.BackgroundPollListener"
android:enabled="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter> </intent-filter>

View File

@ -484,7 +484,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
Context context = this; Context context = this;
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(task -> { FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(task -> {
if (!task.isSuccessful()) { if (!task.isSuccessful()) {
Log.w(TAG, "getInstanceId failed", task.getException()); Log.w("Loki", "FirebaseInstanceId.getInstance().getInstanceId() failed." + task.getException());
return; return;
} }
String token = task.getResult().getToken(); String token = task.getResult().getToken();

View File

@ -9,7 +9,6 @@ import org.whispersystems.libsignal.logging.Log
import org.whispersystems.signalservice.internal.util.JsonUtil import org.whispersystems.signalservice.internal.util.JsonUtil
import org.whispersystems.signalservice.loki.api.PushNotificationAcknowledgement import org.whispersystems.signalservice.loki.api.PushNotificationAcknowledgement
import org.whispersystems.signalservice.loki.api.onionrequests.OnionRequestAPI import org.whispersystems.signalservice.loki.api.onionrequests.OnionRequestAPI
import java.io.IOException
object LokiPushNotificationManager { object LokiPushNotificationManager {
private val tokenExpirationInterval = 12 * 60 * 60 * 1000 private val tokenExpirationInterval = 12 * 60 * 60 * 1000
@ -17,8 +16,8 @@ object LokiPushNotificationManager {
private val server by lazy { private val server by lazy {
PushNotificationAcknowledgement.shared.server PushNotificationAcknowledgement.shared.server
} }
private val PNServerPublicKey by lazy { private val pnServerPublicKey by lazy {
PushNotificationAcknowledgement.shared.PNServerPublicKey PushNotificationAcknowledgement.pnServerPublicKey
} }
enum class ClosedGroupOperation { enum class ClosedGroupOperation {
@ -39,15 +38,14 @@ object LokiPushNotificationManager {
val url = "$server/unregister" val url = "$server/unregister"
val body = RequestBody.create(MediaType.get("application/json"), JsonUtil.toJson(parameters)) val body = RequestBody.create(MediaType.get("application/json"), JsonUtil.toJson(parameters))
val request = Request.Builder().url(url).post(body) val request = Request.Builder().url(url).post(body)
val promise = OnionRequestAPI.sendOnionRequest(request.build(), server, PNServerPublicKey).map { json -> OnionRequestAPI.sendOnionRequest(request.build(), server, pnServerPublicKey).map { json ->
val code = json["code"] as? Int val code = json["code"] as? Int
if (code != null && code != 0) { if (code != null && code != 0) {
TextSecurePreferences.setIsUsingFCM(context, false) TextSecurePreferences.setIsUsingFCM(context, false)
} else { } else {
Log.d("Loki", "Couldn't disable FCM due to error: ${json["message"] as? String ?: "null"}.") Log.d("Loki", "Couldn't disable FCM due to error: ${json["message"] as? String ?: "null"}.")
} }
} }.fail { exception ->
promise.fail { exception ->
Log.d("Loki", "Couldn't disable FCM due to error: ${exception}.") Log.d("Loki", "Couldn't disable FCM due to error: ${exception}.")
} }
// Unsubscribe from all closed groups // Unsubscribe from all closed groups
@ -67,7 +65,7 @@ object LokiPushNotificationManager {
val url = "$server/register" val url = "$server/register"
val body = RequestBody.create(MediaType.get("application/json"), JsonUtil.toJson(parameters)) val body = RequestBody.create(MediaType.get("application/json"), JsonUtil.toJson(parameters))
val request = Request.Builder().url(url).post(body) val request = Request.Builder().url(url).post(body)
val promise = OnionRequestAPI.sendOnionRequest(request.build(), server, PNServerPublicKey).map { json -> OnionRequestAPI.sendOnionRequest(request.build(), server, pnServerPublicKey).map { json ->
val code = json["code"] as? Int val code = json["code"] as? Int
if (code != null && code != 0) { if (code != null && code != 0) {
TextSecurePreferences.setIsUsingFCM(context, true) TextSecurePreferences.setIsUsingFCM(context, true)
@ -76,8 +74,7 @@ object LokiPushNotificationManager {
} else { } else {
Log.d("Loki", "Couldn't register for FCM due to error: ${json["message"] as? String ?: "null"}.") Log.d("Loki", "Couldn't register for FCM due to error: ${json["message"] as? String ?: "null"}.")
} }
} }.fail { exception ->
promise.fail { exception ->
Log.d("Loki", "Couldn't register for FCM due to error: ${exception}.") Log.d("Loki", "Couldn't register for FCM due to error: ${exception}.")
} }
// Subscribe to all closed groups // Subscribe to all closed groups
@ -94,13 +91,12 @@ object LokiPushNotificationManager {
val url = "$server/${operation.rawValue}" val url = "$server/${operation.rawValue}"
val body = RequestBody.create(MediaType.get("application/json"), JsonUtil.toJson(parameters)) val body = RequestBody.create(MediaType.get("application/json"), JsonUtil.toJson(parameters))
val request = Request.Builder().url(url).post(body) val request = Request.Builder().url(url).post(body)
val promise = OnionRequestAPI.sendOnionRequest(request.build(), server, PNServerPublicKey).map { json -> OnionRequestAPI.sendOnionRequest(request.build(), server, pnServerPublicKey).map { json ->
val code = json["code"] as? Int val code = json["code"] as? Int
if (code == null || code == 0) { if (code == null || code == 0) {
Log.d("Loki", "Couldn't subscribe/unsubscribe closed group: $closedGroupPublicKey due to error: ${json["message"] as? String ?: "null"}.") Log.d("Loki", "Couldn't subscribe/unsubscribe closed group: $closedGroupPublicKey due to error: ${json["message"] as? String ?: "null"}.")
} }
} }.fail { exception ->
promise.fail { exception ->
Log.d("Loki", "Couldn't subscribe/unsubscribe closed group: $closedGroupPublicKey due to error: ${exception}.") Log.d("Loki", "Couldn't subscribe/unsubscribe closed group: $closedGroupPublicKey due to error: ${exception}.")
} }
} }

View File

@ -1,5 +1,11 @@
package org.thoughtcrime.securesms.loki.api package org.thoughtcrime.securesms.loki.api
import android.R
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Intent
import android.graphics.Color
import android.media.RingtoneManager
import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage import com.google.firebase.messaging.RemoteMessage
import org.thoughtcrime.securesms.jobs.PushContentReceiveJob import org.thoughtcrime.securesms.jobs.PushContentReceiveJob
@ -9,6 +15,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope
import org.whispersystems.signalservice.internal.util.Base64 import org.whispersystems.signalservice.internal.util.Base64
import org.whispersystems.signalservice.loki.api.MessageWrapper import org.whispersystems.signalservice.loki.api.MessageWrapper
class PushNotificationService : FirebaseMessagingService() { class PushNotificationService : FirebaseMessagingService() {
override fun onNewToken(token: String) { override fun onNewToken(token: String) {
@ -19,7 +26,8 @@ class PushNotificationService : FirebaseMessagingService() {
} }
override fun onMessageReceived(message: RemoteMessage) { override fun onMessageReceived(message: RemoteMessage) {
val base64EncodedData = message.data["ENCRYPTED_DATA"] Log.d("Loki", "Received a push notification.")
val base64EncodedData = message.data?.get("ENCRYPTED_DATA")
val data = base64EncodedData?.let { Base64.decode(it) } val data = base64EncodedData?.let { Base64.decode(it) }
if (data != null) { if (data != null) {
try { try {

View File

@ -129,7 +129,7 @@ class ClosedGroupUpdateMessageSendJob private constructor(parameters: Parameters
// isClosedGroup can always be false as it's only used in the context of legacy closed groups // isClosedGroup can always be false as it's only used in the context of legacy closed groups
messageSender.sendMessage(0, address, udAccess.get().targetUnidentifiedAccess, messageSender.sendMessage(0, address, udAccess.get().targetUnidentifiedAccess,
Date().time, serializedContentMessage, false, ttl, false, Date().time, serializedContentMessage, false, ttl, false,
useFallbackEncryption, false, false) useFallbackEncryption, false, false, false)
} catch (e: Exception) { } catch (e: Exception) {
Log.d("Loki", "Failed to send closed group update message to: $destination due to error: $e.") Log.d("Loki", "Failed to send closed group update message to: $destination due to error: $e.")
} }

View File

@ -35,7 +35,7 @@ import java.io.IOException
import java.util.* import java.util.*
object ClosedGroupsProtocol { object ClosedGroupsProtocol {
val isSharedSenderKeysEnabled = false val isSharedSenderKeysEnabled = true
val groupSizeLimit = 10 val groupSizeLimit = 10
public fun createClosedGroup(context: Context, name: String, members: Collection<String>): Promise<String, Exception> { public fun createClosedGroup(context: Context, name: String, members: Collection<String>): Promise<String, Exception> {

View File

@ -56,7 +56,7 @@ class NullMessageSendJob private constructor(parameters: Parameters, private val
try { try {
messageSender.sendMessage(0, address, udAccess.get().targetUnidentifiedAccess, messageSender.sendMessage(0, address, udAccess.get().targetUnidentifiedAccess,
Date().time, serializedContentMessage, false, ttl, false, Date().time, serializedContentMessage, false, ttl, false,
false, false, false) false, false, false, false)
} catch (e: Exception) { } catch (e: Exception) {
Log.d("Loki", "Failed to send null message to: $publicKey due to error: $e.") Log.d("Loki", "Failed to send null message to: $publicKey due to error: $e.")
throw e throw e

View File

@ -72,7 +72,7 @@ class SessionRequestMessageSendJob private constructor(parameters: Parameters, p
try { try {
messageSender.sendMessage(0, address, udAccess.get().targetUnidentifiedAccess, messageSender.sendMessage(0, address, udAccess.get().targetUnidentifiedAccess,
Date().time, serializedContentMessage, false, ttl, false, Date().time, serializedContentMessage, false, ttl, false,
true, false, false) true, false, false, false)
} catch (e: Exception) { } catch (e: Exception) {
Log.d("Loki", "Failed to send session request to: $publicKey due to error: $e.") Log.d("Loki", "Failed to send session request to: $publicKey due to error: $e.")
throw e throw e