Browse Source

Merge branch 'main' into mobile_face

Neeraj Gupta 1 year ago
parent
commit
285b1f9527
100 changed files with 386 additions and 393 deletions
  1. 1 1
      .github/workflows/auth-lint.yml
  2. 59 13
      .github/workflows/auth-release.yml
  3. 1 1
      .github/workflows/desktop-lint.yml
  4. 2 5
      .github/workflows/docs-deploy.yml
  5. 1 1
      .github/workflows/docs-verify-build.yml
  6. 1 2
      .github/workflows/mobile-internal-release.yml
  7. 1 1
      .github/workflows/mobile-lint.yml
  8. 1 1
      .github/workflows/server-lint.yml
  9. 0 43
      .github/workflows/web-deploy-accounts.yml
  10. 0 43
      .github/workflows/web-deploy-auth.yml
  11. 0 43
      .github/workflows/web-deploy-cast.yml
  12. 61 0
      .github/workflows/web-deploy-one.yml
  13. 0 43
      .github/workflows/web-deploy-payments.yml
  14. 0 43
      .github/workflows/web-deploy-photos.yml
  15. 3 6
      .github/workflows/web-deploy-preview.yml
  16. 2 5
      .github/workflows/web-deploy-staff.yml
  17. 86 0
      .github/workflows/web-deploy-staging.yml
  18. 27 40
      .github/workflows/web-deploy.yml
  19. 1 1
      .github/workflows/web-lint.yml
  20. 3 0
      .gitignore
  21. 21 20
      auth/android/app/build.gradle
  22. 3 3
      auth/android/app/src/debug/AndroidManifest.xml
  23. 1 2
      auth/android/app/src/main/AndroidManifest.xml
  24. BIN
      auth/android/app/src/main/res/drawable-hdpi/android12splash.png
  25. BIN
      auth/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png
  26. BIN
      auth/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png
  27. BIN
      auth/android/app/src/main/res/drawable-hdpi/splash.png
  28. BIN
      auth/android/app/src/main/res/drawable-mdpi/android12splash.png
  29. BIN
      auth/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png
  30. BIN
      auth/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png
  31. BIN
      auth/android/app/src/main/res/drawable-mdpi/splash.png
  32. BIN
      auth/android/app/src/main/res/drawable-night-hdpi/android12splash.png
  33. BIN
      auth/android/app/src/main/res/drawable-night-hdpi/splash.png
  34. BIN
      auth/android/app/src/main/res/drawable-night-mdpi/android12splash.png
  35. BIN
      auth/android/app/src/main/res/drawable-night-mdpi/splash.png
  36. BIN
      auth/android/app/src/main/res/drawable-night-v21/background.png
  37. BIN
      auth/android/app/src/main/res/drawable-night-xhdpi/android12splash.png
  38. BIN
      auth/android/app/src/main/res/drawable-night-xhdpi/splash.png
  39. BIN
      auth/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png
  40. BIN
      auth/android/app/src/main/res/drawable-night-xxhdpi/splash.png
  41. BIN
      auth/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png
  42. BIN
      auth/android/app/src/main/res/drawable-night-xxxhdpi/splash.png
  43. BIN
      auth/android/app/src/main/res/drawable-night/background.png
  44. BIN
      auth/android/app/src/main/res/drawable-v21/background.png
  45. BIN
      auth/android/app/src/main/res/drawable-xhdpi/android12splash.png
  46. BIN
      auth/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png
  47. BIN
      auth/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png
  48. BIN
      auth/android/app/src/main/res/drawable-xhdpi/splash.png
  49. BIN
      auth/android/app/src/main/res/drawable-xxhdpi/android12splash.png
  50. BIN
      auth/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png
  51. BIN
      auth/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png
  52. BIN
      auth/android/app/src/main/res/drawable-xxhdpi/splash.png
  53. BIN
      auth/android/app/src/main/res/drawable-xxxhdpi/android12splash.png
  54. BIN
      auth/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png
  55. BIN
      auth/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png
  56. BIN
      auth/android/app/src/main/res/drawable-xxxhdpi/splash.png
  57. BIN
      auth/android/app/src/main/res/drawable/background.png
  58. 1 2
      auth/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml
  59. BIN
      auth/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  60. BIN
      auth/android/app/src/main/res/mipmap-hdpi/launcher_icon.png
  61. BIN
      auth/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  62. BIN
      auth/android/app/src/main/res/mipmap-mdpi/launcher_icon.png
  63. BIN
      auth/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  64. BIN
      auth/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
  65. BIN
      auth/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  66. BIN
      auth/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
  67. BIN
      auth/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  68. BIN
      auth/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
  69. 4 1
      auth/android/app/src/main/res/values-night-v31/styles.xml
  70. 1 0
      auth/android/app/src/main/res/values-night/styles.xml
  71. 3 0
      auth/android/app/src/main/res/values-v31/styles.xml
  72. 3 3
      auth/android/app/src/profile/AndroidManifest.xml
  73. 2 13
      auth/android/build.gradle
  74. 1 1
      auth/android/gradle.properties
  75. 1 2
      auth/android/gradle/wrapper/gradle-wrapper.properties
  76. 23 8
      auth/android/settings.gradle
  77. BIN
      auth/assets/generation-icons/icon-light-adaptive-bg.png
  78. BIN
      auth/assets/generation-icons/icon-light-adaptive-fg.png
  79. BIN
      auth/assets/generation-icons/icon-light.png
  80. 1 1
      auth/assets/simple-icons
  81. BIN
      auth/assets/splash-screen-dark.png
  82. BIN
      auth/assets/splash-screen-light.png
  83. BIN
      auth/assets/splash/splash-icon-fg-12.png
  84. BIN
      auth/assets/splash/splash-icon-fg.png
  85. 11 0
      auth/assets/svg/button-tint.svg
  86. 4 0
      auth/assets/svg/pin-active.svg
  87. 11 0
      auth/assets/svg/pin-card.svg
  88. 3 0
      auth/assets/svg/pin-inactive.svg
  89. 1 0
      auth/flutter
  90. 41 45
      auth/ios/Podfile.lock
  91. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
  92. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
  93. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
  94. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
  95. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
  96. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
  97. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
  98. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
  99. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
  100. BIN
      auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png

+ 1 - 1
.github/workflows/auth-lint.yml

@@ -3,7 +3,7 @@ name: "Lint (auth)"
 on:
     # Run on every push to a branch other than main that changes auth/
     push:
-        branches-ignore: [main, "deploy/**", "deploy-f/**"]
+        branches-ignore: [main]
         paths:
             - "auth/**"
             - ".github/workflows/auth-lint.yml"

