From c78b36ce729261093e4ebf8fc21b0f964b934cd3 Mon Sep 17 00:00:00 2001
From: Dorian MARCO <dorian.marco@e-is.pro>
Date: Tue, 13 May 2025 13:55:20 +0200
Subject: [PATCH] multiple fix and enh

---
 package-lock.json                             |  4 +-
 src/app/account/accounts.service.ts           | 29 +++++++-------
 src/app/account/auth/auth.controller.ts       |  4 +-
 src/app/account/unlock/unlock.form.html       |  1 +
 src/app/account/unlock/unlock.form.ts         |  2 +-
 src/app/account/wallet/wallet.page.ts         |  1 -
 .../verification/verification.modal.html      | 38 +++++++++----------
 .../verification/verification.modal.ts        |  2 +-
 src/app/settings/settings.page.html           | 18 ++++-----
 src/app/settings/settings.page.ts             |  5 +--
 src/assets/i18n/fr.json                       |  2 +-
 src/environments/environment.ts               |  1 +
 12 files changed, 53 insertions(+), 54 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 7db0a57..962830e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "cesium",
-  "version": "2.0.0-alpha50",
+  "version": "2.0.0-alpha51",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cesium",
-      "version": "2.0.0-alpha50",
+      "version": "2.0.0-alpha51",
       "license": "AGPL-3.0",
       "dependencies": {
         "@angular/animations": "^18.2.13",
diff --git a/src/app/account/accounts.service.ts b/src/app/account/accounts.service.ts
index 6f7f71b..04d79ea 100644
--- a/src/app/account/accounts.service.ts
+++ b/src/app/account/accounts.service.ts
@@ -197,10 +197,10 @@ export class AccountsService extends RxStartableService<AccountsState> {
       });
 
       // Add Dev account
