Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f4361df
- Implemented api call validating firebase id token
jaypanchal-13 May 23, 2025
a17b4ae
Merge remote-tracking branch 'origin/master' into CCCT-1159-send-requ…
jaypanchal-13 May 23, 2025
1a53a93
- Updated Implementation of firebase otp as per comment
jaypanchal-13 May 27, 2025
acb7bc4
- Updated Implementation of firebase otp as per comment
jaypanchal-13 May 27, 2025
86fe13e
- Implemented api call validating firebase id token
jaypanchal-13 May 23, 2025
a4d7c59
- Updated Implementation of firebase otp as per comment
jaypanchal-13 May 27, 2025
e5b88ba
- Updated Implementation of firebase otp as per comment
jaypanchal-13 May 27, 2025
c807b71
Merge remote-tracking branch 'origin/CCCT-1159-send-request-connectid…
jaypanchal-13 May 27, 2025
5b7adc0
- Updated Implementation of firebase otp as per comment
jaypanchal-13 May 27, 2025
814a8b0
- Added missing code
jaypanchal-13 May 27, 2025
537ebc6
- solved comments
jaypanchal-13 May 28, 2025
65454ad
Merge remote-tracking branch 'refs/remotes/origin/master' into CCCT-1…
jaypanchal-13 May 28, 2025
26c4f2a
- Added token in header and updated api failure handler
jaypanchal-13 May 28, 2025
5bab78d
- Added token in header and updated api failure handler
jaypanchal-13 May 28, 2025
8648d4b
Merge branch 'master' into CCCT-1159-send-request-connectid-verify-fi…
shubham1g5 May 28, 2025
5761c4f
Merge remote-tracking branch 'refs/remotes/origin/master' into CCCT-1…
jaypanchal-13 May 29, 2025
d55f867
- Added token in header and updated api failure handler
jaypanchal-13 May 29, 2025
69e88c2
Merge remote-tracking branch 'refs/remotes/origin/master' into CCCT-1…
jaypanchal-13 May 29, 2025
5cd584f
- Updated comment
jaypanchal-13 May 29, 2025
96bc1e5
- removed unused
jaypanchal-13 May 29, 2025
22de22a
Merge remote-tracking branch 'origin/master' into CCCT-1159-send-requ…
jaypanchal-13 May 30, 2025
acdaa81
Merge remote-tracking branch 'origin/master' into CCCT-1159-send-requ…
jaypanchal-13 May 30, 2025
20390ac
- Added error toast when firebase id token is not matched with server
jaypanchal-13 May 30, 2025
ff845d6
- Added error toast when firebase id token is not matched with server
jaypanchal-13 May 30, 2025
dcfdf31
Merge remote-tracking branch 'origin/master' into CCCT-1159-send-requ…
jaypanchal-13 Jun 2, 2025
406820a
- Resolved comments
jaypanchal-13 Jun 2, 2025
4685516
- Resolved comments
jaypanchal-13 Jun 2, 2025
a99e588
- Resolved comments
jaypanchal-13 Jun 2, 2025
e457fdd
- Refactor
jaypanchal-13 Jun 2, 2025
988ebf9
- Refactor
jaypanchal-13 Jun 2, 2025
1419405
remove error parser to simplify code, just show the error at the moment
shubham1g5 Jun 2, 2025
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
5 changes: 5 additions & 0 deletions app/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,11 @@ License.
<string name="connect_phone_not_found">Numéro de téléphone introuvable</string>
<string name="connect_phone_change_error">Erreur lors du changement de numéro de téléphone</string>
<string name="connect_password_button">D\'ACCORD</string>
<string name="connect_otp_sent">OTP envoyé</string>
<string name="connect_otp_verified">OTP vérifié</string>
<string name="connect_otp_error">Erreur OTP</string>
<string name="connect_enter_otp">Entrez OTP</string>
<string name="connect_otp_verification_failed">La vérification OTP a échoué en raison de</string>
<string name="connect_backup_code_title_set">Choisissez le code PIN</string>
<string name="connect_backup_code_title_confirm">Confirmer le code PIN</string>
<string name="connect_backup_code">Entrez le code PIN</string>
Expand Down
5 changes: 5 additions & 0 deletions app/res/values-pt/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,11 @@
<string name="connect_phone_not_found">Número de telefone não encontrado</string>
<string name="connect_phone_change_error">Erro ao alterar o número de telefone</string>
<string name="connect_password_button">OK</string>
<string name="connect_otp_sent">OTP enviado</string>
<string name="connect_otp_verified">OTP verificado</string>
<string name="connect_otp_error">Erro de OTP</string>
<string name="connect_enter_otp">Digite OTP</string>
<string name="connect_otp_verification_failed">A verificação do OTP falhou devido a</string>
<string name="connect_backup_code_title_set">Código de recuperação</string>
<string name="connect_backup_code_title_confirm">Confirmar código de recuperação</string>
<string name="connect_backup_code_message_title">Código de recuperação ConnectID</string>
Expand Down
5 changes: 5 additions & 0 deletions app/res/values-sw/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,11 @@
<string name="connect_phone_not_found">Nambari ya simu haijapatikana</string>
<string name="connect_phone_change_error">Hitilafu katika kubadilisha nambari ya simu</string>
<string name="connect_password_button">Sawa</string>
<string name="connect_otp_sent">OTP Imetumwa</string>
<string name="connect_otp_verified">OTP Imethibitishwa</string>
<string name="connect_otp_error">Hitilafu ya OTP</string>
<string name="connect_enter_otp">Ingiza OTP</string>
<string name="connect_otp_verification_failed">Uthibitishaji wa OTP umeshindwa kutokana na</string>
<string name="connect_backup_code_title_set">Chagua PIN</string>
<string name="connect_backup_code_title_confirm">Thibitisha PIN</string>
<string name="connect_backup_code">Weka PIN</string>
Expand Down
5 changes: 5 additions & 0 deletions app/res/values-ti/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,11 @@
<string name="connect_phone_not_found">ቁጽሪ ስልኪ ሞባይል ኣይተረኽበን።</string>
<string name="connect_phone_change_error">ቁጽሪ ስልኪ ቁፅሪ ሞባይል ኣብ ምቕያር ጌጋ</string>
<string name="connect_password_button">እሺ</string>
<string name="connect_otp_sent">ኦቲፒ ተላኢኹ</string>
<string name="connect_otp_verified">OTP ተረጋጊጹ</string>
<string name="connect_otp_error">OTP ጌጋ</string>
<string name="connect_enter_otp">ኣብ ኦቲፒ ኣቲኻ</string>
<string name="connect_otp_verification_failed">OTP ምርግጋጽ ብሰንኪ...</string>
<string name="connect_backup_code_title_set">ናይ ምሕዋይ ሕጊ</string>
<string name="connect_backup_code_title_confirm">ናይ ምሕዋይ ኮድ ኣረጋግጽ</string>
<string name="connect_backup_code_message_title">ConnectID ናይ ምሕዋይ ኮድ</string>
Expand Down
6 changes: 6 additions & 0 deletions app/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,12 @@
<string name="connect_phone_change_error">Error changing phone number</string>
<string name="connect_password_button">OK</string>