+ 59 - 13
.github/workflows/auth-release.yml

@@ -85,30 +85,21 @@ jobs:
             - name: Install dependencies for desktop build
               run: |
                   sudo apt-get update -y
-                  sudo apt-get install -y libsecret-1-dev libsodium-dev libwebkit2gtk-4.0-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate appindicator3-0.1 libappindicator3-dev libffi-dev libtiff5
+                  sudo apt-get install -y libsecret-1-dev libsodium-dev libwebkit2gtk-4.0-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config libsqlite3-dev locate appindicator3-0.1 libappindicator3-dev libffi-dev libtiff5
                   sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu'
 
-            - name: Install appimagetool
-              run: |
-                  wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
-                  chmod +x appimagetool
-                  mv appimagetool /usr/local/bin/
-
             - name: Build desktop app
               run: |
                   flutter config --enable-linux-desktop
                   dart pub global activate flutter_distributor
                   flutter_distributor package --platform=linux --targets=deb --skip-clean
-                  flutter_distributor package --platform=linux --targets=rpm --skip-clean
-                  flutter_distributor package --platform=linux --targets=appimage --skip-clean
                   mv dist/**/*-*-linux.deb artifacts/ente-${{ github.ref_name }}-x86_64.deb
-                  mv dist/**/*-*-linux.rpm artifacts/ente-${{ github.ref_name }}-x86_64.rpm
-                  mv dist/**/*-*-linux.AppImage artifacts/ente-${{ github.ref_name }}-x86_64.AppImage
               env:
                   LIBSODIUM_USE_PKGCONFIG: 1
 
-            - name: Generate checksums
-              run: sha256sum artifacts/ente-* > artifacts/sha256sum
+            - name: Generate checksums and push to artifacts
+              run: |
+                sha256sum artifacts/ente-* > artifacts/sha256sum-apk-deb
 
             - name: Create a draft GitHub release
               uses: ncipollo/release-action@v1
@@ -128,6 +119,61 @@ jobs:
                   releaseFiles: auth/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
                   track: internal
 
+    build-fedora-etc:
+      runs-on: ubuntu-latest
+
+      defaults:
+        run:
+          working-directory: auth
+
+      steps:
+        - name: Checkout code and submodules
+          uses: actions/checkout@v4
+          with:
+            submodules: recursive
+
+        - name: Install Flutter ${{ env.FLUTTER_VERSION  }}
+          uses: subosito/flutter-action@v2
+          with:
+            channel: "stable"
+            flutter-version: ${{ env.FLUTTER_VERSION  }}
+            cache: true
+
+        - name: Create artifacts directory
+          run: mkdir artifacts
+
+        - name: Install dependencies for desktop build
+          run: |
+            sudo apt-get update -y
+            sudo apt-get install -y libsecret-1-dev libsodium-dev libwebkit2gtk-4.0-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff5
+            sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu'
+
+        - name: Install appimagetool
+          run: |
+            wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
+            chmod +x appimagetool
+            mv appimagetool /usr/local/bin/
+
+        - name: Build desktop app
+          run: |
+            flutter config --enable-linux-desktop
+            dart pub global activate flutter_distributor
+            flutter_distributor package --platform=linux --targets=rpm --skip-clean
+            flutter_distributor package --platform=linux --targets=appimage --skip-clean
+            mv dist/**/*-*-linux.rpm artifacts/ente-${{ github.ref_name }}-x86_64.rpm
+            mv dist/**/*-*-linux.AppImage artifacts/ente-${{ github.ref_name }}-x86_64.AppImage
+
+        - name: Generate checksums
+          run: sha256sum artifacts/ente-* >> artifacts/sha256sum-rpm-appimage
+
+        - name: Create a draft GitHub release
+          uses: ncipollo/release-action@v1
+          with:
+            artifacts: "auth/artifacts/*"
+            draft: true
+            allowUpdates: true
+            updateOnlyUnreleased: true
+
     build-windows:
         runs-on: windows-latest
 

+ 1 - 1
.github/workflows/desktop-lint.yml

@@ -3,7 +3,7 @@ name: "Lint (desktop)"
 on:
     # Run on every push to a branch other than main that changes desktop/
     push:
-        branches-ignore: [main, "deploy/**", "deploy-f/**"]
+        branches-ignore: [main]
         paths:
             - "desktop/**"
             - ".github/workflows/desktop-lint.yml"

+ 2 - 5
.github/workflows/docs-deploy.yml

@@ -37,11 +37,8 @@ jobs:
               run: yarn build
 
             - name: Publish
-              uses: cloudflare/pages-action@1
+              uses: cloudflare/wrangler-action@v3
               with:
                   accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
                   apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: help
-                  directory: docs/docs/.vitepress/dist
-                  wranglerVersion: "3"
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=help docs/docs/.vitepress/dist

+ 1 - 1
.github/workflows/docs-verify-build.yml

@@ -6,7 +6,7 @@ name: "Verify build (docs)"
 on:
     # Run on every push to a branch other than main that changes docs/
     push:
-        branches-ignore: [main, "deploy/**", "deploy-f/**"]
+        branches-ignore: [main]
         paths:
             - "docs/**"
             - ".github/workflows/docs-verify-build.yml"

+ 1 - 2
.github/workflows/mobile-internal-release.yml

@@ -1,4 +1,4 @@
-name: "Internal Release - Photos"
+name: "Internal release (photos)"
 
 on:
     workflow_dispatch: # Allow manually running the action
@@ -54,4 +54,3 @@ jobs:
                   packageName: io.ente.photos
                   releaseFiles: mobile/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
                   track: internal
-                  changesNotSentForReview: true

+ 1 - 1
.github/workflows/mobile-lint.yml

@@ -3,7 +3,7 @@ name: "Lint (mobile)"
 on:
     # Run on every push to a branch other than main that changes mobile/
     push:
-        branches-ignore: [main, f-droid, "deploy/**", "deploy-f/**"]
+        branches-ignore: [main, f-droid]
         paths:
             - "mobile/**"
             - ".github/workflows/mobile-lint.yml"

+ 1 - 1
.github/workflows/server-lint.yml

@@ -3,7 +3,7 @@ name: "Lint (server)"
 on:
     # Run on every push to a branch other than main that changes server/
     push:
-        branches-ignore: [main, "deploy/**", "deploy-f/**"]
+        branches-ignore: [main]
         paths:
             - "server/**"
             - ".github/workflows/server-lint.yml"

+ 0 - 43
.github/workflows/web-deploy-accounts.yml

