From 8df28a987519ecfa03dcb8635443025f8d010362 Mon Sep 17 00:00:00 2001 From: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:16:13 -0300 Subject: [PATCH] feat(mobile): add biometric plugin (#829) * chore: update deps, make mobile script paths relative * feat(biometric): setup plugin folder * feat: implement iOS * add api * android * fix plugin name * also check empty info.plist entry * add example * fix android * supress * lint * better explanation * add partners & contributed by * change ext * license headers * update vite * add covector setup * tauri/dox removed * add example * docs --------- Co-authored-by: Lucas Nogueira --- .changes/biometric-initial-release.md | 6 + .changes/config.json | 34 +-- Cargo.lock | 14 + examples/api/package.json | 1 + examples/api/src-tauri/Cargo.toml | 1 + .../src-tauri/gen/android/.idea/gradle.xml | 1 + .../api/src-tauri/gen/android/.idea/misc.xml | 1 + .../src-tauri/gen/apple/api_iOS/Info.plist | 2 + examples/api/src-tauri/src/lib.rs | 1 + examples/api/src/App.svelte | 6 + examples/api/src/views/Biometric.svelte | 30 +++ plugins/biometric/.gitignore | 1 + plugins/biometric/Cargo.toml | 22 ++ plugins/biometric/LICENSE.spdx | 20 ++ plugins/biometric/LICENSE_APACHE-2.0 | 177 ++++++++++++ plugins/biometric/LICENSE_MIT | 21 ++ plugins/biometric/README.md | 112 ++++++++ plugins/biometric/android/.gitignore | 2 + plugins/biometric/android/build.gradle.kts | 45 ++++ plugins/biometric/android/proguard-rules.pro | 21 ++ plugins/biometric/android/settings.gradle | 2 + .../java/ExampleInstrumentedTest.kt | 28 ++ .../android/src/main/AndroidManifest.xml | 9 + .../src/main/java/BiometricActivity.kt | 129 +++++++++ .../android/src/main/java/BiometricPlugin.kt | 253 ++++++++++++++++++ .../src/main/res/layout/auth_activity.xml | 9 + .../android/src/main/res/values/styles.xml | 10 + .../android/src/test/java/ExampleUnitTest.kt | 21 ++ plugins/biometric/build.rs | 16 ++ plugins/biometric/contributors/crabnebula.svg | 31 +++ plugins/biometric/contributors/impierce.svg | 21 ++ plugins/biometric/guest-js/index.ts | 77 ++++++ plugins/biometric/ios/.gitignore | 10 + plugins/biometric/ios/Package.swift | 33 +++ plugins/biometric/ios/README.md | 3 + .../ios/Sources/BiometricPlugin.swift | 152 +++++++++++ .../ios/Tests/PluginTests/PluginTests.swift | 12 + plugins/biometric/package.json | 32 +++ plugins/biometric/rollup.config.js | 7 + plugins/biometric/src/api-iife.js | 1 + plugins/biometric/src/error.rs | 25 ++ plugins/biometric/src/lib.rs | 72 +++++ plugins/biometric/src/models.rs | 38 +++ plugins/biometric/tsconfig.json | 4 + plugins/dialog/test/tauri.conf.json | 2 +- plugins/notification/test/tauri.conf.json | 2 +- .../updater/tests/app-updater/tauri.conf.json | 2 +- pnpm-lock.yaml | 13 + 48 files changed, 1503 insertions(+), 29 deletions(-) create mode 100644 .changes/biometric-initial-release.md create mode 100644 examples/api/src/views/Biometric.svelte create mode 100644 plugins/biometric/.gitignore create mode 100644 plugins/biometric/Cargo.toml create mode 100644 plugins/biometric/LICENSE.spdx create mode 100644 plugins/biometric/LICENSE_APACHE-2.0 create mode 100644 plugins/biometric/LICENSE_MIT create mode 100644 plugins/biometric/README.md create mode 100644 plugins/biometric/android/.gitignore create mode 100644 plugins/biometric/android/build.gradle.kts create mode 100644 plugins/biometric/android/proguard-rules.pro create mode 100644 plugins/biometric/android/settings.gradle create mode 100644 plugins/biometric/android/src/androidTest/java/ExampleInstrumentedTest.kt create mode 100644 plugins/biometric/android/src/main/AndroidManifest.xml create mode 100644 plugins/biometric/android/src/main/java/BiometricActivity.kt create mode 100644 plugins/biometric/android/src/main/java/BiometricPlugin.kt create mode 100644 plugins/biometric/android/src/main/res/layout/auth_activity.xml create mode 100644 plugins/biometric/android/src/main/res/values/styles.xml create mode 100644 plugins/biometric/android/src/test/java/ExampleUnitTest.kt create mode 100644 plugins/biometric/build.rs create mode 100644 plugins/biometric/contributors/crabnebula.svg create mode 100644 plugins/biometric/contributors/impierce.svg create mode 100644 plugins/biometric/guest-js/index.ts create mode 100644 plugins/biometric/ios/.gitignore create mode 100644 plugins/biometric/ios/Package.swift create mode 100644 plugins/biometric/ios/README.md create mode 100644 plugins/biometric/ios/Sources/BiometricPlugin.swift create mode 100644 plugins/biometric/ios/Tests/PluginTests/PluginTests.swift create mode 100644 plugins/biometric/package.json create mode 100644 plugins/biometric/rollup.config.js create mode 100644 plugins/biometric/src/api-iife.js create mode 100644 plugins/biometric/src/error.rs create mode 100644 plugins/biometric/src/lib.rs create mode 100644 plugins/biometric/src/models.rs create mode 100644 plugins/biometric/tsconfig.json diff --git a/.changes/biometric-initial-release.md b/.changes/biometric-initial-release.md new file mode 100644 index 00000000..a4cae8cf --- /dev/null +++ b/.changes/biometric-initial-release.md @@ -0,0 +1,6 @@ +--- +"biometric": major +"biometric-js": major +--- + +Initial release. diff --git a/.changes/config.json b/.changes/config.json index 42de6fec..c4a960b1 100644 --- a/.changes/config.json +++ b/.changes/config.json @@ -74,7 +74,6 @@ ], "postversion": "pnpm install --no-frozen-lockfile" }, - "deep-link-example-js": { "path": "./plugins/deep-link/examples/app", "manager": "javascript", @@ -82,7 +81,6 @@ "dependencies": ["deep-link-js"], "postversion": "pnpm install --no-frozen-lockfile" }, - "authenticator": { "path": "./plugins/authenticator", "manager": "rust" @@ -91,7 +89,6 @@ "path": "./plugins/authenticator", "manager": "javascript" }, - "autostart": { "path": "./plugins/autostart", "manager": "rust" @@ -100,7 +97,6 @@ "path": "./plugins/autostart", "manager": "javascript" }, - "barcode-scanner": { "path": "./plugins/barcode-scanner", "manager": "rust" @@ -109,7 +105,14 @@ "path": "./plugins/barcode-scanner", "manager": "javascript" }, - + "biometric": { + "path": "./plugins/biometric", + "manager": "rust" + }, + "biometric-js": { + "path": "./plugins/biometric", + "manager": "javascript" + }, "cli": { "path": "./plugins/cli", "manager": "rust" @@ -118,7 +121,6 @@ "path": "./plugins/cli", "manager": "javascript" }, - "clipboard-manager": { "path": "./plugins/clipboard-manager", "manager": "rust" @@ -127,7 +129,6 @@ "path": "./plugins/clipboard-manager", "manager": "javascript" }, - "deep-link": { "path": "./plugins/deep-link", "manager": "rust" @@ -136,7 +137,6 @@ "path": "./plugins/deep-link", "manager": "javascript" }, - "fs": { "path": "./plugins/fs", "manager": "rust" @@ -145,7 +145,6 @@ "path": "./plugins/fs", "manager": "javascript" }, - "dialog": { "path": "./plugins/dialog", "manager": "rust", @@ -155,7 +154,6 @@ "path": "./plugins/dialog", "manager": "javascript" }, - "global-shortcut": { "path": "./plugins/global-shortcut", "manager": "rust" @@ -164,7 +162,6 @@ "path": "./plugins/global-shortcut", "manager": "javascript" }, - "http": { "path": "./plugins/http", "manager": "rust", @@ -174,12 +171,10 @@ "path": "./plugins/http", "manager": "javascript" }, - "localhost": { "path": "./plugins/localhost", "manager": "rust" }, - "log-plugin": { "path": "./plugins/log", "manager": "rust" @@ -206,7 +201,6 @@ "path": "./plugins/notification", "manager": "javascript" }, - "os": { "path": "./plugins/os", "manager": "rust" @@ -215,13 +209,11 @@ "path": "./plugins/os", "manager": "javascript" }, - "persisted-scope": { "path": "./plugins/persisted-scope", "manager": "rust", "dependencies": ["fs"] }, - "positioner": { "path": "./plugins/positioner", "manager": "rust" @@ -230,7 +222,6 @@ "path": "./plugins/positioner", "manager": "javascript" }, - "process": { "path": "./plugins/process", "manager": "rust" @@ -239,7 +230,6 @@ "path": "./plugins/process", "manager": "javascript" }, - "shell": { "path": "./plugins/shell", "manager": "rust" @@ -248,12 +238,10 @@ "path": "./plugins/shell", "manager": "javascript" }, - "single-instance": { "path": "./plugins/single-instance", "manager": "rust" }, - "sql": { "path": "./plugins/sql", "manager": "rust", @@ -283,7 +271,6 @@ "path": "./plugins/sql", "manager": "javascript" }, - "store": { "path": "./plugins/store", "manager": "rust" @@ -292,7 +279,6 @@ "path": "./plugins/store", "manager": "javascript" }, - "stronghold": { "path": "./plugins/stronghold", "manager": "rust" @@ -301,7 +287,6 @@ "path": "./plugins/stronghold", "manager": "javascript" }, - "updater": { "path": "./plugins/updater", "manager": "rust" @@ -310,7 +295,6 @@ "path": "./plugins/updater", "manager": "javascript" }, - "upload": { "path": "./plugins/upload", "manager": "rust" @@ -319,7 +303,6 @@ "path": "./plugins/upload", "manager": "javascript" }, - "websocket": { "path": "./plugins/websocket", "manager": "rust" @@ -328,7 +311,6 @@ "path": "./plugins/websocket", "manager": "javascript" }, - "window-state": { "path": "./plugins/window-state", "manager": "rust" diff --git a/Cargo.lock b/Cargo.lock index eeb2dec2..2882567d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -238,6 +238,7 @@ dependencies = [ "tauri", "tauri-build", "tauri-plugin-barcode-scanner", + "tauri-plugin-biometric", "tauri-plugin-cli", "tauri-plugin-clipboard-manager", "tauri-plugin-dialog", @@ -5896,6 +5897,19 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-biometric" +version = "1.0.0" +dependencies = [ + "log", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-build", + "thiserror", +] + [[package]] name = "tauri-plugin-cli" version = "2.0.0-alpha.5" diff --git a/examples/api/package.json b/examples/api/package.json index e1135b54..a968360f 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -11,6 +11,7 @@ "dependencies": { "@tauri-apps/api": "2.0.0-alpha.12", "@tauri-apps/plugin-barcode-scanner": "2.0.0-alpha.3", + "@tauri-apps/plugin-biometric": "1.0.0", "@tauri-apps/plugin-cli": "2.0.0-alpha.4", "@tauri-apps/plugin-clipboard-manager": "2.0.0-alpha.4", "@tauri-apps/plugin-dialog": "2.0.0-alpha.4", diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 5ab61ed6..0774626d 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -48,6 +48,7 @@ tauri-plugin-updater = { path = "../../../plugins/updater", version = "2.0.0-alp [target."cfg(any(target_os = \"android\", target_os = \"ios\"))".dependencies] tauri-plugin-barcode-scanner = { path = "../../../plugins/barcode-scanner/", version = "2.0.0-alpha.3" } tauri-plugin-nfc = { path = "../../../plugins/nfc", version = "1.0.0" } +tauri-plugin-biometric = { path = "../../../plugins/biometric/", version = "1.0.0" } [target."cfg(target_os = \"windows\")".dependencies] window-shadows = "0.2" diff --git a/examples/api/src-tauri/gen/android/.idea/gradle.xml b/examples/api/src-tauri/gen/android/.idea/gradle.xml index b9c0e8d6..76e3b561 100644 --- a/examples/api/src-tauri/gen/android/.idea/gradle.xml +++ b/examples/api/src-tauri/gen/android/.idea/gradle.xml @@ -15,6 +15,7 @@