<string name="connect_otp_sent">OTP Sent</string>
<string name="connect_otp_verified">OTP Verified</string>
<string name="connect_otp_error">OTP Error</string>
<string name="connect_enter_otp">Enter OTP</string>
<string name="connect_otp_verification_failed">OTP verification failed due to </string>

<string name="connect_backup_code_title_set">Backup Code</string>
<string name="connect_backup_code_title_confirm">Confirm Backup Code</string>
<string name="connect_backup_code_message_title">PersonalId Backup Code</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/org/commcare/connect/PersonalIdManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ public void processSuccess(int responseCode, InputStream responseData) {
}

@Override
public void processFailure(int responseCode) {
public void processFailure(int responseCode, @Nullable InputStream errorResponse) {
Logger.log("ERROR", String.format(Locale.getDefault(), "Failed: %d", responseCode));
}

Expand Down
18 changes: 16 additions & 2 deletions app/src/org/commcare/connect/network/ApiPersonalId.java
Original file line number Diff line number Diff line change
Expand Up @@ -228,12 +228,15 @@ public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<Respo
callback.processSuccess(response.code(), responseStream);
} catch (IOException e) {
// Handle error when reading the stream
callback.processFailure(response.code());
callback.processFailure(response.code(), null);
}
} else {
// Handle validation errors
logNetworkError(response);
callback.processFailure(response.code());
if (response.errorBody() != null){
callback.processFailure(response.code(), response.errorBody().byteStream());
}
callback.processFailure(response.code(), null);
}
}