@@ -1,43 +0,0 @@
-name: "Deploy (accounts)"
-
-on:
-    push:
-        # Run workflow on pushes to the deploy/accounts
-        branches: [deploy/accounts, deploy-f/accounts]
-
-jobs:
-    deploy:
-        runs-on: ubuntu-latest
-
-        defaults:
-            run:
-                working-directory: web
-
-        steps:
-            - name: Checkout code
-              uses: actions/checkout@v4
-              with:
-                  submodules: recursive
-
-            - name: Setup node and enable yarn caching
-              uses: actions/setup-node@v4
-              with:
-                  node-version: 20
-                  cache: "yarn"
-                  cache-dependency-path: "web/yarn.lock"
-
-            - name: Install dependencies
-              run: yarn install
-
-            - name: Build accounts
-              run: yarn build:accounts
-
-            - name: Publish accounts
-              uses: cloudflare/pages-action@1
-              with:
-                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
-                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: deploy/accounts
-                  directory: web/apps/accounts/out
-                  wranglerVersion: "3"

+ 0 - 43
.github/workflows/web-deploy-auth.yml

@@ -1,43 +0,0 @@
-name: "Deploy (auth)"
-
-on:
-    push:
-        # Run workflow on pushes to the deploy/auth
-        branches: [deploy/auth]
-
-jobs:
-    deploy:
-        runs-on: ubuntu-latest
-
-        defaults:
-            run:
-                working-directory: web
-
-        steps:
-            - name: Checkout code
-              uses: actions/checkout@v4
-              with:
-                  submodules: recursive
-
-            - name: Setup node and enable yarn caching
-              uses: actions/setup-node@v4
-              with:
-                  node-version: 20
-                  cache: "yarn"
-                  cache-dependency-path: "web/yarn.lock"
-
-            - name: Install dependencies
-              run: yarn install
-
-            - name: Build auth
-              run: yarn build:auth
-
-            - name: Publish auth
-              uses: cloudflare/pages-action@1
-              with:
-                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
-                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: deploy/auth
-                  directory: web/apps/auth/out
-                  wranglerVersion: "3"

+ 0 - 43
.github/workflows/web-deploy-cast.yml

@@ -1,43 +0,0 @@
-name: "Deploy (cast)"
-
-on:
-    push:
-        # Run workflow on pushes to the deploy/cast
-        branches: [deploy/cast, deploy-f/cast]
-
-jobs:
-    deploy:
-        runs-on: ubuntu-latest
-
-        defaults:
-            run:
-                working-directory: web
-
-        steps:
-            - name: Checkout code
-              uses: actions/checkout@v4
-              with:
-                  submodules: recursive
-
-            - name: Setup node and enable yarn caching
-              uses: actions/setup-node@v4
-              with:
-                  node-version: 20
-                  cache: "yarn"
-                  cache-dependency-path: "web/yarn.lock"
-
-            - name: Install dependencies
-              run: yarn install
-
-            - name: Build cast
-              run: yarn build:cast
-
-            - name: Publish cast
-              uses: cloudflare/pages-action@1
-              with:
-                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
-                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: deploy/cast
-                  directory: web/apps/cast/out
-                  wranglerVersion: "3"

+ 61 - 0
.github/workflows/web-deploy-one.yml

@@ -0,0 +1,61 @@
+name: "Deploy one (web)"
+
+on:
+    workflow_dispatch:
+        inputs:
+            app:
+                description: "App to build and deploy"
+                type: choice
+                required: true
+                default: "photos"
+                options:
+                    - "accounts"
+                    - "auth"
+                    - "cast"
+                    - "payments"
+                    - "photos"
+
+jobs:
+    deploy:
+        runs-on: ubuntu-latest
+
+        defaults:
+            run:
+                working-directory: web
+
+        steps:
+            - name: Checkout code
+              uses: actions/checkout@v4
+              with:
+                  submodules: recursive
+
+            - name: Setup node and enable yarn caching
+              uses: actions/setup-node@v4
+              with:
+                  node-version: 20
+                  cache: "yarn"
+                  cache-dependency-path: "web/yarn.lock"
+
+            - name: Install dependencies
+              run: yarn install
+
+            - name: Build ${{ inputs.app }}
+              run: yarn build:${{ inputs.app }}
+
+            - name: Publish ${{ inputs.app }} to preview
+              uses: cloudflare/wrangler-action@v3
+              with:
+                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+                  # [Note: Wrangler commit-dirty]
+                  #
+                  # Without the --commit-dirty flag, running the wrangler-action
+                  # always prints a warning when used:
+                  #
+                  #     Warning: Your working directory is a git repo and has uncommitted changes
+                  #     To silence this warning, pass in --commit-dirty=true
+                  #
+                  # There is no clear documentation of if passing this is
+                  # harmless, but all indications and in-practice tests seem to
+                  # indicate so.
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/${{ inputs.app }} web/apps/${{ inputs.app }}/out

+ 0 - 43
.github/workflows/web-deploy-payments.yml

@@ -1,43 +0,0 @@
-name: "Deploy (payments)"
-
-on:
-    push:
-        # Run workflow on pushes to the deploy/payments
-        branches: [deploy/payments]
-
-jobs:
-    deploy:
-        runs-on: ubuntu-latest
-
-        defaults:
-            run:
-                working-directory: web
-
-        steps:
-            - name: Checkout code
-              uses: actions/checkout@v4
-              with:
-                  submodules: recursive
-
-            - name: Setup node and enable yarn caching
-              uses: actions/setup-node@v4
-              with:
-                  node-version: 20
-                  cache: "yarn"
-                  cache-dependency-path: "web/yarn.lock"
-
-            - name: Install dependencies
-              run: yarn install
-
-            - name: Build payments
-              run: yarn build:payments
-
-            - name: Publish payments
-              uses: cloudflare/pages-action@1
-              with:
-                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
-                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: deploy/payments
-                  directory: web/apps/payments/dist
-                  wranglerVersion: "3"

+ 0 - 43
.github/workflows/web-deploy-photos.yml

@@ -1,43 +0,0 @@
-name: "Deploy (photos)"
-
-on:
-    push:
-        # Run workflow on pushes to the deploy/photos
-        branches: [deploy/photos]
-
-jobs:
-    deploy:
-        runs-on: ubuntu-latest
-
-        defaults:
-            run:
-                working-directory: web
-
-        steps:
-            - name: Checkout code
-              uses: actions/checkout@v4
-              with:
-                  submodules: recursive
-
-            - name: Setup node and enable yarn caching
-              uses: actions/setup-node@v4
-              with:
-                  node-version: 20
-                  cache: "yarn"
-                  cache-dependency-path: "web/yarn.lock"
-
-            - name: Install dependencies
-              run: yarn install
-
-            - name: Build photos
-              run: yarn build:photos
-
-            - name: Publish photos
-              uses: cloudflare/pages-action@1
-              with:
-                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
-                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: deploy/photos
-                  directory: web/apps/photos/out
-                  wranglerVersion: "3"

