Skip to content
Open
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
1 change: 1 addition & 0 deletions app/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,7 @@
<string name="personalid_backup_code_too_many_attempts">Demasiados intentos. Por favor, inténtalo de nuevo más tarde.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Por favor, añade una dirección de correo electrónico</string>
<string name="personalid_set_new_backup_code_title">Establecer nuevo código de respaldo</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="connect_job_info_delivery_detail">Detalles de la entrega</string>
<string name="connect_job_info_review_delivery">Revisar detalles de la entrega</string>
<string name="connect_job_info_visit">%d visitas máximo</string>
Expand Down
1 change: 1 addition & 0 deletions app/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,7 @@ License.
<string name="personalid_backup_code_too_many_attempts">Trop de tentatives. Veuillez réessayer plus tard.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Veuillez ajouter une adresse e-mail</string>
<string name="personalid_set_new_backup_code_title">Définir un nouveau code de sauvegarde</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="connect_job_info_delivery_detail">Détails de livraison</string>
<string name="connect_job_info_review_delivery">Vérifiez les détails de livraison</string>
<string name="connect_job_info_visit">%d visites maximum</string>
Expand Down
1 change: 1 addition & 0 deletions app/res/values-ha/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ Don cikakken aiki na wurin zama na aikace-aikace da yawa, da fatan za a yi sabon
<string name="personalid_backup_code_too_many_attempts">Yunkuri da yawa. Da fatan za a sake gwadawa daga baya.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Da fatan za a ƙara adireshin imel</string>
<string name="personalid_set_new_backup_code_title">Saita sabuwar lambar sirrin ajiyar bayanai</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="connect_job_info_delivery_detail">Cikakkun Bayanan Isarwa</string>
<string name="connect_job_info_review_delivery">Yi bitar cikakkun bayanai game da isar da kaya</string>
<string name="connect_job_info_visit">Matsakaicin Ziyarar %d</string>
Expand Down
2 changes: 2 additions & 0 deletions app/res/values-hi/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,8 @@ License.
<string name="personalid_forgot_backup_code">अपना बैकअप कोड भूल गए?</string>
<string name="personalid_backup_code_too_many_attempts">Too many attempts. Please try again later.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Please add an email address</string>
<string name="personalid_set_new_backup_code_title">नया बैकअप कोड सेट करें</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="connect_job_info_delivery_detail">वितरण विवरण</string>
<string name="connect_job_info_review_delivery">वितरण विवरण की समीक्षा करें</string>
<string name="connect_job_info_visit">अधिकतम %d विज़िट</string>
Expand Down
2 changes: 2 additions & 0 deletions app/res/values-lt/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@
<string name="personalid_forgot_backup_code">Pamiršote savo atsarginį kodą?</string>
<string name="personalid_backup_code_too_many_attempts">Too many attempts. Please try again later.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Please add an email address</string>
<string name="personalid_set_new_backup_code_title">Nustatyti naują atsarginį kodą</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="nav_drawer_signin_register">Prisijungti / Registruotis</string>
<string name="nav_drawer_help">Pagalba</string>
<string name="nav_drawer_not_signed_in_to_personal_id">Neprisijungta prie „PersonalID“</string>
Expand Down
2 changes: 2 additions & 0 deletions app/res/values-no/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@
<string name="personalid_forgot_backup_code">Glemt sikkerhetskoden din?</string>
<string name="personalid_backup_code_too_many_attempts">Too many attempts. Please try again later.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Please add an email address</string>
<string name="personalid_set_new_backup_code_title">Angi ny sikkerhetskode</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="nav_drawer_signin_register">Logg inn / Registrer deg</string>
<string name="nav_drawer_help">Hjelp</string>
<string name="nav_drawer_not_signed_in_to_personal_id">Du er ikke logget inn med PersonalID</string>
Expand Down
1 change: 1 addition & 0 deletions app/res/values-pt/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,7 @@
<string name="personalid_backup_code_too_many_attempts">Muitas tentativas. Por favor, tente novamente mais tarde.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Por favor, adicione um endereço de e-mail</string>
<string name="personalid_set_new_backup_code_title">Definir novo código de backup</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="connect_job_info_delivery_detail">Detalhes da entrega</string>
<string name="connect_job_info_review_delivery">Revise os detalhes da entrega</string>
<string name="connect_job_info_visit">%d máximo de visitas</string>
Expand Down
2 changes: 2 additions & 0 deletions app/res/values-sw/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,8 @@
<string name="personalid_forgot_backup_code">Umesahau nambari yako ya hifadhi nakala?</string>
<string name="personalid_backup_code_too_many_attempts">Too many attempts. Please try again later.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Please add an email address</string>
<string name="personalid_set_new_backup_code_title">Weka nambari mpya ya hifadhi nakala</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="connect_job_info_delivery_detail">Maelezo ya Uwasilishaji</string>
<string name="connect_job_info_review_delivery">Kagua maelezo ya utoaji</string>
<string name="connect_job_info_visit">%d upeo wa Ziara</string>
Expand Down
1 change: 1 addition & 0 deletions app/res/values-ti/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,7 @@
<string name="personalid_backup_code_too_many_attempts">ብዙሕ ፈተናታት። በጃኻ ድሕሪ ሕጂ እንደገና ፈትን።</string>
<string name="personalid_no_email_forgot_backup_code_toast">በጃኻ ናይ ኢ-መይል ኣድራሻ ወስኽ</string>
<string name="personalid_set_new_backup_code_title">ሓድሽ ናይ ምትካእ ኮድ ኣቐምጥ</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="connect_job_info_delivery_detail">ዝርዝር (ኣተገባብራ)ኣወሃህባ</string>
<string name="connect_job_info_review_delivery">ዝርዝር ኣወሃህባ ዳህሳስ ከልስ</string>
<string name="connect_job_info_visit">%d ዝለዓለ ምብጻሕ</string>
Expand Down
1 change: 1 addition & 0 deletions app/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,7 @@
<string name="personalid_this_is_not_me"><u>This is not me</u></string>
<string name="personalid_profile_change_backup_code">Change backup code</string>
<string name="personalid_forgot_backup_code">Forgot your backup code?</string>
<string name="personalid_backup_code_changed_success">Backup code updated successfully</string>
<string name="personalid_backup_code_too_many_attempts">Too many attempts. Please try again later.</string>
<string name="personalid_no_email_forgot_backup_code_toast">Please add an email address</string>
<string name="personalid_welcome_back_msg">Welcome back %s</string>
Expand Down
16 changes: 16 additions & 0 deletions app/src/org/commcare/connect/network/personalId/ApiPersonalId.java
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,22 @@ public static void confirmBackupCode(
BaseApi.Companion.callApi(context, call, callback, PersonalIdApiEndpoints.CONFIRM_BACKUP_CODE);
}