-      // if (!environment.production) {
-      //   const devAccount = await this.addDevAccount(accounts);
-      //   if (devAccount) accounts.push(devAccount);
-      // }
+      if (!environment.production) {
+        const devAccount = await this.addDevAccount(accounts);
+        if (devAccount) accounts.push(devAccount);
+      }
 
       // Load account's data
       try {
@@ -227,7 +227,7 @@ export class AccountsService extends RxStartableService<AccountsState> {
     const data = environment.dev?.auth;
 
     // Set password to AAAAA (or those defined in environment)
-    this._password = data?.password || 'AAAAA';
+    this._password = data?.password || '12345';
 
     if (!data || (!data.v1 && !data.v2)) return; // Skip if no dev account defined
     data.meta = {
@@ -722,6 +722,8 @@ export class AccountsService extends RxStartableService<AccountsState> {
           const toAccountRefereePercent = await this.wot.getRefereePercentByAccount(to);
           if (toAccountRefereePercent > this.network.currency.params.minAccessibleReferees / 1000000000) {
             certType = CertType.CertRenewal;
+          } else {
+            certType = CertType.CertCreation;
           }
           break;
         }
@@ -880,18 +882,16 @@ export class AccountsService extends RxStartableService<AccountsState> {
     return this.settings.get('biometricAuth') && isNotNilOrBlank(this.storage.get('validationCode'));
   }
 
-  async getActionConfirmation(mobile: boolean, from: Account, message?: string, retry?: number): Promise<boolean> {
+  async getActionConfirmation(mobile: boolean, from: Account, retryUsed?: number): Promise<boolean> {
     let validation = false;
-    let retryUsed = retry ?? 0;
+    const maxRetry = 3;
+    retryUsed = retryUsed ?? 0;
     const isBiometricEnabled = await this.isBiometricEnabled();
     if (mobile && isBiometricEnabled) {
       validation = await this.getBiometricAuth();
     } else {
       const modal = await this.modalCtrl.create({
         component: ValidationModal,
-        componentProps: {
-          message,
-        },
       });
       await modal.present();
 
@@ -904,11 +904,14 @@ export class AccountsService extends RxStartableService<AccountsState> {
       }
     }
 
-    if (validation === false && retryUsed < 4) {
+    if (validation === false && retryUsed < maxRetry) {
       retryUsed++;
-      const { role } = await this.openRetryAlert(retryUsed);
+      // if (mobile) {
+      const { role } = await this.openRetryAlert(maxRetry - retryUsed);
       if (role === 'cancel') return false;
-      validation = await this.getActionConfirmation(mobile, from, message, retryUsed);
+      // }
+
+      validation = await this.getActionConfirmation(mobile, from, retryUsed);
     }
 
     if (!validation && isBiometricEnabled) {
diff --git a/src/app/account/auth/auth.controller.ts b/src/app/account/auth/auth.controller.ts
index 76717b8..cbdf0fb 100644
--- a/src/app/account/auth/auth.controller.ts
+++ b/src/app/account/auth/auth.controller.ts
@@ -7,12 +7,12 @@ import { AuthModal, AuthModalOptions } from '@app/account/auth/auth.modal';
 import { Router } from '@angular/router';
 import { RegisterModal, RegisterModalOptions } from '@app/account/register/register.modal';
 import { Account, LoginMethods, LoginMethodType, LoginOptions, SelectAccountOptions, UnlockOptions } from '@app/account/account.model';
-import { UnlockModal } from '@app/account/unlock/unlock.modal';
 import { AccountListComponent, AccountListComponentInputs } from '@app/account/list/account-list.component';
 import { setTimeout } from '@rx-angular/cdk/zone-less/browser';
 import { AppEvent } from '@app/shared/types';
 import { IAuthController } from '@app/account/auth/auth.model';
 import { ListPopover, ListPopoverOptions } from '@app/shared/popover/list.popover';
+import { ValidationModal } from '@app/transfer/send/transfer-validation/validation.modal';
 
 @Injectable()
 export class AuthController implements IAuthController {
@@ -108,7 +108,7 @@ export class AuthController implements IAuthController {
 
   async unlock(opts?: UnlockOptions): Promise<string> {
     const modal = await this.modalCtrl.create({
-      component: UnlockModal,
+      component: ValidationModal,
       componentProps: opts,
     });
     await modal.present();
diff --git a/src/app/account/unlock/unlock.form.html b/src/app/account/unlock/unlock.form.html
index 085f3a2..9a366d6 100644
--- a/src/app/account/unlock/unlock.form.html
+++ b/src/app/account/unlock/unlock.form.html
@@ -6,6 +6,7 @@
 
     <ion-item lines="none" class="ion-padding-top">
       <ion-input
+        type="tel"
         [formControl]="control"
         [label]="'AUTH.PASSPHRASE' | translate"
         labelPlacement="floating"
diff --git a/src/app/account/unlock/unlock.form.ts b/src/app/account/unlock/unlock.form.ts
index 99d1a00..ef6d4c3 100644
--- a/src/app/account/unlock/unlock.form.ts
+++ b/src/app/account/unlock/unlock.form.ts
@@ -90,7 +90,7 @@ export class UnlockForm extends AppForm<string> implements OnInit {
     let value = event.target['value'] || '';
 
     // Removes non alphanumeric characters
-    value = value.toUpperCase().replace(/[^A-Z]+/g, '');
+    value = value.toUpperCase().replace(/[^0-9]+/g, '');
 
     if (value.length > this.maxLength) {
       event.preventDefault();
diff --git a/src/app/account/wallet/wallet.page.ts b/src/app/account/wallet/wallet.page.ts
index b25a600..03b68e8 100644
--- a/src/app/account/wallet/wallet.page.ts
+++ b/src/app/account/wallet/wallet.page.ts
@@ -53,7 +53,6 @@ export class WalletPage extends AppPage<WalletState> implements OnInit {
   static NEW = Object.freeze(<Account>{
     address: '',
   });
-
   IdentityStatusEnum = IdentityStatusEnum;
 
   protected qrCodeValue: string;
diff --git a/src/app/certification/verification/verification.modal.html b/src/app/certification/verification/verification.modal.html
index 241bb17..efdf917 100644
--- a/src/app/certification/verification/verification.modal.html
+++ b/src/app/certification/verification/verification.modal.html
@@ -32,24 +32,22 @@
     }
   </ion-list>
 </ion-content>
-@if (!mobile) {
-  <ion-footer>
-    <ion-toolbar>
-      <ion-row class="ion-no-padding">
-        <ion-col size="4"></ion-col>
-        <!-- buttons -->
-        <ion-col size="8">
-          <ion-button color="light" (click)="cancel()">
-            <ion-label translate>COMMON.BTN_CLOSE</ion-label>
-          </ion-button>
+<ion-footer>
+  <ion-toolbar>
+    <ion-row class="ion-no-padding">
+      <ion-col size="4"></ion-col>
+      <!-- buttons -->
+      <ion-col size="8">
+        <ion-button color="light" (click)="cancel()">
+          <ion-label translate>COMMON.BTN_CLOSE</ion-label>
+        </ion-button>
 
-          <ion-button [disabled]="!isCompleted()" (click)="doSubmit()">
-            <ion-icon slot="start" name="checkmark-outline"></ion-icon>
-            <ion-label translate>COMMON.BTN_YES_CONTINUE</ion-label>
-          </ion-button>
-        </ion-col>
-        <ion-col size="4"></ion-col>
-      </ion-row>
-    </ion-toolbar>
-  </ion-footer>
-}
+        <ion-button [disabled]="!isCompleted()" (click)="doSubmit()">
+          <ion-icon slot="start" name="checkmark-outline"></ion-icon>
+          <ion-label translate>COMMON.BTN_YES_CONTINUE</ion-label>
+        </ion-button>
+      </ion-col>
+      <ion-col size="4"></ion-col>
+    </ion-row>
+  </ion-toolbar>
+</ion-footer>
diff --git a/src/app/certification/verification/verification.modal.ts b/src/app/certification/verification/verification.modal.ts
index 9396514..5170b53 100644
--- a/src/app/certification/verification/verification.modal.ts
+++ b/src/app/certification/verification/verification.modal.ts
@@ -103,7 +103,7 @@ export class VerificationModal extends AppPage<VerificationModalState> {
 
   doSubmit() {
     return this.viewCtrl.dismiss(
-      this.isCompleted() && this.certificationSteps.every((step) => this.answers.get(step.labelKey) === step.expectedResponse)
+      this.isCompleted() && this.certificationModalConfig.steps.every((step) => this.answers.get(step.labelKey) === step.expectedResponse)
     );
   }
 }
diff --git a/src/app/settings/settings.page.html b/src/app/settings/settings.page.html
index c380572..4da7ed2 100644
--- a/src/app/settings/settings.page.html
+++ b/src/app/settings/settings.page.html
@@ -144,15 +144,15 @@
         </ion-select>
       </ion-item>
 
-      <!--      @if (canBiometric) {-->
-      <ion-item>
-        <ion-icon slot="start" name="finger-print"></ion-icon>
-        <ion-label color="dark" translate>SETTINGS.BIOMETRIC</ion-label>
-        <ion-toggle [(ngModel)]="biometricAuth" (click)="toggleBiometricAuth()">
-          <ion-label color="medium" translate></ion-label>
-        </ion-toggle>
-      </ion-item>
-      <!--      }-->
+      @if (canBiometric) {
+        <ion-item>
+          <ion-icon slot="start" name="finger-print"></ion-icon>
+          <ion-label color="dark" translate>SETTINGS.BIOMETRIC</ion-label>
+          <ion-toggle [(ngModel)]="biometricAuth" (click)="toggleBiometricAuth()">
+            <ion-label color="medium" translate></ion-label>
+          </ion-toggle>
+        </ion-item>
+      }
     </ion-list>
 
     <!-- buttons -->
diff --git a/src/app/settings/settings.page.ts b/src/app/settings/settings.page.ts
index ff03108..6b04f77 100644
--- a/src/app/settings/settings.page.ts
+++ b/src/app/settings/settings.page.ts
@@ -123,10 +123,7 @@ export class SettingsPage extends AppPage<SettingsPageState> implements OnInit {
     // Detect changes
     this._state.hold(
       this._state
-        .select(
-          ['locale', 'peer', 'indexer', 'pod', 'ipfsGateway', 'unAuthDelayMs', 'displayUnit', 'selectedRedeemPeriod', 'expertMode', 'biometricAuth'],
-          (s) => s
-        )
+        .select(['locale', 'peer', 'indexer', 'pod', 'ipfsGateway', 'unAuthDelayMs', 'displayUnit', 'selectedRedeemPeriod', 'expertMode'], (s) => s)
         .pipe(skip(1)),
       () => {
         if (this.mobile) {
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index 1303157..f60dd6c 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -730,7 +730,7 @@
       "COMMENT": "Commentaire"
     },
     "CERTIFICATION_MODAL": {
-      "CHECKLIST_TITLE": "Vérifications avant certification",
+      "CHECKLIST_TITLE": "Vérifications",
       "INFOS": "La sécurité de la monnaie Ğ1 repose sur chaque membre. Avant de certifier l'identité de cette personne, vous devez avoir fait quelques vérifications à son propos. Veuillez répondre aux questions suivantes :",
       "REMINDER_TITLE": "Rappel",
       "CHECKLIST_CONDITIONS_NOT_MET": "La certification n'a pas été envoyée. Les vérifications semblent insuffisantes. Veuillez vérifier de nouveau chaque point auprès de la personne à certifier.",
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index f7b7ae6..58f4da6 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -101,6 +101,7 @@ export const environment = <Environment>{
     // 'http://localhost:8080'
     /* GDev endpoints */
     'https://pagu.re',
+    'https://gyroi.de',
   ],
 
   defaultDistanceFileUrls: [
-- 
GitLab