Expand Down Expand Up @@ -294,6 +297,17 @@ public static void startConfiguration(Context context, Map<String, String> body,
callApi(context, call, callback);
}

public static void validateFirebaseIdToken(String token,Context context, String firebaseIdToken, IApiCallback callback) {
HashMap<String, String> params = new HashMap<>();
params.put("token", firebaseIdToken);
AuthInfo authInfo = new AuthInfo.TokenAuth(token);
String tokenAuth = HttpUtils.getCredential(authInfo);
Objects.requireNonNull(tokenAuth);
ApiService apiService = ApiClient.getClientApi();
Call<ResponseBody> call = apiService.validateFirebaseIdToken(tokenAuth,params);
callApi(context, call, callback);
}

public static void addOrVerifyName(Context context, String name, String token, IApiCallback callback) {
HashMap<String, String> params = new HashMap<>();
params.put("name", name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ public void processClientError(int responseCode) {
ConnectSsoHelper.discardTokens(context, null);
handler.processTokenUnavailableError();
} else {
handler.processFailure(responseCode);
handler.processFailure(responseCode, null);
}
}
}
Expand All @@ -353,7 +353,7 @@ public void processServerError(int responseCode) {
CrashUtil.reportException(new Exception(message));

//500 error for internal server error
handler.processFailure(responseCode);
handler.processFailure(responseCode, null);
}

@Override
Expand All @@ -363,7 +363,7 @@ public void processOther(int responseCode) {
String message = String.format(Locale.getDefault(), "Call:%s\nResponse code:%d", url, responseCode);
CrashUtil.reportException(new Exception(message));

handler.processFailure(responseCode);
handler.processFailure(responseCode, null);
}

@Override
Expand All @@ -373,7 +373,7 @@ public void handleIOException(IOException exception) {
handler.processNetworkFailure();
} else {
Logger.exception("IO Exception during API call", exception);
handler.processFailure(-1);
handler.processFailure(-1, null);
}
}

Expand Down
4 changes: 3 additions & 1 deletion app/src/org/commcare/connect/network/IApiCallback.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package org.commcare.connect.network;

import androidx.annotation.Nullable;

import java.io.InputStream;

