From 34ecb9769e8ae5513508604ec589de203c0c9960 Mon Sep 17 00:00:00 2001 From: Sachin S P <52343650+SachinPremkumar@users.noreply.github.com> Date: Tue, 8 Apr 2025 12:31:17 +0530 Subject: [PATCH 1/3] added technical desgin document for handle (#517) Signed-off-by: sachin.sp Co-authored-by: sachin.sp --- docs/HandlesUserFlow.png | Bin 0 -> 53444 bytes docs/design/handle_flow.md | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 docs/HandlesUserFlow.png create mode 100644 docs/design/handle_flow.md diff --git a/docs/HandlesUserFlow.png b/docs/HandlesUserFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..f711e6d184380fd9a1f2d35040614716e639926e GIT binary patch literal 53444 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 EUjdA7w*UYD literal 0 HcmV?d00001 diff --git a/docs/design/handle_flow.md b/docs/design/handle_flow.md new file mode 100644 index 000000000..a86099c72 --- /dev/null +++ b/docs/design/handle_flow.md @@ -0,0 +1,40 @@ +# Handles Feature +The Handles Feature is designed to streamline citizen registration and authentication. During registration, specific attributes such as email, phone number, or national ID—can be designated as a handle. This handle serves as a unique identifier that can later be used for authentication for various services. Handles can also be used to update data in case of data discrepancies. By allowing flexible and secure identification, the feature enhances the accuracy and integrity of citizen records while simplifying user interactions with government systems. + +# Configuration Guide + +It is important to acknowledge that all properties listed in this guide are automatically synchronized with the Android Registration Client. These properties are sourced from the `registration-default.properties` file. + +## Configuration Steps + +### 1. Update the Handle Fields in `registration-default.properties` + +In the `registration-default.properties` file, update the following property to specify the field values on which you want to enable the handle. Ensure that these field values match the field values in the IDSchema. + +```properties +mosip.registration.default-selected-handle-fields=email,phone +``` + +### 2. Update the Regex for Handle Validation in `id-authentication-default.properties` +In the `id-authentication-default.properties` file, update the Regex to validate handles with the provided key as the postfix: + +```properties +mosip.ida.handle-types.regex={ '@email' : '.*@email$', '@phonenumber' : '.*@phonenumber$' } +``` + +### 3. Map Postfix Values in `id-repository-default.properties` +In the `id-repository-default.properties` file, map the postfix values with the corresponding field values: + +```properties +mosip.identity.fieldid.handle-postfix.mapping={'email':'@email', 'phone':'@phonenumber'} +``` + +#### Configuration files + +* `application-default.properties` +* `registration-default.properties` + +## Sequence Diagram +The following sequence diagram illustrates the registration process, including the use of the Handles Feature: + +![HandlesUserFlow.png](../HandlesUserFlow.png) From 64db30ededffa6f71fd6671caec85f94f13cfd22 Mon Sep 17 00:00:00 2001 From: Sachin S P <52343650+SachinPremkumar@users.noreply.github.com> Date: Tue, 8 Apr 2025 12:31:40 +0530 Subject: [PATCH 2/3] Updated README.md file (#518) Signed-off-by: sachin.sp Co-authored-by: sachin.sp --- README.md | 158 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 112 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 0948e4a37..f6477204f 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,113 @@ # android-registration-client -Reference Android Registration Client Software - WIP - -# Use of Java Packages: - 1. Added all the java packages in android directory of the project: - 2. Add implementation in settings.gradle file of the project: - Eg: include(:) - 3. Set the server base url in android/build.gradle file. - 4. Add implementation for packages in android/app/build.gradle files inside dependency block as: - implementation project(:) - -# Creation of Services in the project's java package. - 1. Added all the required functions by creating individual services for each functionality. - 2. Using AppComponent interface which inherits Dagger for dependecny injection. - 3. Dependency injection performed in MainActivity.java file by calling inject() method. - -# Creation of MethodChannels in dart classes. - 1. Create MethodChannel with a constant string name in a dart class and try to invoke a method - provided by this channel. - 2. This invoke method will take the function name and arguments which will be sent to native side - for getting a response. - 3. The function name in invoke method and on native side should be the same as: - methodChannel.invokeMethod("fetchDetails"); - 4. On native side, in MainActivity file, inside MethodChennel() use a switch case to check for method name - call.method argument which checks "fetchDetails" case. On matching, it implements "fetchDetails" method. - case "fetchDetails: - Service().fetchDetails(result); - break; - -# Fetch Machine Details - 1. Method channel on Credential Page invokes "getMachineDetails" method and gets a response from - native side as a string. - 2. Then this string can be decoded into a Map and the details can be displayed - on a page. - 3. It also contains functionality to copy the details and save a file containing details in internal storage. - -# Perform Online Login - 1. First create a machine with given machine details in admin portal. - 2. Try to login by providing correct userId and password. - 3. After pressing login button, "login" method will be invoked from method channel. - 3. If user is able to login with given credentials, perform master data sync by pressing the sync data button. - 4. After that based on the roles of the user which is logged in, he will be prompted to a either home page or onboarding page. - -# Performing Offline Login - 1. After performing online login and master data sync, a hashed value of the password will be saved in the db. - 2. So if the user provides offline login, then the hashed value for password will be checked and matched with the entered password value. - 3. If the value matches, then the user is able to perform offline login, else screen will display required error messages. + +The Android Registration Client is a tablet application that serves as a portable version of the existing desktop Registration Client. It has been developed to support accessibility on all Android devices. The creation of the Android Registration Client was driven by the need to meet the mobility requirements of countries adopting MOSIP. + +# Developer Guide + +The documentation here will guide you through the pre-requisites and the other necessary details required for Android Registration Client developer setup. + +The android-registration-client repository contains the Android Registration Client software for MOSIP. The feature-flutter branch focuses on integrating Flutter into the client. + +## Setup + +To set up the Android Registration Client with Flutter and Android Studio, follow the steps below: + +#### Prerequisites + +* Flutter SDK (3.10.4): Install Flutter by following the official [Flutter installation guide](https://flutter.dev/docs/get-started/install). +* Android Studio (or Any IDE of your choice): Download and install Android Studio from the official [Android Studio website](https://developer.android.com/studio). + +#### Step 1: Clone the Repository + +The `develop` branch of android-reg-client is currently being actively developed. If you wish to access this branch, you can clone the repository by executing the following command in your terminal. Alternatively, you can download one of the releases available in the repository's release section. + +``` +git clone -b feature-flutter https://github.com/mosip/android-registration-client.git +``` + +**Active Branches**: + +* [release-0.11.x](https://github.com/mosip/android-registration-client/tree/release-0.11.x)(developer release branch) +* [develop](https://github.com/mosip/android-registration-client/tree/develop)(active development branch) + +#### Step 2: Set up Flutter in Android Studio + +1. To begin, launch Android Studio. +2. Next, select **Open an existing Android Studio project** and navigate to the cloned repository. +3. Open the `android-registration-client` directory as a project in Android Studio. +4. In order to integrate Flutter with Android Studio, install the Flutter plugin by accessing `File > Settings > Plugins` and searching for **Flutter**. Proceed to click on **Install** to install the plugin. +5. To ensure proper functionality, configure the Flutter SDK path by navigating to `File > Settings > Languages & Frameworks > Flutter` and specifying the Flutter SDK path as the location where you have installed Flutter. +6. Finally, save the changes by clicking on the "Apply" button. + +**Customizing the Registration Client** + +* Styling of the application can be configured by modifying these files `lib/utils/app_style.dart, lib/utils/app_config.dart` +* Application language bundles can be added to this path `lib/l10n` After adding the bundle run the below command to generate Localization data (Required for the first time). + +``` +flutter gen-l10n +``` + +* The label and application logo can be changed here android/app/src/main/AndroidManifest.xml + +#### Step 3: Build and Run the Application + +* The `pigeon.sh` file consists of the necessary commands for downloading dependencies and generating Flutter - Android native communication code. Please execute the `pigeon.sh` file or execute the commands within the file separately. +* Ensure you have connected an Android device or initiated an Android emulator. +* Open the terminal within Android Studio or use an external terminal. +* Navigate to the `android-registration-client` directory. +* Run the following command to build and execute the application: + +``` +flutter run +``` + +#### Step 4: Build, debug, and release APK + +Execute the commands below to debug and release the APK + +``` +// Debug APK +flutter build apk --debug + +// Release APK +flutter build apk --release +``` + +### Set up Mock MDS for Biometric Scan + +The Mock MDS tool can be utilized to simulate the functionalities of biometric devices. The Mock MDS application is compliant with CTK standards and can serve as a substitute for Android SBI modules during testing and validation. + +1. Install the Mock MDS application. +2. Access the **Settings** menu. +3. Under Device Configuration, choose **Registration** from the dropdown menu. +4. In P12 Configuration: + * Enter the necessary credentials for the Device Key and upload the Device P12 file. + * Enter the required credentials for the FTM Key and upload the FTM P12 file. + * Complete all fields in MOSIP IDA Configuration. +5. In Modality Configuration, specify the quality score for Face, Finger, and Iris scans(these values can also be adjusted during testing). +6. Click on the **Save** button. +7. Go back to the Home Page and select `LOAD AND VALIDATE CERTIFICATES`. + +A toast message will be displayed indicating the success of the validation process. + +**Note**: To view the released version of the Mock SBI APK, click [here](https://github.com/mosip/android-camera-mds/releases/tag/vDP1). + +To download the Mock SBI APK, click on `camera-mds.zip`. + +### Contributions + +If you would like to contribute to the Android Registration Client, please follow the guidelines outlined [here](https://docs.mosip.io/1.2.0/community/code-contributions). + +### License + +The Android Registration Client is licensed under the [MIT License](https://github.com/mosip/android-registration-client/blob/develop/LICENSE). + +### Support + +If you encounter any issues or have any questions, please open an issue on the [GitHub repository](https://github.com/mosip/android-registration-client/issues). + +### Sources + +* [Flutter- Get started: Install](https://flutter.dev/docs/get-started/install) +* [Android Studio- Download](https://developer.android.com/studio) From ef12e4ca006c1ff25dd467a02685fde70aaf54c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:28:53 +0000 Subject: [PATCH 3/3] Bump com.fasterxml.jackson.core:jackson-databind in /ui-test Bumps [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) from 2.13.3 to 2.13.4.2. - [Commits](https://github.com/FasterXML/jackson/commits) --- updated-dependencies: - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.13.4.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- ui-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-test/pom.xml b/ui-test/pom.xml index dc38bc51d..5aee8431d 100644 --- a/ui-test/pom.xml +++ b/ui-test/pom.xml @@ -90,7 +90,7 @@ com.fasterxml.jackson.core jackson-databind - 2.13.3 + 2.13.4.2 org.keycloak