From 512dd7f71699279bc5a33118de0e75cc13ba6391 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 3 Apr 2023 13:42:52 -0500 Subject: [PATCH] Check google play license and send when registering with cheogram.com --- .../conversations/ui/WelcomeActivity.java | 1 - .../android/CheogramLicenseChecker.java | 9 ++++++- .../android/CheogramLicenseChecker.java | 9 ++++++- .../conversations/entities/Conversation.java | 24 +++++++++++++++---- .../siacs/conversations/utils/BiConsumer.java | 6 +++++ 5 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 src/main/java/eu/siacs/conversations/utils/BiConsumer.java diff --git a/src/cheogram/java/eu/siacs/conversations/ui/WelcomeActivity.java b/src/cheogram/java/eu/siacs/conversations/ui/WelcomeActivity.java index 9016fd17779976cb0ea82e1219cbad1c02de85e6..9f91e0b687c8299ba15b8ab8e9573e0d74337e2c 100644 --- a/src/cheogram/java/eu/siacs/conversations/ui/WelcomeActivity.java +++ b/src/cheogram/java/eu/siacs/conversations/ui/WelcomeActivity.java @@ -115,7 +115,6 @@ public class WelcomeActivity extends XmppActivity implements XmppConnectionServi @Override protected void onCreate(final Bundle savedInstanceState) { - new com.cheogram.android.CheogramLicenseChecker(this).checkLicense(); if (getResources().getBoolean(R.bool.portrait_only)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } diff --git a/src/conversationsPlaystore/java/com/cheogram/android/CheogramLicenseChecker.java b/src/conversationsPlaystore/java/com/cheogram/android/CheogramLicenseChecker.java index 836993bb537089527b005acee19a949c1ad841c3..750a41ecdf576da4abfe4dfb18c3ed100612e724 100644 --- a/src/conversationsPlaystore/java/com/cheogram/android/CheogramLicenseChecker.java +++ b/src/conversationsPlaystore/java/com/cheogram/android/CheogramLicenseChecker.java @@ -8,13 +8,17 @@ import android.util.Log; import com.google.android.vending.licensing.*; +import eu.siacs.conversations.utils.BiConsumer; + import eu.siacs.conversations.R; public class CheogramLicenseChecker implements LicenseCheckerCallback { private final LicenseChecker mChecker; + private final BiConsumer mCallback; - public CheogramLicenseChecker(Context context) { + public CheogramLicenseChecker(Context context, BiConsumer callback) { mChecker = new LicenseChecker(context, new StrictPolicy(), context.getResources().getString(R.string.licensePublicKey)); + mCallback = callback; } public void checkLicense() { @@ -24,15 +28,18 @@ public class CheogramLicenseChecker implements LicenseCheckerCallback { @Override public void dontAllow(int reason) { Log.d("CheogramLicenseChecker", "dontAllow: " + reason); + mCallback.accept(null, null); } @Override public void applicationError(int errorCode) { Log.d("CheogramLicenseChecker", "applicationError: " + errorCode); + mCallback.accept(null, null); } @Override public void allow(int reason, ResponseData data, String signedData, String signature) { Log.d("CheogramLicenseChecker", "" + reason + " / " + data + " / " + signedData + " / " + signature); + mCallback.accept(signedData, signature); } } diff --git a/src/free/java/com/cheogram/android/CheogramLicenseChecker.java b/src/free/java/com/cheogram/android/CheogramLicenseChecker.java index 78aa146c24d9cc5dc5ae97b9b25556e5e2202a1c..fcf87a8041d1f585ded3fea1d420ee8b09b094e4 100644 --- a/src/free/java/com/cheogram/android/CheogramLicenseChecker.java +++ b/src/free/java/com/cheogram/android/CheogramLicenseChecker.java @@ -3,10 +3,17 @@ package com.cheogram.android; import android.content.Context; import android.util.Log; +import eu.siacs.conversations.utils.BiConsumer; + public class CheogramLicenseChecker { - public CheogramLicenseChecker(Context context) { } + private BiConsumer mCallback; + + public CheogramLicenseChecker(Context context, BiConsumer callback) { + mCallback = callback; + } public void checkLicense() { Log.d("CheogramLicenseChecker", "skipping license checks in free build"); + mCallback.accept(null, null); } } diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 068fafb4cb029054ba1ec25387cfd2ee80155974..28899827f9ebdab85ea0f183c0d54c67985e00ce 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -1391,11 +1391,27 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl c.setAttribute("node", command.getAttribute("node")); c.setAttribute("action", "execute"); View v = mPager; - xmppConnectionService.sendIqPacket(getAccount(), packet, (a, iq) -> { - v.post(() -> { - session.updateWithResponse(iq); + + if (command.getAttribute("node").equals("jabber:iq:register") && packet.getTo().asBareJid().equals(Jid.of("cheogram.com"))) { + new com.cheogram.android.CheogramLicenseChecker(v.getContext(), (signedData, signature) -> { + if (signedData != null && signature != null) { + c.addChild("license", "https://ns.cheogram.com/google-play").setContent(signedData); + c.addChild("licenseSignature", "https://ns.cheogram.com/google-play").setContent(signature); + } + + xmppConnectionService.sendIqPacket(getAccount(), packet, (a, iq) -> { + v.post(() -> { + session.updateWithResponse(iq); + }); + }); + }).checkLicense(); + } else { + xmppConnectionService.sendIqPacket(getAccount(), packet, (a, iq) -> { + v.post(() -> { + session.updateWithResponse(iq); + }); }); - }); + } sessions.add(session); notifyDataSetChanged(); diff --git a/src/main/java/eu/siacs/conversations/utils/BiConsumer.java b/src/main/java/eu/siacs/conversations/utils/BiConsumer.java new file mode 100644 index 0000000000000000000000000000000000000000..a03c7a678daa837fccf4eef2d22a57dcd4c999b2 --- /dev/null +++ b/src/main/java/eu/siacs/conversations/utils/BiConsumer.java @@ -0,0 +1,6 @@ +package eu.siacs.conversations.utils; + +// Based on java.util.function.BiConsumer to avoid Android 24 dependency +public interface BiConsumer { + void accept(T t, U u); +}