/**
* Interface for callbacks when network request completes
*/
public interface IApiCallback {
void processSuccess(int responseCode, InputStream responseData);
void processFailure(int responseCode);
void processFailure(int responseCode, @Nullable InputStream errorResponse);
void processNetworkFailure();
void processOldApiError();
void processTokenUnavailableError();
Expand Down
40 changes: 32 additions & 8 deletions app/src/org/commcare/connect/network/PersonalIdApiHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

import android.app.Activity;
import android.content.Context;
import android.widget.Toast;

import androidx.annotation.Nullable;

import org.commcare.CommCareApplication;
import org.commcare.android.database.connect.models.PersonalIdSessionData;
import org.commcare.connect.network.parser.AddOrVerifyNameParser;
import org.commcare.connect.network.parser.CompleteProfileResponseParser;
Expand Down Expand Up @@ -40,18 +44,32 @@ private IApiCallback createCallback(PersonalIdSessionData sessionData,
return new IApiCallback() {
@Override
public void processSuccess(int responseCode, InputStream responseData) {
try (InputStream in = responseData) {
JSONObject json = new JSONObject(new String(StreamsUtil.inputStreamToByteArray(in)));
parser.parse(json, sessionData);
onSuccess(sessionData);
} catch (IOException | JSONException e) {
Logger.exception("Error parsing API response", e);
onFailure(PersonalIdApiErrorCodes.JSON_PARSING_ERROR);
if (parser != null) {
try (InputStream in = responseData) {
JSONObject json = new JSONObject(new String(StreamsUtil.inputStreamToByteArray(in)));
parser.parse(json, sessionData);
} catch (IOException | JSONException e) {
Logger.exception("Error parsing API response", e);
onFailure(PersonalIdApiErrorCodes.JSON_PARSING_ERROR);
}
}
onSuccess(sessionData);
}

@Override
public void processFailure(int responseCode) {
public void processFailure(int responseCode, @Nullable InputStream errorResponse) {
if (errorResponse != null) {
try (InputStream in = errorResponse) {
JSONObject json = new JSONObject(new String(StreamsUtil.inputStreamToByteArray(in)));
if (json.has("error")) {
Toast.makeText(CommCareApplication.instance(), json.optString("error"),
Toast.LENGTH_LONG).show();
}
} catch (IOException | JSONException e) {
Logger.exception("Error parsing API error response", e);
onFailure(defaultFailureCode);
}
}
onFailure(defaultFailureCode);
}

Expand Down Expand Up @@ -87,6 +105,12 @@ public void makeStartConfigurationCall(Activity activity,
new StartConfigurationResponseParser(),
PersonalIdApiErrorCodes.INVALID_RESPONSE_ERROR));
}
public void validateFirebaseIdToken(Activity activity, String firebaseIdToken,PersonalIdSessionData sessionData) {
ApiPersonalId.validateFirebaseIdToken(sessionData.getToken(),activity,firebaseIdToken,
createCallback(sessionData,
null,
PersonalIdApiErrorCodes.INVALID_RESPONSE_ERROR));
}

public void addOrVerifyNameCall(Activity activity, String name, PersonalIdSessionData sessionData) {
ApiPersonalId.addOrVerifyName(activity, name, sessionData.getToken(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ public class ApiEndPoints {
public static final String connectTokenURL = "/o/token/";
public static final String connectHeartbeatURL = "/users/heartbeat";
public static final String connectFetchDbKeyURL = "/users/fetch_db_key";
public static final String validateFirebaseIdToken = "/users/validate_firebase_id_token";
public static final String checkName = "/users/check_name";
public static final String startConfiguration = "/users/start_configuration";
public static final String phoneAvailable = "/users/phone_available";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ public interface ApiService {
Call<ResponseBody> startConfiguration(@Header("CC-Integrity-Token") String integrityToken,
@Header("CC-Request-Hash") String requestHash,
@Body Map<String, String> registrationRequest);
@POST(ApiEndPoints.validateFirebaseIdToken)
Call<ResponseBody> validateFirebaseIdToken(@Header("Authorization") String token,
@Body Map<String, String> firebaseIdToken);

@POST(ApiEndPoints.checkName)
Call<ResponseBody> checkName(@Header("Authorization") String token,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,4 +233,4 @@ private void navigateToSuccess() {
getString(R.string.connect_recovery_success_message),
ConnectConstants.PERSONALID_RECOVERY_SUCCESS);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,19 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Toast;

import org.commcare.activities.connect.viewmodel.PersonalIdSessionDataViewModel;
import org.commcare.android.database.connect.models.PersonalIdSessionData;
import org.commcare.connect.network.ConnectNetworkHelper;
import org.commcare.connect.network.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdApiHandler;
import org.commcare.dalvik.R;
import org.commcare.dalvik.databinding.ScreenPersonalidNameBinding;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavDirections;
import androidx.navigation.Navigation;

import org.commcare.activities.connect.viewmodel.PersonalIdSessionDataViewModel;
import org.commcare.android.database.connect.models.PersonalIdSessionData;
import org.commcare.connect.network.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdApiHandler;
import org.commcare.dalvik.databinding.ScreenPersonalidNameBinding;

public class PersonalIdNameFragment extends Fragment {
private ScreenPersonalidNameBinding binding;
private Activity activity;
Expand Down
Loading
Loading