public static void setRecoveryPin(
Context context,
String userId,
String password,
String newPin,
IApiCallback callback
) {
AuthInfo authInfo = new AuthInfo.ProvidedAuth(userId, password, false);
String token = HttpUtils.getCredential(authInfo);
HashMap<String, String> params = new HashMap<>();
params.put("recovery_pin", newPin);
PersonalIdApiService apiService = PersonalIdApiClient.getClientApi();
Call<ResponseBody> call = apiService.setRecoveryPin(token, params);
BaseApi.Companion.callApi(context, call, callback, PersonalIdApiEndpoints.SET_RECOVERY_PIN);
}

public static void reportIntegrity(
Context context,
Map<String, String> body,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ object PersonalIdApiEndpoints {
const val UPDATE_PROFILE = "/users/update_profile"
const val COMPLETE_PROFILE = "/users/complete_profile"
const val CONFIRM_BACKUP_CODE = "/users/recover/confirm_backup_code"
const val SET_RECOVERY_PIN = "/users/set_recovery_pin"
const val CREDENTIALS = "/users/credentials"
const val RETRIEVE_NOTIFICATIONS = "/messaging/retrieve_notifications/"
const val UPDATE_NOTIFICATIONS = "/messaging/update_notification_received/"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,16 @@ public void confirmBackupCode(
);
}

public void setRecoveryPin(Context context, String userId, String password, String newPin) {
ApiPersonalId.setRecoveryPin(
context,
userId,
password,
newPin,
createCallback(new NoParsingResponseParser<>(), null)
);
}

public void completeProfile(
Context context,
String userName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ Call<ResponseBody> completeProfile(@Header("Authorization") String token,
Call<ResponseBody> confirmBackupCode(@Header("Authorization") String token,
@Body Map<String, String> confirmBackupCodeRequest);

@POST(PersonalIdApiEndpoints.SET_RECOVERY_PIN)
Call<ResponseBody> setRecoveryPin(@Header("Authorization") String token,
@Body Map<String, String> body);

@GET(PersonalIdApiEndpoints.CREDENTIALS)
Call<ResponseBody> retrieveCredentials(@Header("Authorization") String token);

Expand Down
102 changes: 98 additions & 4 deletions app/src/org/commcare/personalId/profile/SetNewBackupCodeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,107 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import android.widget.Toast
import androidx.navigation.fragment.findNavController
import org.commcare.activities.CommCareActivity
import org.commcare.android.database.connect.models.ConnectUserRecord
import org.commcare.connect.database.ConnectUserDatabaseUtil
import org.commcare.connect.network.base.BaseApiHandler.PersonalIdOrConnectApiErrorCodes
import org.commcare.connect.network.base.PersonalIdOrConnectApiErrorHandler
import org.commcare.connect.network.personalId.PersonalIdApiHandler
import org.commcare.dalvik.R
import org.commcare.fragments.personalId.BasePersonalIdBackupCodeFragment
import org.commcare.personalId.PersonalIdUnlocker
import org.commcare.personalId.UnlockPolicy

class SetNewBackupCodeFragment : Fragment() {
class SetNewBackupCodeFragment : BasePersonalIdBackupCodeFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View = TextView(requireContext()).apply { text = "Set New Backup Code — TODO" }
): View {
val view = super.onCreateView(inflater, container, savedInstanceState)
setUpView()
setupListeners()
return view
}

override fun onResume() {
super.onResume()
validateBackupCodeAndEnableContinue()
}

private fun setUpView() {
binding.backupCodeLayout.visibility = View.VISIBLE
binding.confirmCodeLayout.visibility = View.VISIBLE
binding.confirmCodeLabel.visibility = View.VISIBLE
binding.welcomeBackLayout.visibility = View.GONE
binding.notMeButton.visibility = View.GONE
requireActivity().title = getString(R.string.personalid_set_new_backup_code_title)
binding.recoveryCodeTilte.setText(R.string.personalid_set_new_backup_code_title)
binding.backupCodeSubtitle.text = getString(R.string.connect_backup_code_remember, BACKUP_CODE_LENGTH)
enableContinueButton(false)
}

override fun handleBackupCodeSubmission() {
val backupCode = binding.backupCodeView.codeValue
if (!validateBackupCodeInput()) {
return
}

PersonalIdUnlocker.unlock(
requireActivity() as CommCareActivity<*>,
UnlockPolicy.ALWAYS,
) { unlocked ->
if (!unlocked) return@unlock
enableContinueButton(false)
callSetBackupCodeApi(backupCode)
}
}

private fun callSetBackupCodeApi(backupCode: String) {
val user = ConnectUserDatabaseUtil.getUser(requireContext())!!

object : PersonalIdApiHandler<Boolean>() {
override fun onSuccess(data: Boolean) {
onSetBackupCodeCallSuccess(backupCode, user)
}

override fun onFailure(
errorCode: PersonalIdOrConnectApiErrorCodes,
t: Throwable?,
) {
onSetBackupCodeCallFailure(errorCode, t)
}
}.setRecoveryPin(requireContext(), user.getUserId(), user.getPassword(), backupCode)
}

private fun onSetBackupCodeCallSuccess(
backupCode: String,
user: ConnectUserRecord
) {
user.pin = backupCode
ConnectUserDatabaseUtil.storeUser(requireContext(), user)
Toast
.makeText(
requireContext(),
R.string.personalid_backup_code_changed_success,
Toast.LENGTH_LONG,
).show()
findNavController().popBackStack(R.id.personalid_profile_backup_code_fragment, true)
}

private fun onSetBackupCodeCallFailure(
errorCode: PersonalIdOrConnectApiErrorCodes,
t: Throwable?
) {
showError(
PersonalIdOrConnectApiErrorHandler.handle(
requireActivity(),
errorCode,
t
)
)
enableContinueButton(true)
}
}
Loading
Loading