Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions app/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
<string name="ota_restore_url" translatable="false">https://staging.commcarehq.org/ota_restore</string>
<!-- string name="PostURL">https://pact.dimagi.com/receiver/submit/pact</string -->
<!-- string name="ota_restore_url">https://pact.dimagi.com/provider/caselist</string -->
<string name="ConnectTokenURL">/o/token/</string>
<string name="ConnectHeartbeatURL">/users/heartbeat</string>
<!-- region: All strings for multiple apps and app-agnostic properties -->

<string name="your_comment">Your comment</string>
Expand Down Expand Up @@ -606,11 +604,6 @@
<string name="entity_list_finishing">Finishing list calculations…</string>

<string name="personalid_generic_error">A problem occurred, please configure your PersonalID account again by selecting Sign Up for Personal ID from the menu.</string>
<string name="ConnectMessageRetrieveMessagesURL" translatable="false">https://connectid.dimagi.com/messaging/retrieve_messages/</string>
<string name="ConnectMessageChannelConsentURL" translatable="false">https://connectid.dimagi.com/messaging/update_consent/</string>
<string name="ConnectMessageSendURL" translatable="false">https://connectid.dimagi.com/messaging/send_message/</string>
<string name="ConnectMessageConfirmURL" translatable="false">https://connectid.dimagi.com/messaging/update_received/</string>

<string name="personalid_login_via_connect">Ready to login!\n</string>
<string name="personalid_failed_to_login_with_connectid">We are facing an unrecoverable error when tying to login using your Personal ID. Please login with your password or restore your Personal ID login</string>
<string name="personalid_name_fragment_subtitle">Please enter your name as it appears on your government-issued identification</string>
Expand Down
204 changes: 28 additions & 176 deletions app/src/org/commcare/connect/MessageManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,10 @@
import org.commcare.android.database.connect.models.ConnectUserRecord;
import org.commcare.connect.database.ConnectMessagingDatabaseHelper;
import org.commcare.connect.database.ConnectUserDatabaseUtil;
import org.commcare.connect.network.ApiPersonalId;
import org.commcare.connect.network.IApiCallback;
import org.commcare.dalvik.R;
import org.commcare.connect.network.connectId.PersonalIdApiHandler;
import org.commcare.utils.PushNotificationApiHelper;
import org.javarosa.core.io.StreamsUtil;
import org.javarosa.core.services.Logger;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