+ 3 - 6
.github/workflows/web-preview.yml → .github/workflows/web-deploy-preview.yml

@@ -1,4 +1,4 @@
-name: "Preview (web)"
+name: "Deploy preview (web)"
 
 on:
     workflow_dispatch:
@@ -43,11 +43,8 @@ jobs:
               run: yarn build:${{ inputs.app }}
 
             - name: Publish ${{ inputs.app }} to preview
-              uses: cloudflare/pages-action@1
+              uses: cloudflare/wrangler-action@v3
               with:
                   accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
                   apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: preview
-                  directory: web/apps/${{ inputs.app }}/out
-                  wranglerVersion: "3"
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=preview web/apps/${{ inputs.app }}/out

+ 2 - 5
.github/workflows/web-deploy-staff.yml

@@ -38,11 +38,8 @@ jobs:
               run: yarn build:staff
 
             - name: Publish staff
-              uses: cloudflare/pages-action@1
+              uses: cloudflare/wrangler-action@v3
               with:
                   accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
                   apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: deploy/staff
-                  directory: web/apps/staff/dist
-                  wranglerVersion: "3"
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/staff web/apps/staff/dist

+ 86 - 0
.github/workflows/web-deploy-staging.yml

@@ -0,0 +1,86 @@
+name: "Deploy staging (web)"
+
+on:
+    schedule:
+        # Run everyday at ~3:00 PM IST
+        #
+        # See: [Note: Run workflow every 24 hours]
+        - cron: "25 9 * * *"
+    # Also allow manually running the workflow
+    workflow_dispatch:
+
+jobs:
+    deploy:
+        runs-on: ubuntu-latest
+
+        defaults:
+            run:
+                working-directory: web
+
+        steps:
+            - name: Checkout code
+              uses: actions/checkout@v4
+              with:
+                  submodules: recursive
+
+            - name: Setup node and enable yarn caching
+              uses: actions/setup-node@v4
+              with:
+                  node-version: 20
+                  cache: "yarn"
+                  cache-dependency-path: "web/yarn.lock"
+
+            - name: Install dependencies
+              run: yarn install
+
+            - name: Build photos
+              run: yarn build:photos
+              env:
+                  NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT: https://albums.ente.sh
+
+            - name: Publish photos
+              uses: cloudflare/wrangler-action@v3
+              with:
+                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=n-photos web/apps/photos/out
+
+            - name: Build accounts
+              run: yarn build:accounts
+
+            - name: Publish accounts
+              uses: cloudflare/wrangler-action@v3
+              with:
+                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=n-accounts web/apps/accounts/out
+
+            - name: Build auth
+              run: yarn build:auth
+
+            - name: Publish auth
+              uses: cloudflare/wrangler-action@v3
+              with:
+                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=n-auth  web/apps/auth/out
+
+            - name: Build cast
+              run: yarn build:cast
+
+            - name: Publish cast
+              uses: cloudflare/wrangler-action@v3
+              with:
+                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=n-cast web/apps/cast/out
+
+            - name: Build payments
+              run: yarn build:payments
+
+            - name: Publish payments
+              uses: cloudflare/wrangler-action@v3
+              with:
+                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=n-payments web/apps/payments/dist

+ 27 - 40
.github/workflows/web-nightly.yml → .github/workflows/web-deploy.yml

@@ -1,17 +1,21 @@
-name: "Nightly (web)"
+name: "Deploy (web)"
 
 on:
     schedule:
         # [Note: Run workflow every 24 hours]
         #
-        # Run every 24 hours - First field is minute, second is hour of the day
-        # This runs 23:15 UTC everyday - 1 and 15 are just arbitrary offset to
-        # avoid scheduling it on the exact hour, as suggested by GitHub.
+        # Run everyday at ~8:00 AM IST (except Sundays).
+        #
+        # First field is minute, second is hour of the day. Last is day of week,
+        # 0 being Sunday.
+        #
+        # Add a few minutes of offset to avoid scheduling on exact hourly
+        # boundaries (recommended by GitHub to avoid congestion).
         #
         # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
         # https://crontab.guru/
         #
-        - cron: "15 23 * * *"
+        - cron: "25 2 * * 1-6"
     # Also allow manually running the workflow
     workflow_dispatch:
 
@@ -39,69 +43,52 @@ jobs:
             - name: Install dependencies
               run: yarn install
 
+            - name: Build photos
+              run: yarn build:photos
+
+            - name: Publish photos
+              uses: cloudflare/wrangler-action@v3
+              with:
+                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/photos web/apps/photos/out
+
             - name: Build accounts
               run: yarn build:accounts
 
             - name: Publish accounts
-              uses: cloudflare/pages-action@1
+              uses: cloudflare/wrangler-action@v3
               with:
                   accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
                   apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: n-accounts
-                  directory: web/apps/accounts/out
-                  wranglerVersion: "3"
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/accounts web/apps/accounts/out
 
             - name: Build auth
               run: yarn build:auth
 
             - name: Publish auth
-              uses: cloudflare/pages-action@1
+              uses: cloudflare/wrangler-action@v3
               with:
                   accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
                   apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: n-auth
-                  directory: web/apps/auth/out
-                  wranglerVersion: "3"
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/auth web/apps/auth/out
 
             - name: Build cast
               run: yarn build:cast
 
             - name: Publish cast
-              uses: cloudflare/pages-action@1
+              uses: cloudflare/wrangler-action@v3
               with:
                   accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
                   apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: n-cast
-                  directory: web/apps/cast/out
-                  wranglerVersion: "3"
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/cast web/apps/cast/out
 
             - name: Build payments
               run: yarn build:payments
 
             - name: Publish payments
-              uses: cloudflare/pages-action@1
-              with:
-                  accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
-                  apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: n-payments
-                  directory: web/apps/payments/dist
-                  wranglerVersion: "3"
-
-            - name: Build photos
-              run: yarn build:photos
-              env:
-                  NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT: https://albums.ente.sh
-
-            - name: Publish photos
-              uses: cloudflare/pages-action@1
+              uses: cloudflare/wrangler-action@v3
               with:
                   accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
                   apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
-                  projectName: ente
-                  branch: n-photos
-                  directory: web/apps/photos/out
-                  wranglerVersion: "3"
+                  command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/payments web/apps/payments/dist

+ 1 - 1
.github/workflows/web-lint.yml