Expand All @@ -37,164 +31,41 @@ public static void retrieveMessages(Context context, ConnectActivityCompleteList

public static void updateChannelConsent(Context context, ConnectMessagingChannelRecord channel,
ConnectActivityCompleteListener listener) {
IApiCallback callback = new IApiCallback() {
@Override
public void processSuccess(int responseCode, InputStream responseData) {
try {
String responseAsString = new String(
StreamsUtil.inputStreamToByteArray(responseData));

ConnectMessagingDatabaseHelper.storeMessagingChannel(context, channel);

if (channel.getConsented()) {
getChannelEncryptionKey(context, channel, listener);
} else {
listener.connectActivityComplete(true);
}
} catch (Exception e) {
listener.connectActivityComplete(false);
}
}

@Override

public void processFailure(int responseCode, String url, String errorBody) {
listener.connectActivityComplete(false);
}

@Override
public void processNetworkFailure() {
listener.connectActivityComplete(false);
}

ConnectUserRecord user = ConnectUserDatabaseUtil.getUser(context);
new PersonalIdApiHandler<Boolean>() {
@Override
public void processTokenUnavailableError() {
listener.connectActivityComplete(false);
}
public void onSuccess(Boolean success) {
ConnectMessagingDatabaseHelper.storeMessagingChannel(context, channel);

@Override
public void processTokenRequestDeniedError() {
listener.connectActivityComplete(false);
if (channel.getConsented()) {
getChannelEncryptionKey(context, channel, listener);
} else {
listener.connectActivityComplete(true);
}
}

@Override
public void processOldApiError() {
public void onFailure(PersonalIdOrConnectApiErrorCodes failureCode, Throwable t) {
listener.connectActivityComplete(false);
}
};

ConnectUserRecord user = ConnectUserDatabaseUtil.getUser(context);
boolean isBusy = !ApiPersonalId.updateChannelConsent(context, user.getUserId(), user.getPassword(),
channel.getChannelId(), channel.getConsented(), callback);

if (isBusy) {
Toast.makeText(context, R.string.busy_message, Toast.LENGTH_SHORT).show();
}
}.updateChannelConsent(context, user,channel);
}

public static void getChannelEncryptionKey(Context context, ConnectMessagingChannelRecord channel,
ConnectActivityCompleteListener listener) {
ConnectUserRecord user = ConnectUserDatabaseUtil.getUser(context);
ApiPersonalId.retrieveChannelEncryptionKey(context, user, channel.getChannelId(), channel.getKeyUrl(),
new IApiCallback() {
@Override
public void processSuccess(int responseCode, InputStream responseData) {
try (InputStream in = responseData) {
ApiPersonalId.handleReceivedChannelEncryptionKey(context, in, channel);
if (listener != null) {
listener.connectActivityComplete(true);
}
} catch (IOException e) {
Logger.exception("Exception occurred while handling received encryption key", e );
}
}

@Override
public void processFailure(int responseCode, String url, String errorBody) {
if (listener != null) {
listener.connectActivityComplete(false);
}
}

@Override
public void processNetworkFailure() {
if (listener != null) {
listener.connectActivityComplete(false);
}
}

@Override
public void processTokenUnavailableError() {
if (listener != null) {
listener.connectActivityComplete(false);
}
}

@Override
public void processTokenRequestDeniedError() {
if (listener != null) {
listener.connectActivityComplete(false);
}
}

@Override
public void processOldApiError() {
if (listener != null) {
listener.connectActivityComplete(false);
}
}
});
}

public static void updateReceivedMessages(Context context, ConnectActivityCompleteListener listener) {
List<ConnectMessagingMessageRecord> messages = ConnectMessagingDatabaseHelper.getMessagingMessagesAll(context);
List<ConnectMessagingMessageRecord> unsent = new ArrayList<>();
List<String> unsentIds = new ArrayList<>();
for (ConnectMessagingMessageRecord message : messages) {
if (!message.getIsOutgoing() && !message.getConfirmed()) {
unsent.add(message);
unsentIds.add(message.getMessageId());
new PersonalIdApiHandler<Boolean>() {
@Override
public void onSuccess(Boolean success) {
listener.connectActivityComplete(success);
}
}

if (unsentIds.size() > 0) {
ConnectUserRecord user = ConnectUserDatabaseUtil.getUser(context);
ApiPersonalId.confirmReceivedMessages(context, user.getUserId(), user.getPassword(), unsentIds, new IApiCallback() {
@Override
public void processSuccess(int responseCode, InputStream responseData) {
for (ConnectMessagingMessageRecord message : unsent) {
message.setConfirmed(true);
ConnectMessagingDatabaseHelper.storeMessagingMessage(context, message);
}
listener.connectActivityComplete(true);
}

@Override
public void processFailure(int responseCode, String url, String errorBody) {
listener.connectActivityComplete(false);
}

@Override
public void processNetworkFailure() {
listener.connectActivityComplete(false);
}

@Override
public void processTokenUnavailableError() {
listener.connectActivityComplete(false);
}

@Override
public void processTokenRequestDeniedError() {
listener.connectActivityComplete(false);
}

@Override
public void processOldApiError() {
listener.connectActivityComplete(false);
}
});
}
@Override
public void onFailure(PersonalIdOrConnectApiErrorCodes failureCode, Throwable t) {
Logger.log("Messaging", "Failed to retrieve encryption key: " + (t!=null ? t.getMessage():""));
listener.connectActivityComplete(false);
}
}.retrieveChannelEncryptionKey(context, user,channel);
}

public static void sendUnsentMessages(Context context) {
Expand All @@ -213,41 +84,22 @@ public static void sendMessage(Context context, ConnectMessagingMessageRecord me
ConnectActivityCompleteListener listener) {
ConnectMessagingChannelRecord channel = ConnectMessagingDatabaseHelper.getMessagingChannel(context, message.getChannelId());

if (channel.getKey().length() > 0) {
if (!channel.getKey().isEmpty()) {
ConnectUserRecord user = ConnectUserDatabaseUtil.getUser(context);
ApiPersonalId.sendMessagingMessage(context, user.getUserId(), user.getPassword(), message, channel.getKey(), new IApiCallback() {

new PersonalIdApiHandler<Boolean>() {
@Override
public void processSuccess(int responseCode, InputStream responseData) {
public void onSuccess(Boolean success) {
message.setConfirmed(true);
ConnectMessagingDatabaseHelper.storeMessagingMessage(context, message);
listener.connectActivityComplete(true);
}

@Override
public void processFailure(int responseCode, String url, String errorBody) {
listener.connectActivityComplete(false);
}

@Override
public void processNetworkFailure() {
listener.connectActivityComplete(false);
}

@Override
public void processTokenUnavailableError() {
listener.connectActivityComplete(false);
}

@Override
public void processTokenRequestDeniedError() {
listener.connectActivityComplete(false);
}

@Override
public void processOldApiError() {
public void onFailure(PersonalIdOrConnectApiErrorCodes failureCode, Throwable t) {
listener.connectActivityComplete(false);
}
});
}.sendMessagingMessage(context, user,message,channel);
} else {
Logger.log("Messaging", "Tried to send message but no encryption key");
}
Expand Down
11 changes: 6 additions & 5 deletions app/src/org/commcare/connect/PersonalIdManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@
import org.commcare.connect.database.ConnectDatabaseHelper;
import org.commcare.connect.database.ConnectJobUtils;
import org.commcare.connect.database.ConnectUserDatabaseUtil;
import org.commcare.connect.network.ConnectNetworkHelper;
import org.commcare.connect.network.ConnectSsoHelper;
import org.commcare.connect.network.ConnectSsoSyncHelper;
import org.commcare.connect.network.TokenDeniedException;
import org.commcare.connect.network.TokenExceptionHandler;
import org.commcare.connect.network.TokenUnavailableException;
import org.commcare.connect.workers.ConnectHeartbeatWorker;
import org.commcare.core.network.AuthInfo;
Expand Down Expand Up @@ -367,19 +368,19 @@ private void unlockAndLinkConnect(CommCareActivity<?> activity, ConnectLinkedApp
ConnectAppDatabaseUtil.storeApp(activity, linkedApp);

ConnectUserRecord user = ConnectUserDatabaseUtil.getUser(activity);
ConnectSsoHelper.retrieveHqSsoTokenAsync(activity, user, linkedApp, username, true,
ConnectSsoHelper.retrieveHqSsoToken(activity, user, linkedApp, username, true,
new ConnectSsoHelper.TokenCallback() {
public void tokenRetrieved(AuthInfo.TokenAuth token) {
callback.connectActivityComplete(false);
}

public void tokenUnavailable() {
ConnectNetworkHelper.handleTokenUnavailableException(activity);
TokenExceptionHandler.INSTANCE.handleTokenUnavailableException(activity);
callback.connectActivityComplete(false);
}

public void tokenRequestDenied() {
ConnectNetworkHelper.handleTokenDeniedException();
TokenExceptionHandler.INSTANCE.handleTokenDeniedException();
callback.connectActivityComplete(false);
}
});
Expand Down Expand Up @@ -548,7 +549,7 @@ public static AuthInfo.TokenAuth getHqTokenIfLinked(String username)
ConnectLinkedAppRecord appRecord = ConnectAppDatabaseUtil.getConnectLinkedAppRecord(manager.parentActivity,
seatedAppId, username);

return ConnectSsoHelper.retrieveHqSsoTokenSync(CommCareApplication.instance(), user, appRecord, username,
return ConnectSsoSyncHelper.INSTANCE.retrieveHqSsoTokenSync(CommCareApplication.instance(), user, appRecord, username,
false);
}

Expand Down
12 changes: 6 additions & 6 deletions app/src/org/commcare/connect/network/ApiConnect.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class ApiConnect {

public static void getConnectOpportunities(Context context, @NonNull ConnectUserRecord user, IApiCallback callback) {

ConnectSsoHelper.retrieveConnectIdTokenAsync(context, user, new ConnectSsoHelper.TokenCallback() {
ConnectSsoHelper.retrievePersonalIdToken(context, user, new ConnectSsoHelper.TokenCallback() {
@Override
public void tokenRetrieved(AuthInfo.TokenAuth token) {

Expand All @@ -49,7 +49,7 @@ public void tokenRequestDenied() {

public static void startLearnApp(Context context, @NonNull ConnectUserRecord user, int jobId, IApiCallback callback) {

ConnectSsoHelper.retrieveConnectIdTokenAsync(context, user, new ConnectSsoHelper.TokenCallback() {
ConnectSsoHelper.retrievePersonalIdToken(context, user, new ConnectSsoHelper.TokenCallback() {
@Override
public void tokenRetrieved(AuthInfo.TokenAuth token) {
HashMap<String, Object> params = new HashMap<>();
Expand Down Expand Up @@ -79,7 +79,7 @@ public void tokenRequestDenied() {

public static void getLearningAppProgress(Context context, @NonNull ConnectUserRecord user, int jobId, IApiCallback callback) {

ConnectSsoHelper.retrieveConnectIdTokenAsync(context, user, new ConnectSsoHelper.TokenCallback() {
ConnectSsoHelper.retrievePersonalIdToken(context, user, new ConnectSsoHelper.TokenCallback() {
@Override
public void tokenRetrieved(AuthInfo.TokenAuth token) {

Expand All @@ -105,7 +105,7 @@ public void tokenRequestDenied() {
}

public static void claimJob(Context context, @NonNull ConnectUserRecord user, int jobId, IApiCallback callback) {
ConnectSsoHelper.retrieveConnectIdTokenAsync(context, user, new ConnectSsoHelper.TokenCallback() {
ConnectSsoHelper.retrievePersonalIdToken(context, user, new ConnectSsoHelper.TokenCallback() {
@Override
public void tokenRetrieved(AuthInfo.TokenAuth token) {

Expand Down Expand Up @@ -135,7 +135,7 @@ public void tokenRequestDenied() {

public static void getDeliveries(Context context, @NonNull ConnectUserRecord user, int jobId, IApiCallback callback) {

ConnectSsoHelper.retrieveConnectIdTokenAsync(context, user, new ConnectSsoHelper.TokenCallback() {
ConnectSsoHelper.retrievePersonalIdToken(context, user, new ConnectSsoHelper.TokenCallback() {
@Override
public void tokenRetrieved(AuthInfo.TokenAuth token) {
String tokenAuth = HttpUtils.getCredential(token);
Expand All @@ -161,7 +161,7 @@ public void tokenRequestDenied() {

public static void setPaymentConfirmed(Context context, @NonNull ConnectUserRecord user, String paymentId, boolean confirmed, IApiCallback callback) {

ConnectSsoHelper.retrieveConnectIdTokenAsync(context, user, new ConnectSsoHelper.TokenCallback() {
ConnectSsoHelper.retrievePersonalIdToken(context, user, new ConnectSsoHelper.TokenCallback() {
@Override
public void tokenRetrieved(AuthInfo.TokenAuth token) {
HashMap<String, Object> params = new HashMap<>();
Expand Down
2 changes: 2 additions & 0 deletions app/src/org/commcare/connect/network/ApiEndPoints.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ public class ApiEndPoints {
public static final String CREDENTIALS = "/users/credentials";
public static final String RETRIEVE_NOTIFICATIONS = "/messaging/retrieve_notifications/";
public static final String UPDATE_NOTIFICATIONS = "/messaging/update_notification_received/";
public static final String CONNECT_MESSAGE_CHANNEL_CONSENT_URL = "/messaging/update_consent/";
public static final String CONNECT_MESSAGE_SEND_URL ="/messaging/send_message/";
public static final String RELEASE_TOGGLES = "/toggles";
}
Loading