@@ -3,7 +3,7 @@ name: "Lint (web)"
 on:
     # Run on every push to a branch other than main that changes web/
     push:
-        branches-ignore: [main, "deploy/**", "deploy-f/**"]
+        branches-ignore: [main]
         paths:
             - "web/**"
             - ".github/workflows/web-lint.yml"

+ 3 - 0
.gitignore

@@ -3,3 +3,6 @@
 
 # macOS
 .DS_Store
+.idea
+.ente.authenticator.db
+.ente.offline_authenticator.db

+ 21 - 20
auth/android/app/build.gradle

@@ -1,3 +1,9 @@
+plugins {
+    id "com.android.application"
+    id "kotlin-android"
+    id "dev.flutter.flutter-gradle-plugin"
+}
+
 def localProperties = new Properties()
 def localPropertiesFile = rootProject.file('local.properties')
 if (localPropertiesFile.exists()) {
@@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) {
     }
 }
 
-def flutterRoot = localProperties.getProperty('flutter.sdk')
-if (flutterRoot == null) {
-    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
-}
-
 def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
 if (flutterVersionCode == null) {
     flutterVersionCode = '1'
@@ -21,10 +22,6 @@ if (flutterVersionName == null) {
     flutterVersionName = '1.0'
 }
 
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
-
 def keystoreProperties = new Properties()
 def keystorePropertiesFile = rootProject.file('key.properties')
 if (keystorePropertiesFile.exists()) {
@@ -32,7 +29,18 @@ if (keystorePropertiesFile.exists()) {
 }
 
 android {
-    compileSdkVersion 34
+    namespace "io.ente.auth"
+    compileSdk 34
+    ndkVersion flutter.ndkVersion
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    kotlinOptions {
+        jvmTarget = '1.8'
+    }
 
     sourceSets {
         main.java.srcDirs += 'src/main/kotlin'
@@ -46,6 +54,8 @@ android {
 
     defaultConfig {
         applicationId "io.ente.auth"
+        // You can update the following values to match your application needs.
+        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
         minSdkVersion 21
         targetSdkVersion 33
         versionCode flutterVersionCode.toInteger()
@@ -105,13 +115,4 @@ flutter {
     source '../..'
 }
 
-dependencies {
-    implementation 'io.sentry:sentry-android:2.0.0'
-    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
-    implementation 'com.android.support:multidex:1.0.3'
-    implementation 'com.google.guava:guava:28.2-android'
-    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
-    testImplementation 'junit:junit:4.12'
-    androidTestImplementation 'androidx.test:runner:1.1.1'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
-}
+dependencies {}

+ 3 - 3
auth/android/app/src/debug/AndroidManifest.xml

@@ -1,6 +1,6 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="io.ente.auth">
-    <!-- Flutter needs it to communicate with the running application
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- The INTERNET permission is required for development. Specifically,
+         the Flutter tool needs it to communicate with the running application
          to allow setting breakpoints, to provide hot reload, etc.
     -->
     <uses-permission android:name="android.permission.INTERNET"/>

+ 1 - 2
auth/android/app/src/main/AndroidManifest.xml

@@ -1,6 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          xmlns:tools="http://schemas.android.com/tools"
-          package="io.ente.auth">
+          xmlns:tools="http://schemas.android.com/tools">
     <application android:name="${applicationName}"
                  android:label="auth"
                  android:icon="@mipmap/launcher_icon"

BIN
auth/android/app/src/main/res/drawable-hdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png


BIN
auth/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png


BIN
auth/android/app/src/main/res/drawable-hdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-mdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png


BIN
auth/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png


BIN
auth/android/app/src/main/res/drawable-mdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-night-hdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-night-hdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-night-mdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-night-mdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-night-v21/background.png


BIN
auth/android/app/src/main/res/drawable-night-xhdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-night-xhdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-night-xxhdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-night-xxxhdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-night/background.png


BIN
auth/android/app/src/main/res/drawable-v21/background.png


BIN
auth/android/app/src/main/res/drawable-xhdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png


BIN
auth/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png


BIN
auth/android/app/src/main/res/drawable-xhdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-xxhdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png


BIN
auth/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png


BIN
auth/android/app/src/main/res/drawable-xxhdpi/splash.png


BIN
auth/android/app/src/main/res/drawable-xxxhdpi/android12splash.png


BIN
auth/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png


BIN
auth/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png


BIN
auth/android/app/src/main/res/drawable-xxxhdpi/splash.png


BIN
auth/android/app/src/main/res/drawable/background.png


+ 1 - 2
auth/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
-  <background android:drawable="@color/ic_launcher_background"/>
+  <background android:drawable="@drawable/ic_launcher_background"/>
   <foreground android:drawable="@drawable/ic_launcher_foreground"/>
-  <monochrome android:drawable="@drawable/ic_launcher_foreground"/>
 </adaptive-icon>

BIN
auth/android/app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
auth/android/app/src/main/res/mipmap-hdpi/launcher_icon.png


BIN
auth/android/app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
auth/android/app/src/main/res/mipmap-mdpi/launcher_icon.png


BIN
auth/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
auth/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png


BIN
auth/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
auth/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png


BIN
auth/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


BIN
auth/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png


+ 4 - 1
auth/android/app/src/main/res/values-night-v31/styles.xml

@@ -4,7 +4,10 @@
     <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
         <item name="android:forceDarkAllowed">false</item>
         <item name="android:windowFullscreen">false</item>
+        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
+        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
         <item name="android:windowSplashScreenBackground">#000000</item>
+        <item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
     </style>
     <!-- Theme applied to the Android Window as soon as the process has started.
          This theme determines the color of the Android Window while your
@@ -15,4 +18,4 @@
     <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
         <item name="android:windowBackground">?android:colorBackground</item>
     </style>
-</resources>
+</resources>

+ 1 - 0
auth/android/app/src/main/res/values-night/styles.xml

@@ -7,6 +7,7 @@
         <item name="android:windowBackground">@drawable/launch_background</item>
         <item name="android:forceDarkAllowed">false</item>
         <item name="android:windowFullscreen">false</item>
+        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
         <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
     </style>
     <!-- Theme applied to the Android Window as soon as the process has started.

+ 3 - 0
auth/android/app/src/main/res/values-v31/styles.xml

@@ -4,7 +4,10 @@
     <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
         <item name="android:forceDarkAllowed">false</item>
         <item name="android:windowFullscreen">false</item>
+        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
         <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
+        <item name="android:windowSplashScreenBackground">#FFFFFF</item>
+        <item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
     </style>
     <!-- Theme applied to the Android Window as soon as the process has started.
          This theme determines the color of the Android Window while your

+ 3 - 3
auth/android/app/src/profile/AndroidManifest.xml

@@ -1,6 +1,6 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="io.ente.auth">
-    <!-- Flutter needs it to communicate with the running application
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- The INTERNET permission is required for development. Specifically,
+         the Flutter tool needs it to communicate with the running application
          to allow setting breakpoints, to provide hot reload, etc.
     -->
     <uses-permission android:name="android.permission.INTERNET"/>

+ 2 - 13
auth/android/build.gradle

@@ -1,16 +1,3 @@
-buildscript {
-    ext.kotlin_version = '1.8.22'
-    repositories {
-        google()
-        mavenCentral()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:7.1.2'
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-    }
-}
-
 allprojects {
     repositories {
         google()
@@ -21,6 +8,8 @@ allprojects {
 rootProject.buildDir = '../build'
 subprojects {
     project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
     project.evaluationDependsOn(':app')
 }
 

+ 1 - 1
auth/android/gradle.properties

@@ -1,3 +1,3 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4G
 android.useAndroidX=true
 android.enableJetifier=true

+ 1 - 2
auth/android/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,5 @@
-#Fri Jun 23 08:50:38 CEST 2017
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip

+ 23 - 8
auth/android/settings.gradle

@@ -1,11 +1,26 @@
-include ':app'
+pluginManagement {
+    def flutterSdkPath = {
+        def properties = new Properties()
+        file("local.properties").withInputStream { properties.load(it) }
+        def flutterSdkPath = properties.getProperty("flutter.sdk")
+        assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+        return flutterSdkPath
+    }
+    settings.ext.flutterSdkPath = flutterSdkPath()
 
-def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
-def properties = new Properties()
+    includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
 
-assert localPropertiesFile.exists()
-localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
+    repositories {
+        google()
+        mavenCentral()
+        gradlePluginPortal()
+    }
+}
 
-def flutterSdkPath = properties.getProperty("flutter.sdk")
-assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
-apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
+plugins {
+    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+    id "com.android.application" version "7.3.0" apply false
+    id "org.jetbrains.kotlin.android" version "1.8.22" apply false
+}
+
+include ":app"

BIN
auth/assets/generation-icons/icon-light-adaptive-bg.png


BIN
auth/assets/generation-icons/icon-light-adaptive-fg.png


BIN
auth/assets/generation-icons/icon-light.png


+ 1 - 1
auth/assets/simple-icons

@@ -1 +1 @@
-Subproject commit 8e7701d6a40462733043f54b3849faf35af70a83
+Subproject commit 8a3731352af133a02223a6c7b1f37c4abb096af0

BIN
auth/assets/splash-screen-dark.png


BIN
auth/assets/splash-screen-light.png


BIN
auth/assets/splash/splash-icon-fg-12.png


BIN
auth/assets/splash/splash-icon-fg.png


+ 11 - 0
auth/assets/svg/button-tint.svg

@@ -0,0 +1,11 @@
+<svg width="286" height="44" viewBox="0 0 286 44" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="286" height="44" fill="#531DAB"/>
+<rect width="286" height="44" fill="url(#paint0_linear_25656_80129)" style="mix-blend-mode:soft-light"/>
+<defs>
+<linearGradient id="paint0_linear_25656_80129" x1="286.174" y1="43.5575" x2="272.305" y2="-42.2227" gradientUnits="userSpaceOnUse">
+<stop offset="0.00134129" stop-color="#B37FEB"/>
+<stop offset="0.15" stop-color="#D2AEF5" stop-opacity="0"/>
+<stop offset="0.829143" stop-color="#EFDBFF"/>
+</linearGradient>
+</defs>
+</svg>

+ 4 - 0
auth/assets/svg/pin-active.svg

@@ -0,0 +1,4 @@
+<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5.67969 9.13704L7.30255 10.7599L11.3597 14.817L12.1711 14.0056L12.9825 10.7599L14.6054 8.32561L17.0397 7.51418V6.70275L13.794 3.45703L12.1711 5.07989L9.73683 8.32561H7.30255L5.67969 9.13704Z" fill="black"/>
+<path d="M13.3183 1.71931L13.269 1.77093L13.2168 1.71985L13.2162 1.72046L13.1634 1.77327L13.1645 1.77432L12.7776 2.17734L12.7776 2.17732L12.7762 2.1788C12.1335 2.88609 11.8262 3.77724 11.7519 4.66728L9.32505 7.09411C7.81108 6.83615 6.18671 7.26627 5.01998 8.433L4.5818 8.87117L4.5289 8.92408L4.58307 8.97568L5.0206 9.39255L7.593 11.965L2.58519 16.9523L2.56369 16.9737V17.004V17.8603V17.9333H2.63672H3.49237H3.5227L3.54411 17.9118L8.53265 12.9046L11.0473 15.4205L11.4655 15.8569L11.5172 15.9108L11.5699 15.8579L12.0068 15.4199C12.0068 15.4198 12.0068 15.4198 12.0069 15.4198C13.2915 14.1363 13.6624 12.3762 13.2912 10.7902L15.4057 8.67503C16.4706 8.79297 17.5592 8.48109 18.3396 7.70071L18.3408 7.69952L18.7595 7.26135L18.8076 7.21094L18.7595 7.16049L18.3414 6.72231L18.3414 6.7223L18.3402 6.72109L13.7759 2.1568L13.7759 2.15679L13.7748 2.15565L13.3183 1.71931ZM14.9413 7.25429L14.9004 7.24301L14.8703 7.27306L14.6232 7.52014L14.6232 7.52015L12.0758 10.0682L12.0756 10.0684L11.8091 10.3361L11.7778 10.3675L11.7912 10.4097L11.9056 10.7706L11.906 10.7716C12.2473 11.7962 12.1016 12.9497 11.4516 13.9063L6.59236 9.04707C7.44951 8.48202 8.46219 8.23203 9.40643 8.47956L9.72799 8.5736L9.76941 8.58571L9.8 8.55527L10.0483 8.30819L10.0484 8.30806L12.8631 5.49281L12.8631 5.49281L13.0335 5.32241L13.0549 5.30102V5.27077V5.02248C13.0549 4.58263 13.2053 4.16125 13.4189 3.75595L16.7417 7.07936C16.2718 7.33067 15.7795 7.47262 15.2832 7.3484L14.9413 7.25429Z" fill="black" stroke="black" stroke-width="0.146057"/>
+</svg>

+ 11 - 0
auth/assets/svg/pin-card.svg

@@ -0,0 +1,11 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_25342_9412)">
+<path d="M3 5.5L4 6.5L6.5 9L7 8.5L7.5 6.5L8.5 5L10 4.5L10 4L8 2L7 3L5.5 5L4 5L3 5.5Z" fill="#9610D6"/>
+<path d="M7.67655 0.960601L7.70697 0.928785L7.98822 1.19766L7.98895 1.19836L7.98894 1.19837L10.8014 4.01087L10.8022 4.01161L10.8022 4.01162L11.0598 4.28162L11.0895 4.31271L11.0598 4.34378L10.8018 4.61378L10.8011 4.61451C10.3202 5.09537 9.64942 5.28755 8.9932 5.21488L7.69023 6.51822C7.91896 7.49551 7.69045 8.58009 6.89886 9.37096L7.67655 0.960601ZM7.67655 0.960601L7.64442 0.929125L7.64405 0.9295L7.61152 0.962044L7.61219 0.962686L7.37379 1.21102L7.37377 1.21101L7.37295 1.21192C6.97691 1.64775 6.78753 2.19688 6.74173 2.74532M7.67655 0.960601L6.74173 2.74532M6.74173 2.74532L5.24633 4.24072C4.31342 4.08177 3.31249 4.34681 2.59355 5.06574L2.32356 5.33574L2.29096 5.36834L2.32433 5.40014L2.59394 5.65702L4.17904 7.24212L1.09325 10.3153L1.08 10.3285L1.08 10.3472L1.08 10.8748L1.08 10.9198L1.125 10.9198L1.65225 10.9198L1.67094 10.9198L1.68413 10.9066L4.75805 7.82114L6.30726 9.37107L6.30792 9.37175L6.56526 9.64032L6.59711 9.67356L6.62961 9.64096L6.8988 9.37102L6.74173 2.74532ZM8.70707 4.33943L8.68182 4.33248L8.6633 4.35099L8.51105 4.50324L8.51105 4.50325L6.9413 6.07337L6.94123 6.07344L6.77698 6.23844L6.75773 6.25778L6.76598 6.28379L6.83648 6.50616L6.83647 6.50616L6.83668 6.50679C7.047 7.13811 6.95722 7.84894 6.55667 8.43835L3.56245 5.44413C4.09062 5.09595 4.71463 4.94191 5.29647 5.09443L5.49462 5.15238L5.52014 5.15984L5.53899 5.14109L5.69199 4.98884L5.69207 4.98875L7.42644 3.25401L7.42645 3.254L7.53144 3.14901L7.54462 3.13583L7.54462 3.11719L7.54462 2.96419C7.54462 2.69316 7.63733 2.4335 7.76892 2.18376L9.81644 4.23163C9.52687 4.38649 9.22356 4.47396 8.91769 4.39741L8.70707 4.33943Z" fill="#9610D6" stroke="#9610D6" stroke-width="0.09"/>
+</g>
+<defs>
+<clipPath id="clip0_25342_9412">
+<rect width="12" height="12" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 3 - 0
auth/assets/svg/pin-inactive.svg

@@ -0,0 +1,3 @@
+<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M13.1853 2.04353L13.136 2.09515L13.0839 2.04407L13.0832 2.04468L13.0304 2.09748L13.0315 2.09854L12.6447 2.50148L12.6447 2.50146L12.6434 2.50294C12.0008 3.21009 11.6935 4.10106 11.6192 4.99092L9.19285 7.41726C7.67919 7.15935 6.05514 7.58939 4.88864 8.75589L4.45056 9.19397L4.39766 9.24686L4.45182 9.29846L4.88926 9.71525L7.46115 12.2871L2.45434 17.2735L2.43285 17.2949V17.3252V18.1813V18.2543H2.50586H3.36134H3.39166L3.41307 18.2328L8.40061 13.2266L10.9148 15.742L11.3329 16.1783L11.3845 16.2322L11.4373 16.1793L11.8741 15.7413C11.8741 15.7413 11.8741 15.7413 11.8741 15.7413C13.1585 14.4581 13.5293 12.6983 13.1582 11.1126L15.2723 8.99787C16.337 9.11579 17.4254 8.80396 18.2056 8.02374L18.2068 8.02256L18.6254 7.58447L18.6735 7.53407L18.6254 7.48363L18.2074 7.04554L18.2074 7.04553L18.2062 7.04432L13.6428 2.48094L13.6429 2.48093L13.6417 2.47979L13.1853 2.04353ZM14.808 7.57742L14.7671 7.56614L14.737 7.59618L14.49 7.84321L14.49 7.84322L11.943 10.3908L11.9429 10.3909L11.6764 10.6586L11.6452 10.69L11.6585 10.7322L11.7729 11.093L11.7729 11.093L11.7733 11.094C12.1145 12.1184 11.9688 13.2717 11.3189 14.2281L6.46071 9.36983C7.31768 8.8049 8.33015 8.55496 9.2742 8.80243L9.59571 8.89646L9.63712 8.90857L9.66771 8.87813L9.91596 8.6311L9.91609 8.63097L12.7302 5.81628L12.9005 5.64592L12.9219 5.62453V5.59429V5.34604C12.9219 4.90629 13.0723 4.48499 13.2858 4.07977L16.608 7.40252C16.1382 7.65378 15.6461 7.7957 15.1498 7.6715L14.808 7.57742Z" fill="black" stroke="black" stroke-width="0.146028"/>
+</svg>

+ 1 - 0
auth/flutter

@@ -0,0 +1 @@
+Subproject commit ba393198430278b6595976de84fe170f553cc728

+ 41 - 45
auth/ios/Podfile.lock

@@ -6,35 +6,35 @@ PODS:
     - ReachabilitySwift
   - device_info_plus (0.0.1):
     - Flutter
-  - DKImagePickerController/Core (4.3.4):
+  - DKImagePickerController/Core (4.3.9):
     - DKImagePickerController/ImageDataManager
     - DKImagePickerController/Resource
-  - DKImagePickerController/ImageDataManager (4.3.4)
-  - DKImagePickerController/PhotoGallery (4.3.4):
+  - DKImagePickerController/ImageDataManager (4.3.9)
+  - DKImagePickerController/PhotoGallery (4.3.9):
     - DKImagePickerController/Core
     - DKPhotoGallery
-  - DKImagePickerController/Resource (4.3.4)
-  - DKPhotoGallery (0.0.17):
-    - DKPhotoGallery/Core (= 0.0.17)
-    - DKPhotoGallery/Model (= 0.0.17)
-    - DKPhotoGallery/Preview (= 0.0.17)
-    - DKPhotoGallery/Resource (= 0.0.17)
+  - DKImagePickerController/Resource (4.3.9)
+  - DKPhotoGallery (0.0.19):
+    - DKPhotoGallery/Core (= 0.0.19)
+    - DKPhotoGallery/Model (= 0.0.19)
+    - DKPhotoGallery/Preview (= 0.0.19)
+    - DKPhotoGallery/Resource (= 0.0.19)
     - SDWebImage
     - SwiftyGif
-  - DKPhotoGallery/Core (0.0.17):
+  - DKPhotoGallery/Core (0.0.19):
     - DKPhotoGallery/Model
     - DKPhotoGallery/Preview
     - SDWebImage
     - SwiftyGif
-  - DKPhotoGallery/Model (0.0.17):
+  - DKPhotoGallery/Model (0.0.19):
     - SDWebImage
     - SwiftyGif
-  - DKPhotoGallery/Preview (0.0.17):
+  - DKPhotoGallery/Preview (0.0.19):
     - DKPhotoGallery/Model
     - DKPhotoGallery/Resource
     - SDWebImage
     - SwiftyGif
-  - DKPhotoGallery/Resource (0.0.17):
+  - DKPhotoGallery/Resource (0.0.19):
     - SDWebImage
     - SwiftyGif
   - file_picker (0.0.1):
@@ -81,17 +81,15 @@ PODS:
   - qr_code_scanner (0.2.0):
     - Flutter
     - MTBBarcodeScanner
-  - ReachabilitySwift (5.2.1)
-  - SDWebImage (5.19.0):
-    - SDWebImage/Core (= 5.19.0)
-  - SDWebImage/Core (5.19.0)
-  - Sentry/HybridSDK (8.21.0):
-    - SentryPrivate (= 8.21.0)
-  - sentry_flutter (7.19.0):
+  - ReachabilitySwift (5.2.2)
+  - SDWebImage (5.19.2):
+    - SDWebImage/Core (= 5.19.2)
+  - SDWebImage/Core (5.19.2)
+  - Sentry/HybridSDK (8.25.0)
+  - sentry_flutter (7.20.1):
     - Flutter
     - FlutterMacOS
-    - Sentry/HybridSDK (= 8.21.0)
-  - SentryPrivate (8.21.0)
+    - Sentry/HybridSDK (= 8.25.0)
   - share_plus (0.0.1):
     - Flutter
   - shared_preferences_foundation (0.0.1):
@@ -102,23 +100,23 @@ PODS:
   - sqflite (0.0.3):
     - Flutter
     - FlutterMacOS
-  - sqlite3 (3.45.1):
-    - sqlite3/common (= 3.45.1)
-  - sqlite3/common (3.45.1)
-  - sqlite3/fts5 (3.45.1):
+  - "sqlite3 (3.45.3+1)":
+    - "sqlite3/common (= 3.45.3+1)"
+  - "sqlite3/common (3.45.3+1)"
+  - "sqlite3/fts5 (3.45.3+1)":
     - sqlite3/common
-  - sqlite3/perf-threadsafe (3.45.1):
+  - "sqlite3/perf-threadsafe (3.45.3+1)":
     - sqlite3/common
-  - sqlite3/rtree (3.45.1):
+  - "sqlite3/rtree (3.45.3+1)":
     - sqlite3/common
   - sqlite3_flutter_libs (0.0.1):
     - Flutter
-    - sqlite3 (~> 3.45.1)
+    - "sqlite3 (~> 3.45.3+1)"
     - sqlite3/fts5
     - sqlite3/perf-threadsafe
     - sqlite3/rtree
-  - SwiftyGif (5.4.4)
-  - Toast (4.1.0)
+  - SwiftyGif (5.4.5)
+  - Toast (4.1.1)
   - url_launcher_ios (0.0.1):
     - Flutter
 
@@ -160,7 +158,6 @@ SPEC REPOS:
     - ReachabilitySwift
     - SDWebImage
     - Sentry
-    - SentryPrivate
     - sqlite3
     - SwiftyGif
     - Toast
@@ -225,19 +222,19 @@ SPEC CHECKSUMS:
   app_links: e70ca16b4b0f88253b3b3660200d4a10b4ea9795
   connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
   device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
-  DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
-  DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
+  DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
+  DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
   file_picker: 15fd9539e4eb735dc54bae8c0534a7a9511a03de
   file_saver: 503e386464dbe118f630e17b4c2e1190fa0cf808
   fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545
   Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
-  flutter_email_sender: 02d7443217d8c41483223627972bfdc09f74276b
+  flutter_email_sender: 10a22605f92809a11ef52b2f412db806c6082d40
   flutter_inappwebview_ios: 97215cf7d4677db55df76782dbd2930c5e1c1ea0
   flutter_local_authentication: 1172a4dd88f6306dadce067454e2c4caf07977bb
   flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
   flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778
   flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
-  fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
+  fluttertoast: 9f2f8e81bb5ce18facb9748d7855bf5a756fe3db
   local_auth_darwin: c7e464000a6a89e952235699e32b329457608d98
   move_to_background: 39a5b79b26d577b0372cbe8a8c55e7aa9fcd3a2d
   MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
@@ -246,19 +243,18 @@ SPEC CHECKSUMS:
   path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
   privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e
   qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
-  ReachabilitySwift: 5ae15e16814b5f9ef568963fb2c87aeb49158c66
-  SDWebImage: 981fd7e860af070920f249fd092420006014c3eb
-  Sentry: ebc12276bd17613a114ab359074096b6b3725203
-  sentry_flutter: 88ebea3f595b0bc16acc5bedacafe6d60c12dcd5
-  SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe
+  ReachabilitySwift: 2128f3a8c9107e1ad33574c6e58e8285d460b149
+  SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a
+  Sentry: cd86fc55628f5b7c572cabe66cc8f95a9d2f165a
+  sentry_flutter: 4cb24c1055c556d7b27262ab2e179d1e5a0b9b0c
   share_plus: c3fef564749587fc939ef86ffb283ceac0baf9f5
   shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
   sodium_libs: 1faae17af662384acbd13e41867a0008cd2e2318
   sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
-  sqlite3: 73b7fc691fdc43277614250e04d183740cb15078
-  sqlite3_flutter_libs: af0e8fe9bce48abddd1ffdbbf839db0302d72d80
-  SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
-  Toast: ec33c32b8688982cecc6348adeae667c1b9938da
+  sqlite3: 02d1f07eaaa01f80a1c16b4b31dfcbb3345ee01a
+  sqlite3_flutter_libs: 9bfe005308998aeca155330bbc2ea6dddf834a3b
+  SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
+  Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
   url_launcher_ios: 6116280ddcfe98ab8820085d8d76ae7449447586
 
 PODFILE CHECKSUM: b4e3a7eabb03395b66e81fc061789f61526ee6bb

BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png


BIN
auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png


Some files were not shown because too many files changed in this diff