Compare commits
280 Commits
ios-workfl
...
ghcr/serve
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1fe2a941ff | ||
|
|
4e622fc48a | ||
|
|
b11d0e7c94 | ||
|
|
ea0e2ed664 | ||
|
|
01d70d1b5e | ||
|
|
7165db3cd9 | ||
|
|
ee3829675b | ||
|
|
9ee86fc6a0 | ||
|
|
c46c009bee | ||
|
|
e9786d8ee5 | ||
|
|
dbc36c7129 | ||
|
|
e00c9795f0 | ||
|
|
db7a7c3f7a | ||
|
|
33b8039348 | ||
|
|
249206eadf | ||
|
|
2bf24be08e | ||
|
|
7cc4ab57f3 | ||
|
|
c84c29ed74 | ||
|
|
cb03173c46 | ||
|
|
13a015434b | ||
|
|
249009ae7e | ||
|
|
b82956792a | ||
|
|
4ba03d9a6a | ||
|
|
d6b4eec9b4 | ||
|
|
fb2743a8fe | ||
|
|
c9c39b30ec | ||
|
|
9eeb7efd4f | ||
|
|
9fb52b8f95 | ||
|
|
8e7a6d2034 | ||
|
|
9568c4819f | ||
|
|
6e6ed7ea64 | ||
|
|
da590a643f | ||
|
|
21c8af01a2 | ||
|
|
00549d413e | ||
|
|
75e7fa5cde | ||
|
|
1e81abf9d9 | ||
|
|
e9c41aed1e | ||
|
|
0784da5b4e | ||
|
|
633caa7883 | ||
|
|
d4635c415b | ||
|
|
f3e5297878 | ||
|
|
5e993b9526 | ||
|
|
29d316349b | ||
|
|
95ed8d23de | ||
|
|
97d8d9fa8d | ||
|
|
149eb6c38d | ||
|
|
4c57c6b30f | ||
|
|
3d12812671 | ||
|
|
440818f1af | ||
|
|
18e7a52848 | ||
|
|
b099d16a32 | ||
|
|
46c588c512 | ||
|
|
f248dbabe0 | ||
|
|
799e844de3 | ||
|
|
5090e16d54 | ||
|
|
1d649c5a79 | ||
|
|
9d4474393e | ||
|
|
073235c294 | ||
|
|
fe8da0b332 | ||
|
|
b98294c073 | ||
|
|
c962508987 | ||
|
|
4ff211868e | ||
|
|
527f2557b6 | ||
|
|
a945753629 | ||
|
|
22c60fb83e | ||
|
|
740ba4a9bf | ||
|
|
229bfdc7ec | ||
|
|
93b1af6ec0 | ||
|
|
e8dde48688 | ||
|
|
d9145353b2 | ||
|
|
49c966f50c | ||
|
|
0ad83a3924 | ||
|
|
187a60ec3a | ||
|
|
cabae4cca0 | ||
|
|
cdfb9a7d0e | ||
|
|
4860236f66 | ||
|
|
903762f283 | ||
|
|
143d758b5b | ||
|
|
1d25f23053 | ||
|
|
67d661eeb6 | ||
|
|
fe86363b1f | ||
|
|
15967713a0 | ||
|
|
2dafd62e14 | ||
|
|
46865eff26 | ||
|
|
36d45c7774 | ||
|
|
fc0b86ffe6 | ||
|
|
1c75259e8f | ||
|
|
6ac19de2af | ||
|
|
a4e8a70c31 | ||
|
|
4875ddf30c | ||
|
|
72f9d9e756 | ||
|
|
e32698e4be | ||
|
|
0b73388b0b | ||
|
|
8fa63ba9fb | ||
|
|
15175a261a | ||
|
|
b0eb362037 | ||
|
|
8c2cb6dcad | ||
|
|
692f77c9bc | ||
|
|
7996ab4a3e | ||
|
|
d4bfbbf04c | ||
|
|
92a03ce585 | ||
|
|
1c37332f37 | ||
|
|
23103c3bcc | ||
|
|
920702c5dd | ||
|
|
3167d85f06 | ||
|
|
dd2a5d6191 | ||
|
|
bc1ae62477 | ||
|
|
1af834aa7a | ||
|
|
e66045dc74 | ||
|
|
69f6fdc9c7 | ||
|
|
1327a1f8cf | ||
|
|
52d2577236 | ||
|
|
f2dc157e8a | ||
|
|
d9e860466c | ||
|
|
1633c478e3 | ||
|
|
5eb7cadc4d | ||
|
|
af5de77880 | ||
|
|
58279b668b | ||
|
|
7537614fc2 | ||
|
|
0db2385dbd | ||
|
|
fbb5397217 | ||
|
|
f4605f86a4 | ||
|
|
1f1cad181f | ||
|
|
7942c4d642 | ||
|
|
625410852b | ||
|
|
970ca59077 | ||
|
|
3ee021c9de | ||
|
|
0f8a8a7579 | ||
|
|
33703072eb | ||
|
|
83395641ef | ||
|
|
8cbdd4cc98 | ||
|
|
6c614f2649 | ||
|
|
df5a7d6c19 | ||
|
|
95347022e8 | ||
|
|
4f224e7eba | ||
|
|
fc593e86ee | ||
|
|
5c489f3358 | ||
|
|
899993a23b | ||
|
|
6dd23fa5ff | ||
|
|
1c2f8a74c4 | ||
|
|
d86f9d2ffa | ||
|
|
ffdc21d15c | ||
|
|
abe5548202 | ||
|
|
769adb75c5 | ||
|
|
1648f62da6 | ||
|
|
97d66a3afa | ||
|
|
99556dbbcd | ||
|
|
d7fdca78f7 | ||
|
|
f7858a96ed | ||
|
|
63f24966ce | ||
|
|
047c2954f8 | ||
|
|
11786057e2 | ||
|
|
12648ce726 | ||
|
|
782618d26f | ||
|
|
824b071af4 | ||
|
|
f1f84af3a7 | ||
|
|
8d484528e7 | ||
|
|
e95aa55339 | ||
|
|
0d139df652 | ||
|
|
568c5393a8 | ||
|
|
8d8ce6487f | ||
|
|
658ba49186 | ||
|
|
fa230333a4 | ||
|
|
75bc07f08f | ||
|
|
b7ff0ca985 | ||
|
|
a9cba0c7a6 | ||
|
|
a4b938b5d5 | ||
|
|
0174d82829 | ||
|
|
1c14896fd6 | ||
|
|
fcc90c6725 | ||
|
|
7037d67a45 | ||
|
|
f47cff472a | ||
|
|
8cc6bd6621 | ||
|
|
04e3ad2b77 | ||
|
|
b64a69ebf0 | ||
|
|
227ea4a371 | ||
|
|
78055a25d0 | ||
|
|
b050f683c8 | ||
|
|
9141db8d47 | ||
|
|
6b5131ec45 | ||
|
|
4e8fa3babd | ||
|
|
e443838621 | ||
|
|
d9710555ea | ||
|
|
6bed9bd8a2 | ||
|
|
c57d467965 | ||
|
|
e8e7f81593 | ||
|
|
8b6d7e049a | ||
|
|
4ff77067dc | ||
|
|
437b3d028a | ||
|
|
8afc4bb0cb | ||
|
|
ecd3ce850f | ||
|
|
bc61727e8b | ||
|
|
32f987e551 | ||
|
|
3596d0e42d | ||
|
|
e69276cf5f | ||
|
|
eb8737cb46 | ||
|
|
02b93b12fc | ||
|
|
2d0d914fd3 | ||
|
|
dbb1ad66d3 | ||
|
|
3aa419b430 | ||
|
|
944bdfc7fa | ||
|
|
13420e4440 | ||
|
|
51c00eefd4 | ||
|
|
8d108dc719 | ||
|
|
2e49f581c4 | ||
|
|
c5d9b2408f | ||
|
|
46ba71a15a | ||
|
|
99f4d4ca4d | ||
|
|
47f0722687 | ||
|
|
99d84a1154 | ||
|
|
126a96326f | ||
|
|
b7ead2004a | ||
|
|
87fad99863 | ||
|
|
9f727bb95d | ||
|
|
bd42a4d1f6 | ||
|
|
22e0cd2168 | ||
|
|
0662baac73 | ||
|
|
ef3c561cf1 | ||
|
|
6f07399b5a | ||
|
|
8524742c92 | ||
|
|
9125090a3d | ||
|
|
4a552fbcb4 | ||
|
|
85ef085084 | ||
|
|
f1d128f6b0 | ||
|
|
c925ed2117 | ||
|
|
142a5f9661 | ||
|
|
ae0c83b1aa | ||
|
|
8f1ee2ef15 | ||
|
|
f1d978fbf7 | ||
|
|
4604280ef8 | ||
|
|
18ab4060b2 | ||
|
|
9a4d465672 | ||
|
|
7ea9483cca | ||
|
|
d9add4f827 | ||
|
|
3c19c00a70 | ||
|
|
12c19d1ed1 | ||
|
|
c757b837f1 | ||
|
|
a9f1c0dbd4 | ||
|
|
896d77a83e | ||
|
|
b1210e1d15 | ||
|
|
127df30242 | ||
|
|
c0c17af51a | ||
|
|
d92ec2276e | ||
|
|
1f99727ab9 | ||
|
|
85784920a9 | ||
|
|
d7b3af063b | ||
|
|
baa3d49d4b | ||
|
|
d2c2062256 | ||
|
|
c646909765 | ||
|
|
8b4f03b256 | ||
|
|
976bd0134c | ||
|
|
8a785aac8f | ||
|
|
452812af11 | ||
|
|
44fb8fec1a | ||
|
|
1d8fc7aba8 | ||
|
|
654db76175 | ||
|
|
364170f38d | ||
|
|
0cd7c92672 | ||
|
|
962aaa1b7a | ||
|
|
6ec0c550a3 | ||
|
|
b67fcdb9ed | ||
|
|
2f4c3c7777 | ||
|
|
cb84164466 | ||
|
|
7b6aed426d | ||
|
|
81c539979d | ||
|
|
3cffd969b4 | ||
|
|
bbf4462c6c | ||
|
|
cf5aabbde1 | ||
|
|
b9b239c207 | ||
|
|
aa181b1f1f | ||
|
|
daec225ef8 | ||
|
|
c94878e190 | ||
|
|
fbb15adf11 | ||
|
|
3efd36ab7b | ||
|
|
11cb355e98 | ||
|
|
caadca9a48 | ||
|
|
0a50e33023 | ||
|
|
5eef2a5816 | ||
|
|
fe4bf5c217 | ||
|
|
912fc72600 |
2
.github/workflows/auth-crowdin-push.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
branches: [main]
|
||||
paths:
|
||||
# Run workflow when auth's intl_en.arb is changed
|
||||
- "auth/lib/l10n/arb/app_en.arb"
|
||||
- "mobile/apps/auth/lib/l10n/arb/app_en.arb"
|
||||
# Or the workflow itself is changed
|
||||
- ".github/workflows/auth-crowdin.yml"
|
||||
|
||||
|
||||
2
.github/workflows/auth-internal-release.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
4
.github/workflows/auth-lint.yml
vendored
@@ -4,11 +4,11 @@ on:
|
||||
# Run on every pull request (open or push to it) that changes auth/
|
||||
pull_request:
|
||||
paths:
|
||||
- "auth/**"
|
||||
- "mobile/apps/auth/**"
|
||||
- ".github/workflows/auth-lint.yml"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
2
.github/workflows/auth-release.yml
vendored
@@ -29,7 +29,7 @@ on:
|
||||
- "auth-v*"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
140
.github/workflows/mobile-daily-internal.yml
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
name: "Internal release (photos)"
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Runs daily at 12:30 UTC (6:00 PM IST)
|
||||
- cron: "30 12 * * *"
|
||||
workflow_dispatch: # Allow manual trigger
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: mobile/apps/photos
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup JDK 17
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 17
|
||||
|
||||
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Increment version code for build
|
||||
run: |
|
||||
CURRENT_VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //')
|
||||
VERSION_NAME=$(echo $CURRENT_VERSION | cut -d'+' -f1)
|
||||
CURRENT_BUILD=$(echo $CURRENT_VERSION | cut -d'+' -f2)
|
||||
NEW_BUILD=$((CURRENT_BUILD + ${{ github.run_number }}))
|
||||
NEW_VERSION="${VERSION_NAME}+${NEW_BUILD}"
|
||||
|
||||
sed -i "s/^version: .*/version: $NEW_VERSION/" pubspec.yaml
|
||||
echo "Building with version ${NEW_VERSION}"
|
||||
|
||||
# Store version for later use
|
||||
echo "NEW_VERSION=${NEW_VERSION}" >> $GITHUB_ENV
|
||||
|
||||
- name: Prepare and validate changelog for Play Store
|
||||
run: |
|
||||
mkdir -p whatsnew
|
||||
CHANGELOG_FILE="scripts/store_changes.txt"
|
||||
DISCORD_FILE="scripts/internal_changes.txt"
|
||||
OUTPUT_FILE="whatsnew/whatsnew-en-US"
|
||||
|
||||
# Use provided changelog or fallback
|
||||
if [ -f "$CHANGELOG_FILE" ]; then
|
||||
head -c 500 "$CHANGELOG_FILE" > "$OUTPUT_FILE"
|
||||
else
|
||||
echo "Bug fixes and improvements" > "$OUTPUT_FILE"
|
||||
fi
|
||||
|
||||
# Validate: file exists
|
||||
if [ ! -s "$OUTPUT_FILE" ]; then
|
||||
echo "❌ Changelog is empty."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate: <= 500 chars
|
||||
LENGTH=$(wc -m < "$OUTPUT_FILE")
|
||||
if [ "$LENGTH" -gt 500 ]; then
|
||||
echo "❌ Changelog exceeds 500 characters ($LENGTH)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate: no markdown or HTML
|
||||
if grep -Eq '[\*\_\<\>\[\]\(\)]' "$OUTPUT_FILE"; then
|
||||
echo "❌ Changelog contains markdown/HTML formatting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Changelog valid:"
|
||||
cat "$OUTPUT_FILE"
|
||||
|
||||
# Store changelog for Play Store (with escaped newlines)
|
||||
CHANGELOG_PLAYSTORE=$(cat "$OUTPUT_FILE" | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g')
|
||||
echo "CHANGELOG=${CHANGELOG_PLAYSTORE}" >> $GITHUB_ENV
|
||||
|
||||
# Store changelog for Discord (with proper newlines)
|
||||
CHANGELOG_DISCORD=$(cat "$DISCORD_FILE" | sed 's/"/\\"/g')
|
||||
echo "CHANGELOG_DISCORD<<EOF" >> $GITHUB_ENV
|
||||
echo "$CHANGELOG_DISCORD" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
|
||||
- name: Setup keys
|
||||
uses: timheuer/base64-to-file@v1
|
||||
with:
|
||||
fileName: "keystore/ente_photos_key.jks"
|
||||
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
|
||||
|
||||
- name: Build PlayStore AAB
|
||||
run: |
|
||||
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
|
||||
env:
|
||||
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
|
||||
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
|
||||
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
|
||||
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
|
||||
|
||||
- name: Upload AAB to PlayStore
|
||||
uses: r0adkll/upload-google-play@v1
|
||||
with:
|
||||
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
|
||||
packageName: io.ente.photos
|
||||
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
track: internal
|
||||
whatsNewDirectory: mobile/apps/photos/whatsnew
|
||||
mappingFile: mobile/apps/photos/build/app/outputs/mapping/playstoreRelease/mapping.txt
|
||||
|
||||
- name: Notify Discord
|
||||
uses: sarisia/actions-status-discord@v1
|
||||
with:
|
||||
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
|
||||
nodetail: true
|
||||
title: "🏆 Daily release Photos v${{ env.NEW_VERSION }} (Branch: ${{ github.ref_name }})"
|
||||
description: |
|
||||
**Version:** ${{ env.NEW_VERSION }}
|
||||
**Flutter:** ${{ env.FLUTTER_VERSION }}
|
||||
**Commit:** [${{ github.sha }}](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})
|
||||
**Download:** [Play Store](https://play.google.com/store/apps/details?id=io.ente.photos)
|
||||
|
||||
**Changes:**
|
||||
${{ env.CHANGELOG_DISCORD }}
|
||||
color: 0x00ff00
|
||||
@@ -1,10 +1,10 @@
|
||||
name: "Internal release (photos)"
|
||||
name: "Internal release (photos with rust)"
|
||||
|
||||
on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
RUST_VERSION: "1.85.1"
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
name: "Internal release (photos)"
|
||||
name: "Old Internal release (photos)"
|
||||
|
||||
on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
2
.github/workflows/mobile-lint.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
- ".github/workflows/mobile-lint.yml"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
2
.github/workflows/mobile-release.yml
vendored
@@ -9,7 +9,7 @@ on:
|
||||
- "photos-v*"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
@@ -4,7 +4,7 @@ on:
|
||||
workflow_dispatch: # Manual trigger only
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
ANDROID_KEYSTORE_PATH: "keystore/ente_photos_key.jks"
|
||||
|
||||
jobs:
|
||||
|
||||
7
.github/workflows/rust-lint.yml
vendored
@@ -15,6 +15,9 @@ concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
RUSTFLAGS: -D warnings
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -33,9 +36,9 @@ jobs:
|
||||
~/.cargo/git
|
||||
target
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||
|
||||
|
||||
- run: cargo fmt --check
|
||||
|
||||
- run: cargo clippy
|
||||
- run: cargo clippy --all-targets --all-features
|
||||
|
||||
- run: cargo build
|
||||
|
||||
12
.github/workflows/web-deploy.yml
vendored
@@ -54,6 +54,18 @@ jobs:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/photos web/apps/photos/out
|
||||
|
||||
- name: Build custom-albums
|
||||
run: yarn build:photos
|
||||
env:
|
||||
NEXT_PUBLIC_ENTE_ONLY_SERVE_ALBUMS_APP: 1
|
||||
|
||||
- name: Publish custom-albums
|
||||
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/custom-albums web/apps/photos/out
|
||||
|
||||
- name: Build accounts
|
||||
run: yarn build:accounts
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ See [docs/](docs/README.md) for how to edit these documents.
|
||||
|
||||
## Code contributions
|
||||
|
||||
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](auth/docs/adding-icons.md), or fixing a specific bug.
|
||||
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](mobile/apps/auth/docs/adding-icons.md), or fixing a specific bug.
|
||||
|
||||
Code that changes the behaviour of the product might not get merged, at least not initially. The PR can serve as a discussion bed, but you might find it easier to just start a discussion instead, or post your perspective in the (likely) existing thread about the behaviour change or new feature you wish for.
|
||||
|
||||
|
||||
15
infra/services/caddy/Caddyfile
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
email custom-domains@ente.io
|
||||
on_demand_tls {
|
||||
ask https://api.ente.io/custom-domain
|
||||
}
|
||||
}
|
||||
|
||||
https:// {
|
||||
tls {
|
||||
on_demand
|
||||
}
|
||||
reverse_proxy https://custom-albums.ente.io {
|
||||
header_up Host {upstream_hostport}
|
||||
}
|
||||
}
|
||||
19
infra/services/caddy/README.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Caddy
|
||||
|
||||
Caddy is used to terminate TLS and manage certificates for custom domains.
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
sudo mkdir -p /root/caddy/conf
|
||||
sudo mv Caddyfile /root/caddy/conf
|
||||
sudo chown root:root /root/caddy/conf/Caddyfile
|
||||
```
|
||||
|
||||
Rest of it works like our other systemd services.
|
||||
|
||||
If the Caddyfile changes, the running instance can be updated without restarts by using `sudo systemctl reload caddy`.
|
||||
|
||||
## Backups
|
||||
|
||||
The entire `/root/caddy` directory can be backed up and contains the everything needed to resurrect the same setup.
|
||||
17
infra/services/caddy/caddy.service
Normal file
@@ -0,0 +1,17 @@
|
||||
[Unit]
|
||||
Documentation=https://caddyserver.com/docs/running
|
||||
Requires=docker.service
|
||||
After=docker.service
|
||||
|
||||
[Service]
|
||||
ExecStartPre=docker pull caddy
|
||||
ExecStartPre=-docker stop caddy
|
||||
ExecStartPre=-docker rm caddy
|
||||
ExecStart=docker run --name caddy \
|
||||
--cap-add NET_ADMIN \
|
||||
-p 80:80 -p 443:443 -p 443:443/udp \
|
||||
-v /root/caddy/conf:/etc/caddy \
|
||||
-v /root/caddy/data:/data \
|
||||
-v /root/caddy/config:/config \
|
||||
caddy
|
||||
ExecReload=docker exec -w /etc/caddy caddy caddy reload
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"flutter": "3.24.3"
|
||||
"flutter": "3.32.8"
|
||||
}
|
||||
3
mobile/apps/auth/.gitignore
vendored
@@ -44,4 +44,5 @@ android/key.properties
|
||||
dist/
|
||||
|
||||
# FVM Version Cache
|
||||
.fvm/
|
||||
.fvm/
|
||||
lib/l10n/arb/*.dart
|
||||
@@ -44,7 +44,7 @@ or managing your secrets, please use our mobile or desktop app.
|
||||
|
||||
## 🧑💻 Build from source
|
||||
|
||||
1. [Install Flutter](https://flutter.dev/docs/get-started/install)
|
||||
1. [Install Flutter v3.32.8](https://flutter.dev/docs/get-started/install).
|
||||
|
||||
2. Pull in all submodules with `git submodule update --init --recursive`
|
||||
|
||||
@@ -98,7 +98,7 @@ more, see [docs/adding-icons](docs/adding-icons.md).
|
||||
The best way to support this project is by checking out [Ente
|
||||
Photos](../mobile/README.md) or spreading the word.
|
||||
|
||||
For more ways to contribute, see [../CONTRIBUTING.md](../../../CONTRIBUTING.md).
|
||||
For more ways to contribute, see [../../../CONTRIBUTING.md](../../../CONTRIBUTING.md).
|
||||
|
||||
## Certificate Fingerprints
|
||||
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
"uidai",
|
||||
"UIDAI",
|
||||
"Unique Identification Authority of India"
|
||||
],
|
||||
"hex": "FBB401"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Accredible",
|
||||
@@ -57,8 +56,16 @@
|
||||
},
|
||||
{
|
||||
"title": "Amtrak",
|
||||
"slug": "amtrak",
|
||||
"hex": "003A5D"
|
||||
"slug": "amtrak"
|
||||
},
|
||||
{
|
||||
"title": "Animal Crossing",
|
||||
"slug:": "animal_crossing",
|
||||
"altNames": [
|
||||
"AnimalCrossing",
|
||||
"Bell Tree Forums",
|
||||
"BellTree Forums"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Ankama",
|
||||
@@ -106,6 +113,10 @@
|
||||
{
|
||||
"title": "availity"
|
||||
},
|
||||
{
|
||||
"title": "AvistaZ.to",
|
||||
"slug": "avistaz"
|
||||
},
|
||||
{
|
||||
"title": "AzurHosts",
|
||||
"slug": "azurhosts",
|
||||
@@ -145,14 +156,6 @@
|
||||
"Blizzard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "BBS.NGA",
|
||||
"slug": "bbs_nga",
|
||||
"altNames": [
|
||||
"NGA玩家社区",
|
||||
"NGA社区"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Belo"
|
||||
},
|
||||
@@ -297,8 +300,7 @@
|
||||
},
|
||||
{
|
||||
"title": "Caltrain",
|
||||
"slug": "caltrain",
|
||||
"hex": "E31837"
|
||||
"slug": "caltrain"
|
||||
},
|
||||
{
|
||||
"title": "Canva"
|
||||
@@ -306,6 +308,14 @@
|
||||
{
|
||||
"title": "Capacities"
|
||||
},
|
||||
{
|
||||
"title": "Capcom",
|
||||
"slug": "capcom",
|
||||
"hex": "0D4DA2",
|
||||
"altNames": [
|
||||
"Capcom Co., Ltd."
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Carta",
|
||||
"altNames": [
|
||||
@@ -341,6 +351,13 @@
|
||||
"slug": "cih",
|
||||
"hex": "D14633"
|
||||
},
|
||||
{
|
||||
"title": "Chucklefish"
|
||||
},
|
||||
{
|
||||
"title": "CinemaZ.to",
|
||||
"slug": "cinemaz"
|
||||
},
|
||||
{
|
||||
"title": "Clipper",
|
||||
"slug": "clippercard",
|
||||
@@ -348,8 +365,7 @@
|
||||
"ClipperCard",
|
||||
"clipper-card",
|
||||
"Clipper Card"
|
||||
],
|
||||
"hex": "006298"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "CloudAMQP"
|
||||
@@ -394,8 +410,7 @@
|
||||
},
|
||||
{
|
||||
"title": "Coolify",
|
||||
"slug": "coolify",
|
||||
"hex": "8C52FF"
|
||||
"slug": "coolify"
|
||||
},
|
||||
{
|
||||
"title": "Crowdpear"
|
||||
@@ -444,25 +459,6 @@
|
||||
"cwallet.com"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "U.S. Department of Homeland Security",
|
||||
"slug": "us_dhs",
|
||||
"altNames": [
|
||||
"DHS",
|
||||
"dhs",
|
||||
"United States Department of Homeland Security",
|
||||
"uscis",
|
||||
"USCIS",
|
||||
"U.S. Citizenship and Immigration Services",
|
||||
"cbp",
|
||||
"CBP",
|
||||
"U.S. Customs and Border Protection",
|
||||
"U.S. Immigration and Customs Enforcement",
|
||||
"ice",
|
||||
"ICE"
|
||||
],
|
||||
"hex": "005189"
|
||||
},
|
||||
{
|
||||
"title": "DCS",
|
||||
"altNames": [
|
||||
@@ -508,8 +504,7 @@
|
||||
"altNames": [
|
||||
"Domino's",
|
||||
"Domino's Pizza"
|
||||
],
|
||||
"hex": "0B648F"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Doppler"
|
||||
@@ -532,8 +527,7 @@
|
||||
"Dunkin'",
|
||||
"Dunkin",
|
||||
"Dunkin Donuts"
|
||||
],
|
||||
"hex": "C63663"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "eBay"
|
||||
@@ -593,10 +587,13 @@
|
||||
],
|
||||
"hex": "17AB17"
|
||||
},
|
||||
{
|
||||
"title": "ExoticaZ.to",
|
||||
"slug": "exoticaz"
|
||||
},
|
||||
{
|
||||
"title": "Experian",
|
||||
"slug": "experian",
|
||||
"hex": "AF1685"
|
||||
"slug": "experian"
|
||||
},
|
||||
{
|
||||
"title": "Fanatical",
|
||||
@@ -720,8 +717,7 @@
|
||||
"altNames": [
|
||||
"green man gaming",
|
||||
"gmg"
|
||||
],
|
||||
"hex": "00E205"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Guideline"
|
||||
@@ -848,8 +844,7 @@
|
||||
},
|
||||
{
|
||||
"title": "Kayak",
|
||||
"slug": "kayak",
|
||||
"hex": "FF6900"
|
||||
"slug": "kayak"
|
||||
},
|
||||
{
|
||||
"title": "Keygen",
|
||||
@@ -1150,8 +1145,7 @@
|
||||
"slug": "njtransit",
|
||||
"altNames": [
|
||||
"NJ Transit"
|
||||
],
|
||||
"hex": "1A2B57"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "nordvpn",
|
||||
@@ -1256,8 +1250,7 @@
|
||||
"slug": "pcpartpicker",
|
||||
"altNames": [
|
||||
"PC Part Picker"
|
||||
],
|
||||
"hex": "EDA920"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Peerberry"
|
||||
@@ -1312,6 +1305,10 @@
|
||||
"title": "Privacy.com",
|
||||
"slug": "privacy"
|
||||
},
|
||||
{
|
||||
"title": "PrivateHD.to",
|
||||
"slug": "privatehd"
|
||||
},
|
||||
{
|
||||
"title": "Proton"
|
||||
},
|
||||
@@ -1463,8 +1460,7 @@
|
||||
"altNames": [
|
||||
"onlinesbi",
|
||||
"State Bank of India"
|
||||
],
|
||||
"hex": "12A8E0"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "SEI",
|
||||
@@ -1562,8 +1558,7 @@
|
||||
},
|
||||
{
|
||||
"title": "Supercell",
|
||||
"slug": "supercell",
|
||||
"hex": "000000"
|
||||
"slug": "supercell"
|
||||
},
|
||||
{
|
||||
"title": "Surfshark"
|
||||
@@ -1646,8 +1641,7 @@
|
||||
"altNames": [
|
||||
"StoryGraph",
|
||||
"TheStoryGraph"
|
||||
],
|
||||
"hex": "15919B"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "tianyiyun",
|
||||
@@ -1664,6 +1658,12 @@
|
||||
{
|
||||
"title": "TorGuard"
|
||||
},
|
||||
{
|
||||
"title": "Toyhouse",
|
||||
"altNames": [
|
||||
"Toyhou.se"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Trading 212"
|
||||
},
|
||||
@@ -1685,6 +1685,15 @@
|
||||
"T Rowe Price Group, Inc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "TU Dresden",
|
||||
"slug": "tu_dresden",
|
||||
"altNames": [
|
||||
"Technische Universität Dresden",
|
||||
"Dresden University of Technology"
|
||||
],
|
||||
"hex": "00305d"
|
||||
},
|
||||
{
|
||||
"title": "Tweakers"
|
||||
},
|
||||
@@ -1699,6 +1708,12 @@
|
||||
"Twitch tv"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Twitter",
|
||||
"altNames": [
|
||||
"X"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Ubiquiti",
|
||||
"slug": "ubiquiti",
|
||||
@@ -1764,7 +1779,7 @@
|
||||
"title": "Warner Bros.",
|
||||
"slug": "warner_bros",
|
||||
"altNames": [
|
||||
"Warner Brothers"
|
||||
"Warner Brothers"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1777,7 +1792,7 @@
|
||||
"title": "WEB.DE",
|
||||
"slug": "web_de"
|
||||
},
|
||||
{
|
||||
{
|
||||
"title": "WeMod",
|
||||
"slug": "wemod",
|
||||
"altNames": [
|
||||
@@ -1801,8 +1816,7 @@
|
||||
"Washington Metro",
|
||||
"DC Metro",
|
||||
"Washington Metropolitan Area Transit Authority"
|
||||
],
|
||||
"hex": "2D2D2D"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Wolvesville"
|
||||
@@ -1906,6 +1920,26 @@
|
||||
{
|
||||
"title": "Co-Wheels",
|
||||
"slug": "cowheels"
|
||||
},
|
||||
{
|
||||
"title": "Zivver",
|
||||
"slug": "zivver"
|
||||
},
|
||||
{
|
||||
"title": "Meesman Indexbeleggen",
|
||||
"slug": "meesman"
|
||||
},
|
||||
{
|
||||
"title": "Scouting Nederland",
|
||||
"slug": "scoutingnederland"
|
||||
},
|
||||
{
|
||||
"title": "ISC2",
|
||||
"slug": "isc2"
|
||||
},
|
||||
{
|
||||
"title": "Allegro",
|
||||
"slug": "allegro"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
8
mobile/apps/auth/assets/custom-icons/icons/allegro.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1386 1594" width="1386" height="1594">
|
||||
<title>logo (15)-svg copy-svg</title>
|
||||
<style>
|
||||
tspan { white-space:pre }
|
||||
.shp0 { fill: #ff5a00 }
|
||||
</style>
|
||||
<path id="Layer" fill-rule="evenodd" class="shp0" d="M1385.14 634.99L1385.14 1547.13C1385.14 1553.03 1384.01 1558.88 1381.76 1564.35C1379.45 1569.82 1376.13 1574.75 1372 1578.93C1367.82 1583.11 1362.83 1586.44 1357.36 1588.69C1351.89 1590.94 1346.04 1592.12 1340.14 1592.12L570.51 1592.12C534.63 1594.16 498.65 1593.2 462.98 1589.23C427.26 1585.26 391.98 1578.29 357.44 1568.42C322.9 1558.55 289.28 1545.79 256.88 1530.35C224.49 1514.85 193.44 1496.67 164.05 1475.97C137.02 1453.77 112.73 1428.52 91.6 1400.63C70.47 1372.8 52.66 1342.56 38.61 1310.54C24.56 1278.53 14.32 1244.96 8.1 1210.59C1.82 1176.16 -0.32 1141.14 1.61 1106.29L1.61 1101.41C1.61 641.05 502.94 580.24 666.61 580.24L1046.9 580.24L1046.9 546.83C1047.7 524.84 1045.5 502.8 1040.36 481.41C1035.21 460.01 1027.22 439.42 1016.54 420.17C1005.87 400.92 992.63 383.17 977.23 367.51C961.79 351.8 944.25 338.28 925.21 327.29C785.88 256.77 512.11 282.89 283.91 423.38C278.5 428.1 271.85 431.32 264.77 432.66C257.69 434 250.34 433.47 243.53 431.05C236.72 428.64 230.66 424.46 225.99 418.93C221.38 413.41 218.27 406.76 216.98 399.63L202.99 171.03C202.99 168.08 203.31 165.18 204.06 162.34C204.76 159.5 205.88 156.77 207.33 154.19C208.73 151.67 210.5 149.31 212.53 147.22C214.62 145.13 216.93 143.31 219.45 141.8C259.67 118.58 301.4 97.99 344.3 80.24C387.26 62.49 431.29 47.59 476.17 35.63C521.12 23.67 566.75 14.71 612.82 8.76C658.89 2.86 705.33 -0.03 751.78 0.13C937.98 0.13 1138.77 54.24 1238.52 163.09C1338.32 271.95 1384.55 429.44 1384.55 636.81L1385.14 634.99ZM1046.9 858.76L687.31 858.76C410.48 858.76 355.13 1022.96 355.13 1105.05C354.87 1119.64 356.37 1134.17 359.64 1148.38C362.91 1162.59 367.9 1176.32 374.49 1189.3C381.09 1202.33 389.24 1214.45 398.84 1225.44C408.39 1236.49 419.22 1246.25 431.18 1254.61C442.71 1263.35 454.94 1271.18 467.7 1277.99C480.47 1284.8 493.71 1290.65 507.39 1295.47C521.01 1300.25 535.06 1304 549.27 1306.63C563.48 1309.26 577.91 1310.76 592.39 1311.19L1046.9 1311.19L1046.9 858.76Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 326.24 311.07"><path fill="#1aae5e" d="M266.38 1.26c-.93 9.12-7.71 47.21-27.28 83.44a1 1 0 0 1-1.7-.06c-4-8.24-24.86-44.58-79.29-44.91C96.71 39.35 66.67 87 66.67 87s-23.45 32.93-33.49 94.89-22.61 79-22.61 79L.39 277a2.54 2.54 0 0 0 1.11 3.67c13 5.81 72.68 30.38 151.68 30.38 53.8 0 70-7.58 74.25-10.55a.61.61 0 0 0-.35-1.12c-10.55 1.16-51.2-5.26-51.2-44 0-34.79 25.3-51.62 51.81-52.83 12.56-.58 39.35 4.74 47.72 29.3 7 20.66-2.31 39.15-5.45 44.5a.62.62 0 0 0 .77.89c9.52-3.84 53.71-25.77 55.47-93.95 1.55-59.91-47.64-85.62-70.8-86.71a1.18 1.18 0 0 1-1-1.62c6.23-15.94 45-57.27 51.84-64.46a1.57 1.57 0 0 0 0-2.17A159.05 159.05 0 0 0 268.46.17a1.42 1.42 0 0 0-2.08 1.09Z"/></svg>
|
||||
|
After Width: | Height: | Size: 730 B |
|
Before Width: | Height: | Size: 50 KiB |
1
mobile/apps/auth/assets/custom-icons/icons/avistaz.svg
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 23 KiB |
13
mobile/apps/auth/assets/custom-icons/icons/best_buy.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="584.48486" >
|
||||
<g transform="translate(-137.5,-22.390163)">
|
||||
<path style="fill:#1c252c" d="m 137.5,29.631487 0,252.320873 132.1114,0 c 51.99819,0 100.05059,-18.25003 100.05059,-71.85789 0,-36.24066 -26.10767,-52.7841 -54.82326,-61.4437 17.4955,-7.01771 37.3423,-21.76056 37.3423,-52.666034 0,-39.55613 -39.24823,-66.353249 -92.09117,-66.353249 l -122.58986,0 z m 80.93311,58.76577 29.75482,0 c 12.11271,0 21.34908,9.487931 21.34908,19.117473 0,8.94677 -9.59745,18.52237 -21.34908,18.52237 l -29.75482,0 0,-37.639843 z m 0,90.008333 39.27636,0 c 13.71131,0 25.21721,10.41366 25.21721,22.31611 0,12.63921 -10.76115,23.13438 -27.59759,23.13438 l -36.89598,0 0,-45.45049 z" id="path2998" />
|
||||
<path id="path3005" d="m 202.9606,309.47481 0,252.32088 132.11141,0 c 51.99819,0 100.05058,-18.25004 100.05058,-71.8579 0,-36.24065 -26.10766,-52.78409 -54.82326,-61.4437 17.4955,-7.01771 37.3423,-21.76056 37.3423,-52.66603 0,-39.55613 -39.24822,-66.35325 -92.09117,-66.35325 l -122.58986,0 z m 80.93312,58.76577 29.75482,0 c 12.11271,0 21.34908,9.48793 21.34908,19.11747 0,8.94678 -9.59745,18.52238 -21.34908,18.52238 l -29.75482,0 0,-37.63985 z m 0,90.00833 39.27636,0 c 13.71131,0 25.21721,10.41366 25.21721,22.31612 0,12.6392 -10.76115,23.13437 -27.5976,23.13437 l -36.89597,0 0,-45.45049 z" style="fill:#1c252c" />
|
||||
<path style="fill:#1c252c" d="m 376.01464,281.92185 0,-252.32088 203.52297,0 0,60.937872 -122.8279,0 0,33.087358 99.73816,0 0,57.12926 -99.73816,0 0,40.46655 122.8279,0 0,60.69984 z" id="path3007"/>
|
||||
<path style="fill:#1c252c" d="m 689.78812,289.1442 c 57.28767,0 103.11071,-32.67744 103.11071,-85.63169 0,-85.46143 -111.17753,-72.31037 -111.17753,-98.91916 0,-10.278288 10.80934,-15.732656 21.89462,-15.732656 19.10438,0 32.9075,12.586126 32.9075,12.586126 L 784.35446,55.903565 C 765.2233,37.697019 735.00886,22.390163 694.30743,22.390163 c -61.12759,0 -101.11859,36.280243 -101.11859,80.044867 0,86.54828 109.57491,73.98694 109.57491,101.14304 0,9.51935 -9.15835,19.09619 -25.76901,19.09619 -18.85922,0 -33.79879,-11.38479 -45.42578,-21.04418 l -48.11128,45.86837 c 19.37303,18.87022 50.47517,41.64575 106.33044,41.64575 z" id="path3009" />
|
||||
<path style="fill:#1c252c" d="m 855.18627,281.92185 0,-191.621047 -66.6508,0 0,-60.699833 214.23473,0 0,60.699833 -66.65082,0 0,191.621047 z" id="path3011" />
|
||||
<path style="fill:#1c252c" d="m 437.90467,309.29628 80.69507,0 0,151.15449 c 0,15.34925 15.27608,29.49386 31.20285,29.49386 15.02419,0 30.2111,-12.77313 30.2111,-30.30098 l 0,-150.34737 80.45703,0 0,149.31902 c 0,59.25051 -49.19276,106.51359 -112.80036,106.51359 -63.96969,0 -109.76569,-51.43651 -109.76569,-109.74208 z" id="path3013" />
|
||||
<path style="fill:#1c252c;fill-opacity:1;stroke:none" d="m 759.97084,561.61716 0,-90.16156 -94.84461,-162.15932 81.6448,0 53.66637,86.88408 53.85177,-86.88408 81.83021,0 -95.21543,163.08638 0,89.2345 z" id="path3015" />
|
||||
<path style="fill:#ffed31" d="m 936.11938,447.38916 -47.60772,47.60772 0,64.27041 47.60772,47.60771 201.38062,0 0,-159.48584 z" id="path3017" />
|
||||
<path style="fill:#1c252c" id="path3024" d="m 469,573.36218 c 0,2.20914 -1.79086,4 -4,4 -2.20914,0 -4,-1.79086 -4,-4 0,-2.20914 1.79086,-4 4,-4 2.20914,0 4,1.79086 4,4 z" transform="matrix(2.6779338,0,0,2.6779338,-327.65077,-1008.3244)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
71
mobile/apps/auth/assets/custom-icons/icons/capcom.svg
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="926.65619"
|
||||
height="958.5625"
|
||||
id="svg2"
|
||||
inkscape:version="0.48.1 "
|
||||
sodipodi:docname="Capcom icon.svg">
|
||||
<metadata
|
||||
id="metadata3015">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1835"
|
||||
inkscape:window-height="1058"
|
||||
id="namedview3013"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.32"
|
||||
inkscape:cx="1623.239"
|
||||
inkscape:cy="170.71783"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<defs
|
||||
id="defs4" />
|
||||
<g
|
||||
transform="translate(2426,-55.799683)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m -1552.0877,1007.6508 4.1189,-358.25737 -199.9062,0 c -15.7424,43.40396 -59.9402,72.71875 -113.25,72.71875 -28.0932,0 -58.13,-6.62565 -82.4688,-21.25 -31.7176,-19.0581 -55.4185,-41.69206 -74.9375,-81.90625 -15.3567,-37.21359 -27.109,-82.77963 -28.4687,-123.09375 4.6791,-79.72921 28.9019,-108.14789 73.25,-141.03125 9.8313,-7.28971 37.2996,-13.1189 45.2187,-13.15625 17.4221,-0.0822 31.9427,10.48615 39.8125,26.0625 11.4471,22.65651 -5.3079,50.1006 -21.875,69.625 l 161.625,111.34375 249.625,-261.1875 c -87.0859,-138.79748 -246.2201,-231.718747 -428.0937,-231.718747 -275.3534,0 -498.5625,212.989027 -498.5625,475.718747 0,262.72972 216.0662,461.41517 498.5625,482.84377 l 376.5933,-1.6875 c 0.2227,-314.9224 -12.7573,-290.91079 -1.2435,-5.0239 z"
|
||||
id="path3840"
|
||||
style="fill:#0c4da2;fill-opacity:1;stroke:none"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccssccssscccssccc" />
|
||||
<path
|
||||
d="m -1927.7708,145.18332 c -226.9823,1.42857 -412.3662,166.7661 -412.3662,383.05133 0,216.28523 204.6469,402.07109 452.3662,396.47808 l 240.7127,0.6783 0,-189.50724 -45.4634,0 c -14.2837,35.73115 -80.9968,70.68064 -129.3669,70.68064 -25.4902,0 -89.6606,-3.46506 -113.3988,-11.7792 -41.9106,-14.67892 -101.712,-35.75045 -153.7082,-123.14142 -13.9338,-30.6351 -53.1686,-105.28898 -44.4023,-214.19078 4.2456,-65.63495 45.9366,-147.56776 120.7486,-184.67165 32.6212,-16.17886 65.4607,-18.83348 123.1208,-13.60101 41.3957,3.75653 82.5276,32.86328 96.8886,67.79717 11.107,27.01833 7.9153,59.94169 -5.16,78.69532 -0.9328,1.33796 -0.9528,2.52293 -0.7595,3.80017 0.1471,0.97218 1.408,2.592 1.408,2.592 l 22.7845,17.79932 c 0,0 6.4866,4.50696 14.0636,4.30516 4.4004,-0.11719 12.2667,-4.89104 12.2667,-4.89104 l 130.1212,-136.55317 c -80.4452,-108.54703 -223.4056,-147.54198 -309.8556,-147.54198 z"
|
||||
id="path3950"
|
||||
style="fill:#ffcb08;fill-opacity:1;stroke:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
75
mobile/apps/auth/assets/custom-icons/icons/chucklefish.svg
Normal file
|
After Width: | Height: | Size: 16 KiB |
1
mobile/apps/auth/assets/custom-icons/icons/cinemaz.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 438 438" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="437.5" height="437.5" style="fill:none;"/><g id="layer101"><path d="M80.861,420.364c-4.353,-1.171 -8.1,-4.433 -10.133,-8.799l-1.102,-2.397l0.27,-99.121c0.291,-94.079 0.36,-100.573 1.396,-103.303c0.216,-0.469 -1.105,-1.372 -5.198,-3.524c-25.794,-13.562 -44.713,-37.051 -52.206,-64.809c-2.864,-10.522 -3.359,-14.797 -3.306,-28.127c0.096,-13.244 0.362,-15.721 3.139,-26.22c4.859,-18.438 14.538,-34.891 28.434,-48.251c15.784,-15.189 35.348,-24.767 57.621,-28.224c6.712,-1.041 23.289,-0.974 30.121,0.164c17.719,2.848 33.842,9.706 47.898,20.401c5.197,3.951 12.219,10.687 16.429,15.746c1.786,2.143 3.359,3.944 3.53,4.03c0.17,0.043 1.457,-1.276 2.831,-2.98c1.374,-1.703 4.464,-5.023 6.823,-7.364c16,-15.872 36.506,-26.044 59.249,-29.328c6.883,-0.998 22.306,-0.936 29.095,0.117c24.21,3.771 45.357,14.964 61.863,32.804c14.591,15.824 23.698,35.557 26.684,57.999c0.705,5.216 0.645,20.34 -0.103,25.635c-3.387,24.211 -13.551,44.465 -30.708,61.272c-8.322,8.17 -17.577,14.713 -27.465,19.501c-1.841,0.89 -2.398,1.358 -2.187,1.871c1.355,3.125 1.433,5.048 1.331,30.426c-0.056,14.056 -0.017,25.549 0.111,25.55c0.128,0 18.029,-10.353 39.741,-22.998c21.712,-12.602 40.555,-23.464 41.839,-24.057c1.969,-0.932 2.952,-1.099 6.199,-1.086c3.29,0.013 4.229,0.188 6.276,1.178c3.241,1.509 6.433,4.598 7.874,7.594l1.186,2.398l-0.204,83.099c-0.171,63.745 -0.335,83.526 -0.726,84.977c-1.733,6.188 -8.375,11.117 -14.998,11.091c-4.742,-0.019 -4.742,-0.019 -46.94,-25.012l-40.62,-24.046l-0.32,26.574c-0.309,23.754 -0.407,26.83 -1.054,28.451c-1.899,4.649 -5.458,7.967 -10.164,9.444c-2.695,0.843 -3.763,0.839 -116.64,0.344c-88.824,-0.356 -114.33,-0.586 -115.866,-1.02Zm140.434,-223.059c-0.256,-0.215 -1.661,-1.331 -3.195,-2.448c-6.858,-5.197 -12.604,-10.732 -18.726,-18.148c-1.021,-1.243 -2,-2.187 -2.128,-2.145c-0.171,0.085 -1.759,1.873 -3.562,4.002c-4.25,5.067 -10.769,11.151 -16.426,15.444l-4.585,3.442l24.524,0.098c13.458,0.054 24.31,-0.073 24.098,-0.245Zm-94.961,-25.46c25.4,-5.495 44.191,-24.646 49.163,-50.005c1.571,-8.239 1.017,-19.307 -1.512,-27.991c-5.519,-19.291 -20.708,-35.245 -39.61,-41.602c-7.594,-2.551 -10.669,-3.033 -19.726,-3.069c-8.673,-0.035 -11.751,0.38 -18.767,2.573c-19.293,5.99 -35.166,22.119 -40.926,41.621c-2.598,8.663 -3.241,19.726 -1.736,27.978c2.552,13.511 8.999,25.415 18.788,34.683c9.024,8.495 19.726,13.836 32.534,16.194c4.355,0.787 17.43,0.583 21.792,-0.382Zm167.009,0.498c5.987,-1.343 8.683,-2.315 14.804,-5.324c17.081,-8.391 28.977,-23.639 33.369,-42.847c0.87,-3.756 1.006,-5.636 1.033,-12.344c0.026,-6.707 -0.094,-8.588 -0.934,-12.351c-5.454,-24.845 -23.837,-43.29 -48.596,-48.773c-5.165,-1.174 -18.751,-1.228 -23.925,-0.096c-25.999,5.536 -45.305,25.454 -49.553,51.114c-0.831,4.91 -0.869,14.31 -0.077,19.226c4.125,26.164 24.251,46.796 50.422,51.686c6.233,1.178 17.642,1.01 23.457,-0.291Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
1
mobile/apps/auth/assets/custom-icons/icons/exoticaz.svg
Normal file
|
After Width: | Height: | Size: 17 KiB |
4
mobile/apps/auth/assets/custom-icons/icons/isc2.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="76" height="28" viewBox="0 0 76 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M3.6137 0.263554V24.2528C3.6137 24.3057 3.59223 24.3565 3.55413 24.3932L0.140163 27.6896C0.0876965 27.7404 0 27.703 0 27.6301V0.263554C0 0.217915 0.0370442 0.180891 0.0827069 0.180891H3.53099C3.57666 0.180891 3.6137 0.217915 3.6137 0.263554ZM12.9151 7.14572C12.9151 4.77676 14.8577 3.33976 17.4613 3.33976C19.7149 3.33976 21.3857 4.27186 23.173 5.94205C23.445 6.21361 23.5321 6.36292 23.8042 6.05236L25.4188 4.31055C25.6908 4 25.5433 3.92232 25.2713 3.65076C23.3283 1.39816 20.4529 0 17.4223 0C12.9538 0 9.41785 2.91284 9.41785 7.10703C9.41785 15.8838 22.9397 14.0583 22.9397 20.1554C22.9397 22.6408 20.764 24.5827 17.5388 24.5827C14.4361 24.5827 12.8017 23.1551 11.0921 21.524C10.8201 21.2522 10.7614 21.1884 10.5283 21.4216L8.68301 23.1634C8.411 23.3966 8.43746 23.4164 8.63175 23.7269C10.3993 26.1087 13.6923 27.9612 17.539 27.9612C22.3572 27.9612 26.5147 24.7768 26.5147 20.3107C26.5147 11.0679 12.9153 13.1263 12.9153 7.14557L12.9151 7.14572ZM44.5835 3.53395C47.3423 3.53395 49.596 4.58257 51.4999 6.17492C51.5444 6.213 51.6963 6.33632 51.743 6.37576C51.9289 6.53262 51.9644 6.53973 52.1883 6.30851C52.2428 6.25229 52.4023 6.08032 52.4023 6.08032L54.0336 4.29771C54.2087 4.09279 54.1792 4.07768 54.0528 3.94545C54.0011 3.89134 53.9102 3.80702 53.8311 3.72813C51.3835 1.55367 48.2361 0 44.5835 0C36.8514 0 30.8288 6.21361 30.8288 14.0196C30.8288 21.8255 36.8514 28 44.5835 28C48.2361 28 51.3906 26.3504 53.8384 24.1369C54.1104 23.9037 54.2128 23.8197 53.9409 23.5477L52.278 21.729C52.006 21.4571 51.9349 21.5213 51.6629 21.7545C49.759 23.3466 47.3422 24.4659 44.5834 24.4659C39.0271 24.4659 34.5199 19.9612 34.5199 14.0194C34.5199 8.03869 39.0272 3.53395 44.5835 3.53395ZM66.7904 0.0562167C63.2934 0.0562167 60.5212 1.59885 58.8115 3.73463C58.7651 3.78873 58.6609 3.93985 58.6299 3.98821C58.505 4.18286 58.541 4.19736 58.7175 4.39382C59.1585 4.88481 60.5292 6.43666 60.5292 6.43666C60.5868 6.49756 60.6405 6.49998 60.6904 6.45585C60.7448 6.4078 60.863 6.29536 60.9279 6.23174C62.0159 5.10544 63.8762 3.24107 66.7514 3.24107C69.9763 3.24107 71.9191 5.26049 71.9191 8.21187C71.9191 12.3999 69.5179 14.3919 64.1713 18.8858C62.6162 20.1928 59.7455 22.7114 59.029 23.3411C58.9234 23.4338 58.8637 23.5669 58.8637 23.7071V27.4699C58.8637 27.6378 59.0612 27.7277 59.1874 27.6169C60.6628 26.3236 66.7627 20.9799 68.7448 19.2968C73.8769 14.9387 75.2608 11.9788 75.2608 8.17288C75.2608 3.55163 71.9193 0.0563678 66.7902 0.0563678L66.7904 0.0562167Z" fill="black"/>
|
||||
<path d="M75.4003 24.6003H66.7791C66.6688 24.6003 66.5794 24.6896 66.5794 24.7999V27.3522C66.5794 27.4624 66.6688 27.5518 66.7791 27.5518H75.4003C75.5106 27.5518 75.6 27.4624 75.6 27.3522V24.7999C75.6 24.6896 75.5106 24.6003 75.4003 24.6003Z" fill="#468145"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 9.2 KiB |
1
mobile/apps/auth/assets/custom-icons/icons/meesman.svg
Normal file
|
After Width: | Height: | Size: 13 KiB |
1
mobile/apps/auth/assets/custom-icons/icons/privatehd.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 557 557" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="556.25" height="556.25" style="fill:none;"/><g><path d="M45.455,412.973c-8.755,-1.966 -14.046,-4.401 -21.21,-9.692c-9.88,-7.304 -16.341,-17.418 -19.9,-31.231c-0.655,-2.481 -0.749,-13.157 -0.889,-90.601c-0.141,-62.086 -0.047,-89.102 0.328,-92.333c2.013,-17.746 12.969,-33.384 28.795,-41.251c8.896,-4.401 14.609,-5.478 29.545,-5.478l10.956,0l0,109.096l121.27,0l0,-109.189l12.97,0.187c12.267,0.187 13.297,0.281 17.699,1.451c18.682,4.964 32.963,19.432 37.832,38.348l1.498,5.759l0,180.266l-1.451,5.618c-3.886,14.984 -12.642,26.408 -25.893,33.712c-4.495,2.482 -8.849,4.074 -14.702,5.338c-3.933,0.843 -6.087,0.983 -16.247,0.983l-11.706,0l0,-107.223l-121.27,0l0,107.223l-11.799,-0.046c-9.879,-0.047 -12.501,-0.188 -15.826,-0.937Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/><path d="M272.625,413.956l0,-271.569l118.226,0.094l118.226,0.14l4.449,1.218c8.943,2.481 16.668,6.883 23.177,13.11c8.053,7.726 12.829,16.294 15.17,27.204c0.983,4.541 0.983,4.963 0.983,94.112l0,89.571l-1.123,4.917c-2.342,10.254 -6.275,17.558 -13.485,25.097c-7.679,8.006 -16.294,12.782 -27.157,15.123l-4.589,0.983l-233.877,0Zm215.148,-61.805l0,-147.958l-150.767,0l0,147.958l150.767,0Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/></g><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.66288e-14,271.569,-271.569,1.66288e-14,269.5,142.387)"><stop offset="0" style="stop-color:#decc84;stop-opacity:1"/><stop offset="0.49" style="stop-color:#e1b821;stop-opacity:1"/><stop offset="1" style="stop-color:#e2b201;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.66288e-14,271.569,-271.569,1.66288e-14,272.625,142.387)"><stop offset="0" style="stop-color:#decc84;stop-opacity:1"/><stop offset="0.49" style="stop-color:#e1b821;stop-opacity:1"/><stop offset="1" style="stop-color:#e2b201;stop-opacity:1"/></linearGradient></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 18 KiB |
49
mobile/apps/auth/assets/custom-icons/icons/toyhouse.svg
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="197.72693mm"
|
||||
height="190.30197mm"
|
||||
viewBox="0 0 197.72693 190.30197"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
|
||||
sodipodi:docname="Toyhouse.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview7"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.5"
|
||||
inkscape:cx="969"
|
||||
inkscape:cy="450"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs2" /><g
|
||||
inkscape:label="Capa 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(6.2923729,-54.858845)"><g
|
||||
id="g1824"><path
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M -6.2923729,154.22213 92.377447,54.858845 121.69053,84.093271 V 69.076617 h 31.14565 v 46.273543 l 38.59837,38.59837 h -32.36923 v 91.21228 H 25.02776 v -91.10105 z"
|
||||
id="path428"
|
||||
sodipodi:nodetypes="cccccccccccc" /><path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 54.338047,170.6337 v 8.39821 H 70.80075 v 53.94872 h 11.012215 v -54.00434 h 17.920872 c 0,0 2.72e-4,-0.23357 2.72e-4,2.12606 v 51.91208 h 8.966631 v -29.12162 h 26.03469 v 28.76768 h 9.28125 v -61.66526 h -8.96663 v 25.72008 h -26.42796 l 0.22247,-26.09986 z"
|
||||
id="path526"
|
||||
sodipodi:nodetypes="cccccccscccccccccccc" /></g></g></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
4
mobile/apps/auth/assets/custom-icons/icons/twitter.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 248 204">
|
||||
<path fill="#1d9bf0" d="M221.95 51.29c.15 2.17.15 4.34.15 6.53 0 66.73-50.8 143.69-143.69 143.69v-.04c-27.44.04-54.31-7.82-77.41-22.64 3.99.48 8 .72 12.02.73 22.74.02 44.83-7.61 62.72-21.66-21.61-.41-40.56-14.5-47.18-35.07 7.57 1.46 15.37 1.16 22.8-.87-23.56-4.76-40.51-25.46-40.51-49.5v-.64c7.02 3.91 14.88 6.08 22.92 6.32C11.58 63.31 4.74 33.79 18.14 10.71c25.64 31.55 63.47 50.73 104.08 52.76-4.07-17.54 1.49-35.92 14.61-48.25 20.34-19.12 52.33-18.14 71.45 2.19 11.31-2.23 22.15-6.38 32.07-12.26-3.77 11.69-11.66 21.62-22.2 27.93 10.01-1.18 19.79-3.86 29-7.95-6.78 10.16-15.32 19.01-25.2 26.16z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 732 B |
@@ -1,7 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
aria-label="Ubiquiti" role="img"
|
||||
viewBox="0 0 512 512"><rect
|
||||
width="512" height="512"
|
||||
rx="15"
|
||||
fill="#399cdb"/><path d="M112 94v18h18V94h-18zm288 0c-82 0-90 31-90 61v172a147 147 0 01-3 28c43-9 72-36 86-82l7-23V94zm-234 18v18h18v-18h-18zm-18 18v18h18v-18h-18zm36 9v18h18v-18h-18zm-72 4v147c0 73 53 128 144 128 0 0-54-30-54-91V197h-18v66h-18v-39h-18v17h-18v-98h-18zm54 18v18h18v-18h-18zm-18 27v18h18v-18h-18zm252 87c-19 64-65 92-131 89-24-1-43-7-57-16 10 42 46 63 48 64l10 6c82-5 130-59 130-128v-15z" fill="#ffffff"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M494.2 0h-31.8v31.8h31.8zM383.1 222.4v-63.6h63.5v63.5h63.5c1.1 58.9-3.4 110.2-33.3 161.6-86.6 152.4-300.5 172.9-414 39.2C36.3 392.4 17.2 355 8.3 315c-4.5-21.7-6.5-49.2-6.5-72.5V4h127l.2 242c.6 31.3 6.3 63.5 25 88 53.9 73 167.9 66.3 212.1-13.1 15.9-26.6 17.3-68.7 17-98.5m15.8-174.8h47.6v47.6H510v63.5h-63.5V95.3h-47.6z" style="fill:#005ed9"/></svg>
|
||||
|
Before Width: | Height: | Size: 679 B After Width: | Height: | Size: 440 B |
|
Before Width: | Height: | Size: 30 KiB |
21
mobile/apps/auth/assets/custom-icons/icons/zivver.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="240.000000pt" height="240.000000pt" viewBox="0 0 240.000000 240.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
|
||||
<g transform="translate(0.000000,240.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M765 2069 c-179 -12 -224 -23 -273 -65 -74 -63 -73 -55 -70 -619 l3
|
||||
-500 34 -70 c61 -125 213 -256 420 -362 110 -56 289 -126 321 -125 14 0 77 21
|
||||
140 47 313 126 514 275 597 442 l38 77 3 483 c2 341 0 495 -9 525 -7 28 -27
|
||||
59 -58 89 -56 56 -85 64 -309 79 -178 12 -648 11 -837 -1z m850 -403 c39 -1
|
||||
99 2 135 7 l65 7 -100 -34 c-95 -33 -103 -38 -167 -105 l-68 -71 0 -73 c0
|
||||
-100 -22 -138 -128 -222 -116 -93 -137 -142 -167 -390 -9 -71 -18 -141 -21
|
||||
-154 l-5 -24 -21 20 c-11 12 -27 45 -35 74 -21 80 -27 325 -10 434 9 55 11 97
|
||||
5 107 -4 10 -36 36 -69 58 -33 23 -92 71 -132 106 -55 51 -102 80 -202 129
|
||||
l-130 64 183 0 182 1 122 -45 c66 -24 136 -47 154 -51 31 -6 35 -3 63 42 71
|
||||
118 103 137 211 127 36 -3 97 -6 135 -7z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mobile/apps/auth/assets/icons/auth-icon-monochrome.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
@@ -1,31 +1,51 @@
|
||||
ente's Authenticator app helps you generate and store 2 step verification (2FA) tokens on your mobile devices.
|
||||
Ente Auth is the best and the only 2FA authenticator app you will ever need. It provides secure, end-to-end encrypted backup to your codes, works across devices whether its Android, iOS, Mac, Windows, Linux or Web. It also offers quality of life features like Tap to Copy, Next Code, and even allows you to share your codes securely with others.
|
||||
|
||||
Our customers absolutely love it.
|
||||
|
||||
FEATURES
|
||||
- It works everywhere and can either be used in the cloud with end-to-end encryption or on a single device without the need for an account. Ente’s UI is well thought out and easy to use. Plus it even shows you the next code if the current one is about to expire so you dont have to wait for it to roll over before your start typing. You can even pin, tag, and search your codes which makes it a lot easier to manage a big list compared to Google Authenticator. They call it a labour of love on their Github page, and it really looks like one. - Linus Tech Tips
|
||||
|
||||
- Secure Backups
|
||||
ente provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
|
||||
- Underrated but great authenticator app. Free, open source, and offers cloud backup. Very stable, has nice QoL features like the preview for the next code and the search bar. Overall, the best 2FA app I've used yet. - Luna Lometta
|
||||
|
||||
- Multi Device Synchronization
|
||||
ente will automatically sync the 2FA tokens you add to your account, across all your devices. Every new device you sign into will have access to these tokens.
|
||||
- Fantastic, fluid, has a dark theme, is open source, and also has a PC program. I switched from Authy to Ente Auth precisely for this reason, and I was surprised since the app as a whole is better and faster. - Daniel Ramos
|
||||
|
||||
- Web access
|
||||
You can access your 2FA code from any web browser by visiting https://auth.ente.io .
|
||||
- Better than Google Authenticator. - Piaw Piaw Kittens
|
||||
|
||||
- Offline Mode
|
||||
ente generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow.
|
||||
- Authy's best replacement. Open source, desktop support, synchronization, convenient token export. Huge thanks to the developers, I hope your product will become popular and famous. - Sergey Tverye
|
||||
|
||||
- Import and Export Tokens
|
||||
You can add tokens to ente by one of the following methods:
|
||||
1. Scanning a QR code
|
||||
2. Manually entering (copy-pasting) a 2FA secret
|
||||
3. Bulk importing from a file that contains a list of codes in the following format:
|
||||
- By far my favourite 2FA app. Over the years I've moved from Google Authenticator to Authy and have now happily "settled" with Ente Auth. - Dan Walsh
|
||||
|
||||
otpauth://totp/provider.com:you@email.com?secret=YOUR_SECRET
|
||||
- The best MFA app I ever used. I will never go back to Google Authenticator. - Pierre-Philippe Lessard
|
||||
|
||||
The codes maybe separated by new lines or commas.
|
||||
Ente Auth is recommended by Linus Tech Tips, CERN, Zerodha and many others.
|
||||
|
||||
You can also export the codes you have added to ente, to an **unencrypted** text file, that adheres to the above format.
|
||||
✨ Features
|
||||
|
||||
EASY IMPORT
|
||||
Add TOTP 2FA Codes to Ente Auth easily. You can either scan a QR code, or import from other authenticator apps to make sure you never lose a code while migrating
|
||||
|
||||
CROSS PLATFORM
|
||||
Ente Auth is available cross platform and supports all major devices and OS - including Android, iOS, Mac, Windows, Linux and Web.
|
||||
|
||||
SECURE E2EE BACKUP
|
||||
Ente Auth provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
|
||||
|
||||
OFFLINE MODE - NO SIGNUP REQUIRED
|
||||
Ente Auth generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow. You can even use Ente Auth without signing up for backups and use it locally for as long as you want
|
||||
|
||||
INTUITIVE SEARCH
|
||||
Ente Auth allows you to find your 2FA codes through one tap search. No more scrolling through a long list to find the right codes. Just tap on search and start typing.
|
||||
|
||||
CUSTOMISE YOUR EXPERIENCE
|
||||
Customise your experience of Ente Auth to make it like you want. Reorder your 2FA codes so that your most frequently used services are always on top. Change the icons by choosing from our massive icon library. Add tags so that you can filter codes like you want
|
||||
|
||||
SEE NEXT CODE
|
||||
Ever had to pause for the timer to run out on the current code, so you can type in the new 2FA code? Ente Auth makes your workflow extremely fast by displaying the next code prominently. Say goodbye to waiting
|
||||
|
||||
SHARE 2FA CODE
|
||||
We all have sent multiple messages to that colleague who keeps asking for the 2FA code to a shared account. Such a waste of productive time. With Ente Auth, you can securely share your 2FA tokens as a link. You can even set an expiry time for the link as well.
|
||||
|
||||
ADD NOTES
|
||||
Use notes to save any additional information including recovery codes. All notes are backed up with end to end encryption so you dont have to worry about losing them.
|
||||
|
||||
|
||||
SUPPORT
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_41060_128753)">
|
||||
<rect width="1024" height="1024" rx="234" fill="url(#paint0_linear_41060_128753)"/>
|
||||
<g opacity="0.8" filter="url(#filter0_dii_41060_128753)">
|
||||
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter1_dii_41060_128753)">
|
||||
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter2_ii_41060_128753)">
|
||||
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_dii_41060_128753" x="46.613" y="90.2452" width="931.502" height="1058.77" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="107.632"/>
|
||||
<feGaussianBlur stdDeviation="89.6935"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_41060_128753"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_41060_128753" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="17.9387"/>
|
||||
<feGaussianBlur stdDeviation="8.96935"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_41060_128753"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="-8.96935"/>
|
||||
<feGaussianBlur stdDeviation="4.48467"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="effect2_innerShadow_41060_128753" result="effect3_innerShadow_41060_128753"/>
|
||||
</filter>
|
||||
<filter id="filter1_dii_41060_128753" x="46.613" y="90.2452" width="931.502" height="1058.77" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="107.632"/>
|
||||
<feGaussianBlur stdDeviation="89.6935"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_41060_128753"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_41060_128753" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="17.9387"/>
|
||||
<feGaussianBlur stdDeviation="8.96935"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_41060_128753"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="-8.96935"/>
|
||||
<feGaussianBlur stdDeviation="4.48467"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="effect2_innerShadow_41060_128753" result="effect3_innerShadow_41060_128753"/>
|
||||
</filter>
|
||||
<filter id="filter2_ii_41060_128753" x="226" y="153.031" width="572.728" height="726.908" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="17.9387"/>
|
||||
<feGaussianBlur stdDeviation="8.96935"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_41060_128753"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="-8.96935"/>
|
||||
<feGaussianBlur stdDeviation="4.48467"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="effect1_innerShadow_41060_128753" result="effect2_innerShadow_41060_128753"/>
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_41060_128753" x1="96.5" y1="71" x2="985" y2="977.5" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#C373F2"/>
|
||||
<stop offset="1" stop-color="#9610D6"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_41060_128753">
|
||||
<rect width="1024" height="1024" rx="234" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 810 KiB |
|
Before Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 828 KiB |
|
Before Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 825 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 950 KiB |
|
After Width: | Height: | Size: 760 KiB |
|
After Width: | Height: | Size: 811 KiB |
@@ -1 +1 @@
|
||||
ente is an end-to-end encrypted authenticator app
|
||||
Free, Cross Platform, Private, Open Source Two Factor Authenticator App
|
||||
@@ -1 +1 @@
|
||||
Ente Authenticator
|
||||
Ente Auth - 2FA Authenticator
|
||||
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# Generated file, do not edit.
|
||||
#
|
||||
|
||||
import lldb
|
||||
|
||||
def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
|
||||
"""Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
|
||||
base = frame.register["x0"].GetValueAsAddress()
|
||||
page_len = frame.register["x1"].GetValueAsUnsigned()
|
||||
|
||||
# Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
|
||||
# first page to see if handled it correctly. This makes diagnosing
|
||||
# misconfiguration (e.g. missing breakpoint) easier.
|
||||
data = bytearray(page_len)
|
||||
data[0:8] = b'IHELPED!'
|
||||
|
||||
error = lldb.SBError()
|
||||
frame.GetThread().GetProcess().WriteMemory(base, data, error)
|
||||
if not error.Success():
|
||||
print(f'Failed to write into {base}[+{page_len}]', error)
|
||||
return
|
||||
|
||||
def __lldb_init_module(debugger: lldb.SBDebugger, _):
|
||||
target = debugger.GetDummyTarget()
|
||||
# Caveat: must use BreakpointCreateByRegEx here and not
|
||||
# BreakpointCreateByName. For some reasons callback function does not
|
||||
# get carried over from dummy target for the later.
|
||||
bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
|
||||
bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
|
||||
bp.SetAutoContinue(True)
|
||||
print("-- LLDB integration loaded --")
|
||||
5
mobile/apps/auth/ios/Flutter/ephemeral/flutter_lldbinit
Normal file
@@ -0,0 +1,5 @@
|
||||
#
|
||||
# Generated file, do not edit.
|
||||
#
|
||||
|
||||
command script import --relative-to-command-file flutter_lldb_helper.py
|
||||
@@ -26,6 +26,7 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
@@ -43,11 +44,13 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
|
||||
@@ -40,7 +40,7 @@ class _AppState extends State<App>
|
||||
late StreamSubscription<SignedOutEvent> _signedOutEvent;
|
||||
late StreamSubscription<SignedInEvent> _signedInEvent;
|
||||
Locale? locale;
|
||||
setLocale(Locale newLocale) {
|
||||
void setLocale(Locale newLocale) {
|
||||
setState(() {
|
||||
locale = newLocale;
|
||||
});
|
||||
@@ -82,7 +82,7 @@ class _AppState extends State<App>
|
||||
UpdateService.instance.getLatestVersionInfo(),
|
||||
);
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -199,9 +199,11 @@ class _AppState extends State<App>
|
||||
switch (menuItem.key) {
|
||||
case 'hide_window':
|
||||
windowManager.hide();
|
||||
windowManager.setSkipTaskbar(true);
|
||||
break;
|
||||
case 'show_window':
|
||||
windowManager.show();
|
||||
windowManager.setSkipTaskbar(false);
|
||||
break;
|
||||
case 'exit_app':
|
||||
windowManager.destroy();
|
||||
|
||||
@@ -27,10 +27,8 @@ Future<void> bootstrap(FutureOr<Widget> Function() builder) async {
|
||||
|
||||
await runZonedGuarded(
|
||||
() async {
|
||||
await BlocOverrides.runZoned(
|
||||
() async => runApp(await builder()),
|
||||
blocObserver: AppBlocObserver(),
|
||||
);
|
||||
Bloc.observer = AppBlocObserver();
|
||||
runApp(await builder());
|
||||
},
|
||||
(error, stackTrace) => log(error.toString(), stackTrace: stackTrace),
|
||||
);
|
||||
|
||||
@@ -39,7 +39,7 @@ final lightThemeData = ThemeData(
|
||||
bodyLarge: const TextStyle(color: Colors.orange),
|
||||
),
|
||||
cardColor: const Color.fromRGBO(250, 250, 250, 1.0),
|
||||
dialogTheme: const DialogTheme().copyWith(
|
||||
dialogTheme: const DialogThemeData().copyWith(
|
||||
backgroundColor: const Color.fromRGBO(250, 250, 250, 1.0), //
|
||||
titleTextStyle: const TextStyle(
|
||||
color: Colors.black,
|
||||
@@ -150,7 +150,7 @@ final darkThemeData = ThemeData(
|
||||
elevation: 0,
|
||||
),
|
||||
cardColor: const Color.fromRGBO(10, 15, 15, 1.0),
|
||||
dialogTheme: const DialogTheme().copyWith(
|
||||
dialogTheme: const DialogThemeData().copyWith(
|
||||
backgroundColor: const Color.fromRGBO(15, 15, 15, 1.0),
|
||||
titleTextStyle: const TextStyle(
|
||||
color: Colors.white,
|
||||
@@ -275,7 +275,7 @@ TextTheme _buildTextTheme(Color textColor) {
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
bodySmall: TextStyle(
|
||||
color: textColor.withOpacity(0.4),
|
||||
color: textColor.withValues(alpha: 0.4),
|
||||
fontSize: 10,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
@@ -343,7 +343,7 @@ extension CustomColorScheme on ColorScheme {
|
||||
: const Color.fromRGBO(48, 48, 48, 0.5);
|
||||
|
||||
Color get iconColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.75)
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.75)
|
||||
: const Color.fromRGBO(255, 255, 255, 1);
|
||||
|
||||
Color get bgColorForQuestions => brightness == Brightness.light
|
||||
@@ -354,7 +354,7 @@ extension CustomColorScheme on ColorScheme {
|
||||
|
||||
Color get cupertinoPickerTopColor => brightness == Brightness.light
|
||||
? const Color.fromARGB(255, 238, 238, 238)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.1);
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.1);
|
||||
|
||||
Color get stepProgressUnselectedColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(196, 196, 196, 0.6)
|
||||
@@ -381,20 +381,20 @@ extension CustomColorScheme on ColorScheme {
|
||||
: const Color.fromRGBO(20, 20, 20, 1);
|
||||
|
||||
Color get galleryThumbDrawColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.8)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.8)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
|
||||
|
||||
Color get backupEnabledBgColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(230, 230, 230, 0.95)
|
||||
: const Color.fromRGBO(10, 40, 40, 0.3);
|
||||
|
||||
Color get dotsIndicatorActiveColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.5)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.5)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
|
||||
|
||||
Color get dotsIndicatorInactiveColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.12)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.12);
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.12)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.12);
|
||||
|
||||
Color get toastTextColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(255, 255, 255, 1)
|
||||
@@ -409,8 +409,8 @@ extension CustomColorScheme on ColorScheme {
|
||||
: const Color.fromRGBO(100, 100, 100, 1);
|
||||
|
||||
Color get themeSwitchInactiveIconColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.5)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
|
||||
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.5)
|
||||
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
|
||||
|
||||
Color get searchResultsColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(245, 245, 245, 1.0)
|
||||
@@ -421,8 +421,8 @@ extension CustomColorScheme on ColorScheme {
|
||||
: const Color.fromRGBO(150, 150, 150, 1);
|
||||
|
||||
Color get searchResultsBackgroundColor => brightness == Brightness.light
|
||||
? Colors.black.withOpacity(0.32)
|
||||
: Colors.black.withOpacity(0.64);
|
||||
? Colors.black.withValues(alpha: 0.32)
|
||||
: Colors.black.withValues(alpha: 0.64);
|
||||
|
||||
Color get codeCardBackgroundColor => brightness == Brightness.light
|
||||
? const Color.fromRGBO(246, 246, 246, 1)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"timeBasedKeyType": "Oparte na czasie (TOTP)",
|
||||
"counterBasedKeyType": "Oparte na liczniku (HOTP)",
|
||||
"saveAction": "Zapisz",
|
||||
"nextTotpTitle": "dalej",
|
||||
"nextTotpTitle": "następny",
|
||||
"deleteCodeTitle": "Usunąć kod?",
|
||||
"deleteCodeMessage": "Czy na pewno chcesz usunąć ten kod? Ta akcja jest nieodwracalna.",
|
||||
"trashCode": "Przenieść kod do kosza?",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"pleaseVerifyDetails": "Kontrollera dina detaljer och försök igen",
|
||||
"codeIssuerHint": "Utfärdare",
|
||||
"codeSecretKeyHint": "Secret Key",
|
||||
"secret": "Säkerhets nyckel",
|
||||
"secret": "Säkerhetsnyckel",
|
||||
"all": "Alla",
|
||||
"notes": "Anteckningar",
|
||||
"notesLengthLimit": "Anteckningar kan vara högst {count} tecken långa",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"onBoardingGetStarted": "ጀምር",
|
||||
"setupFirstAccount": "ናይ መጀመርታ ሕሳብካ ኣዳል",
|
||||
"importScanQrCode": "QR ኮድ ስካን ግበር",
|
||||
"qrCode": "ኪዊኣር ስርዓት",
|
||||
"qrCode": "ኪዊኣር ኮድ",
|
||||
"importEnterSetupKey": "ምድላው መፍትሕ ኣእቱ",
|
||||
"importAccountPageTitle": "ዝርዝር ሕሳብ ኣእትዉ",
|
||||
"secretCanNotBeEmpty": "ምስጢር ባዶ ኪኸውን ኣይክእልን እዩ",
|
||||
@@ -19,6 +19,8 @@
|
||||
"pleaseVerifyDetails": "በጃኹም ዝርዝር-ሓበሬታ ኣረጋግጹ እሞ እንደገና ፈትኑ",
|
||||
"codeIssuerHint": "ኣዋጂ",
|
||||
"codeSecretKeyHint": "ምስጢራዊ መፍትሕ",
|
||||
"all": "ኩሉ",
|
||||
"notes": "መዘኻኸሪታት",
|
||||
"codeAccountHint": "ሕሳብ (you@domain.com)",
|
||||
"codeTagHint": "ልጣፍ",
|
||||
"accountKeyType": "ዓይነት ቁልፊ",
|
||||
@@ -30,12 +32,12 @@
|
||||
"loggingOut": "ወጸ...",
|
||||
"timeBasedKeyType": "ግዜ እተመስረተ (TOTP)",
|
||||
"counterBasedKeyType": "ቆጻሪ እተመስረተ (TOTP)",
|
||||
"saveAction": "",
|
||||
"saveAction": "ዓቅብ",
|
||||
"nextTotpTitle": "ቀጽሊ",
|
||||
"deleteCodeTitle": "ኮድ ምድምሳስ፧",
|
||||
"deleteCodeMessage": "ነዚ ኮድ ክትድምስሶ ከም እትደሊ ርግጸኛ ዲኻ፧ እዚ ተግባር ንድሕሪት ዘይምለስ እዩ።",
|
||||
"deleteCodeTitle": "ኮድ ይደምሰሰ፧",
|
||||
"deleteCodeMessage": "ነዚ ኮድ ክትድምስሶ ከም እትደሊ ርግጸኛ ዲኻ፧ እዚ ተግባር ንድሕሪት ዘይምለስ ኣይኮነን።",
|
||||
"viewLogsAction": "ምዝገባታት ርአ",
|
||||
"sendLogsDescription": "",
|
||||
"sendLogsDescription": "This will send across logs to help us debug your issue. While we take precautions to ensure that sensitive information is not logged, we encourage you to view these logs before sharing them.",
|
||||
"preparingLogsTitle": "ምዝገባ ድላው...",
|
||||
"emailLogsTitle": "መዝገብ ኢ-መይል",
|
||||
"emailLogsMessage": "በጃኹም ነቲ መዝገብ ናብ {email} ስደዱሉ",
|
||||
@@ -67,7 +69,7 @@
|
||||
"pleaseWait": "በጃኻ ተጸበ...",
|
||||
"generatingEncryptionKeysTitle": "ናይ ምስጢራዊ ቁልፊ ዪፍጠር...",
|
||||
"recreatePassword": "ቃለ-ምስጢር እንደገና ፍጠር",
|
||||
"recreatePasswordMessage": "እዛ ሕጂ ዘላ ኤለክትሮኒካዊት መሳርሒት ነቲ passwordካ ንምርግጋጽ እኹል ሓይሊ ስለ ዘይብላ ምስ ኵሉ መሳርሒታት ብዚሰማማዕ መገዲ ሓንሳእ እንደገና ኸነሐድሶ ኣሎና ።\n\nበጃኻ በቲ ምሕዋይ-መፍትሕ ኣቲኻ ቃለ-ምስጢር ኣሐድሶ (እንተ ደሊኻ ነታ ቃለ-ምስጢር እንደገና ኽትጥቀመላ ትኽእል ኢኻ)።",
|
||||
"recreatePasswordMessage": "እዛ ሕጂ ዘላ ኤለክትሮኒካዊት መሳርሒት ነቲ passwordካ ንምርግጋጽ እኹል ሓይሊ ስለ ዘይብላ ምስ ኵሉ መሳርሒታት ብዚሰማማዕ መገዲ ሓንሳእ እንደገና ኸነሐድሶ ኣሎና። \n\nበጃኻ በቲ ምሕዋይ-መፍትሕ ኣቲኻ ቃለ-ምስጢር ኣሐድሶ (እንተ ደሊኻ ነታ ቃለ-ምስጢር እንደገና ኽትጥቀመላ ትኽእል ኢኻ)።",
|
||||
"useRecoveryKey": "ምሕዋይ መፍትሕ ተጠቐም",
|
||||
"incorrectPasswordTitle": "ግጉይ ቃለ-ምስጢር",
|
||||
"welcomeBack": "እንኳዕ ብደሓን ተመለስካ!",
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import "package:ente_auth/l10n/arb/app_localizations.dart"
|
||||
show AppLocalizations;
|
||||
import "package:flutter/widgets.dart";
|
||||
import "package:flutter_gen/gen_l10n/app_localizations.dart";
|
||||
|
||||
export "package:flutter_gen/gen_l10n/app_localizations.dart";
|
||||
export "package:ente_auth/l10n/arb/app_localizations.dart"
|
||||
show AppLocalizations;
|
||||
|
||||
extension AppLocalizationsX on BuildContext {
|
||||
AppLocalizations get l10n => AppLocalizations.of(this);
|
||||
|
||||
@@ -40,8 +40,10 @@ Future<void> initSystemTray() async {
|
||||
if (PlatformUtil.isMobile()) return;
|
||||
String path = Platform.isWindows
|
||||
? 'assets/icons/auth-icon.ico'
|
||||
: 'assets/icons/auth-icon.png';
|
||||
await trayManager.setIcon(path);
|
||||
: Platform.isMacOS
|
||||
? 'assets/icons/auth-icon-monochrome.png'
|
||||
: 'assets/icons/auth-icon.png';
|
||||
await trayManager.setIcon(path, isTemplate: true);
|
||||
Menu menu = Menu(
|
||||
items: [
|
||||
MenuItem(
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'dart:convert';
|
||||
|
||||
class BillingPlans {
|
||||
final List<BillingPlan> plans;
|
||||
final FreePlan freePlan;
|
||||
final FreePlan? freePlan;
|
||||
|
||||
BillingPlans({
|
||||
required this.plans,
|
||||
@@ -12,12 +12,12 @@ class BillingPlans {
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
'plans': plans.map((x) => x.toMap()).toList(),
|
||||
'freePlan': freePlan.toMap(),
|
||||
'freePlan': freePlan?.toMap(),
|
||||
};
|
||||
}
|
||||
|
||||
static fromMap(Map<String, dynamic>? map) {
|
||||
if (map == null) return null;
|
||||
static BillingPlans fromMap(Map<String, dynamic>? map) {
|
||||
if (map == null) return BillingPlans(plans: [], freePlan: null);
|
||||
|
||||
return BillingPlans(
|
||||
plans: List<BillingPlan>.from(
|
||||
@@ -49,7 +49,7 @@ class FreePlan {
|
||||
};
|
||||
}
|
||||
|
||||
static fromMap(Map<String, dynamic>? map) {
|
||||
static FreePlan? fromMap(Map<String, dynamic>? map) {
|
||||
if (map == null) return null;
|
||||
|
||||
return FreePlan(
|
||||
@@ -91,7 +91,7 @@ class BillingPlan {
|
||||
};
|
||||
}
|
||||
|
||||
static fromMap(Map<String, dynamic>? map) {
|
||||
static BillingPlan? fromMap(Map<String, dynamic>? map) {
|
||||
if (map == null) return null;
|
||||
|
||||
return BillingPlan(
|
||||
|
||||
@@ -332,7 +332,7 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
|
||||
},
|
||||
);
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
barrierDismissible: false,
|
||||
);
|
||||
},
|
||||
|
||||
@@ -75,7 +75,7 @@ class CodeDisplayStore {
|
||||
builder: (BuildContext context) {
|
||||
return EditTagDialog(tag: tag);
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
barrierDismissible: false,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -147,12 +147,13 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
||||
),
|
||||
),
|
||||
child: DottedBorder(
|
||||
padding: EdgeInsets.zero,
|
||||
borderType: BorderType.RRect,
|
||||
strokeWidth: 1,
|
||||
color: const Color(0xFF6B6B6B),
|
||||
dashPattern: const [6, 6],
|
||||
radius: const Radius.circular(8),
|
||||
options: const RoundedRectDottedBorderOptions(
|
||||
padding: EdgeInsets.zero,
|
||||
strokeWidth: 1,
|
||||
color: Color(0xFF6B6B6B),
|
||||
dashPattern: [6, 6],
|
||||
radius: Radius.circular(8),
|
||||
),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: Stack(
|
||||
@@ -314,7 +315,13 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
||||
await _recoveryKeyFile.delete();
|
||||
}
|
||||
_recoveryKeyFile.writeAsStringSync(recoveryKey);
|
||||
await Share.shareXFiles([XFile(_recoveryKeyFile.path)]);
|
||||
await SharePlus.instance.share(
|
||||
ShareParams(
|
||||
files: [
|
||||
XFile(_recoveryKeyFile.path),
|
||||
],
|
||||
),
|
||||
);
|
||||
Future.delayed(const Duration(milliseconds: 500), () {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
|
||||
@@ -82,7 +82,7 @@ class _SessionsPageState extends State<SessionsPage> {
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSurface
|
||||
.withOpacity(0.8),
|
||||
.withValues(alpha: 0.8),
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
@@ -95,7 +95,7 @@ class _SessionsPageState extends State<SessionsPage> {
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSurface
|
||||
.withOpacity(0.8),
|
||||
.withValues(alpha: 0.8),
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -54,12 +54,12 @@ class BannerWidget extends StatelessWidget {
|
||||
dashColor = const Color.fromRGBO(255, 191, 12, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color(0xFFFDB816).withOpacity(0.1),
|
||||
color: const Color(0xFFFDB816).withValues(alpha: 0.1),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 80,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color(0xFFFDB816).withOpacity(0.2),
|
||||
color: const Color(0xFFFDB816).withValues(alpha: 0.2),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
@@ -71,12 +71,13 @@ class BannerWidget extends StatelessWidget {
|
||||
dashColor = const Color.fromRGBO(233, 233, 233, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(78, 78, 78, 1).withOpacity(0.2),
|
||||
color: const Color.fromRGBO(78, 78, 78, 1).withValues(alpha: 0.2),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(23, 22, 22, 0.30).withOpacity(0.1),
|
||||
color:
|
||||
const Color.fromRGBO(23, 22, 22, 0.30).withValues(alpha: 0.1),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
@@ -87,12 +88,12 @@ class BannerWidget extends StatelessWidget {
|
||||
dashColor = const Color.fromRGBO(29, 185, 84, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withOpacity(0.08),
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withValues(alpha: 0.08),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withOpacity(0.08),
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withValues(alpha: 0.08),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
@@ -103,12 +104,12 @@ class BannerWidget extends StatelessWidget {
|
||||
imagePath = "assets/discount.png";
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withOpacity(0.08),
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withValues(alpha: 0.08),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withOpacity(0.08),
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withValues(alpha: 0.08),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
@@ -121,10 +122,11 @@ class BannerWidget extends StatelessWidget {
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(50)),
|
||||
child: DottedBorder(
|
||||
borderType: BorderType.RRect,
|
||||
radius: const Radius.circular(50),
|
||||
dashPattern: const <double>[3, 3],
|
||||
color: dashColor,
|
||||
options: RoundedRectDottedBorderOptions(
|
||||
radius: const Radius.circular(50),
|
||||
dashPattern: <double>[3, 3],
|
||||
color: dashColor,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
if (BannerType.starUs == type)
|
||||
|
||||
@@ -28,7 +28,7 @@ class CustomIconWidget extends StatelessWidget {
|
||||
width: 1.5,
|
||||
color: getEnteColorScheme(context)
|
||||
.tagChipSelectedColor
|
||||
.withOpacity(0.5),
|
||||
.withValues(alpha: 0.5),
|
||||
),
|
||||
borderRadius: SmoothBorderRadius(
|
||||
cornerRadius: 15.5,
|
||||
@@ -102,7 +102,7 @@ class CustomIconWidget extends StatelessWidget {
|
||||
child: Icon(
|
||||
Icons.edit,
|
||||
size: 16,
|
||||
color: Colors.black.withOpacity(0.9),
|
||||
color: Colors.black.withValues(alpha: 0.9),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -52,7 +52,7 @@ class NotificationWidget extends StatelessWidget {
|
||||
subTextStyle = textTheme.miniMuted;
|
||||
strokeColorScheme = colorScheme;
|
||||
boxShadow = [
|
||||
BoxShadow(color: Colors.black.withOpacity(0.25), blurRadius: 1),
|
||||
BoxShadow(color: Colors.black.withValues(alpha: 0.25), blurRadius: 1),
|
||||
];
|
||||
break;
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ class TitleBarWidget extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
_actionsWithPaddingInBetween() {
|
||||
List<Widget> _actionsWithPaddingInBetween() {
|
||||
if (actionIcons == null) {
|
||||
return <Widget>[const SizedBox.shrink()];
|
||||
}
|
||||
@@ -135,7 +135,7 @@ class TitleBarWidget extends StatelessWidget {
|
||||
return <Widget>[const SizedBox.shrink()];
|
||||
}
|
||||
if (length == 1) {
|
||||
return actionIcons;
|
||||
return actionIcons!;
|
||||
}
|
||||
while (index < length) {
|
||||
if (!addWhiteSpace) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:ente_auth/ente_theme_data.dart';
|
||||
import 'package:ente_auth/models/execution_states.dart';
|
||||
import 'package:ente_auth/models/typedefs.dart';
|
||||
import 'package:ente_auth/theme/colors.dart';
|
||||
import 'package:ente_auth/ui/common/loading_widget.dart';
|
||||
import 'package:ente_auth/utils/debouncer.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -104,7 +105,7 @@ class _ToggleSwitchWidgetState extends State<ToggleSwitchWidget> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _stateIcon(enteColorScheme) {
|
||||
Widget _stateIcon(EnteColorScheme enteColorScheme) {
|
||||
if (executionState == ExecutionState.idle) {
|
||||
return const SizedBox(width: 24);
|
||||
} else if (executionState == ExecutionState.inProgress) {
|
||||
|
||||
@@ -23,7 +23,8 @@ class CoachMarkWidget extends StatelessWidget {
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
color: Theme.of(context).colorScheme.surface.withOpacity(0.1),
|
||||
color:
|
||||
Theme.of(context).colorScheme.surface.withValues(alpha: 0.1),
|
||||
child: BackdropFilter(
|
||||
filter: ImageFilter.blur(sigmaX: 8, sigmaY: 8),
|
||||
child: Row(
|
||||
|
||||
@@ -77,7 +77,7 @@ class AboutSectionWidget extends StatelessWidget {
|
||||
UpdateService.instance.getLatestVersionInfo(),
|
||||
);
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
);
|
||||
} else {
|
||||
showShortToast(
|
||||
|
||||
@@ -56,7 +56,7 @@ class AccountSectionWidget extends StatelessWidget {
|
||||
builder: (BuildContext context) {
|
||||
return const ChangeEmailDialog();
|
||||
},
|
||||
barrierColor: Colors.black.withOpacity(0.85),
|
||||
barrierColor: Colors.black.withValues(alpha: 0.85),
|
||||
barrierDismissible: false,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ class _DuplicateCodePageState extends State<DuplicateCodePage> {
|
||||
color: Theme.of(context)
|
||||
.iconTheme
|
||||
.color!
|
||||
.withOpacity(0.7),
|
||||
.withValues(alpha: 0.7),
|
||||
),
|
||||
),
|
||||
const Padding(padding: EdgeInsets.only(left: 4)),
|
||||
|
||||
@@ -170,9 +170,14 @@ Future<void> _exportCodes(
|
||||
}
|
||||
codeFile.writeAsStringSync(fileContent);
|
||||
final Size size = MediaQuery.of(context).size;
|
||||
await Share.shareXFiles(
|
||||
[XFile(codeFile.path)],
|
||||
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
|
||||
await SharePlus.instance.share(
|
||||
ShareParams(
|
||||
files: <XFile>[
|
||||
XFile(codeFile.path, mimeType: 'text/plain'),
|
||||
],
|
||||
sharePositionOrigin:
|
||||
Rect.fromLTWH(0, 0, size.width, size.height / 2),
|
||||
),
|
||||
);
|
||||
Future.delayed(const Duration(seconds: 30), () async {
|
||||
if (codeFile.existsSync()) {
|
||||
|
||||
@@ -116,10 +116,10 @@ class _LockScreenConfirmPasswordState extends State<LockScreenConfirmPassword> {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import "dart:io";
|
||||
|
||||
import "package:ente_auth/l10n/l10n.dart";
|
||||
import "package:ente_auth/theme/colors.dart";
|
||||
import "package:ente_auth/theme/ente_theme.dart";
|
||||
import "package:ente_auth/theme/text_style.dart";
|
||||
import "package:ente_auth/ui/settings/lock_screen/custom_pin_keypad.dart";
|
||||
import "package:ente_auth/utils/lock_screen_settings.dart";
|
||||
import "package:flutter/material.dart";
|
||||
@@ -89,7 +91,7 @@ class _LockScreenConfirmPinState extends State<LockScreenConfirmPin> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _getBody(colorTheme, textTheme) {
|
||||
Widget _getBody(EnteColorScheme colorTheme, EnteTextTheme textTheme) {
|
||||
return Center(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
@@ -107,10 +109,10 @@ class _LockScreenConfirmPinState extends State<LockScreenConfirmPin> {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -127,10 +127,10 @@ class _LockScreenPasswordState extends State<LockScreenPassword> {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -178,10 +178,10 @@ class _LockScreenPinState extends State<LockScreenPin> {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -43,7 +43,7 @@ class _SupportSectionWidgetState extends State<SupportSectionWidget> {
|
||||
trailingIconIsMuted: true,
|
||||
onTap: () async {
|
||||
try {
|
||||
PlatformUtil.openWebView(
|
||||
await PlatformUtil.openWebView(
|
||||
context,
|
||||
context.l10n.faq,
|
||||
"https://help.ente.io/auth/faq",
|
||||
|
||||
@@ -35,7 +35,7 @@ class SortCodeMenuWidget extends StatelessWidget {
|
||||
text,
|
||||
style: Theme.of(context).textTheme.titleMedium!.copyWith(
|
||||
fontSize: 14,
|
||||
color: Theme.of(context).iconTheme.color!.withOpacity(0.7),
|
||||
color: Theme.of(context).iconTheme.color!.withValues(alpha: 0.7),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:ente_auth/l10n/l10n.dart';
|
||||
import 'package:ente_auth/locale.dart';
|
||||
import 'package:ente_auth/utils/lock_screen_settings.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
/// A widget which handles app lifecycle events for showing and hiding a lock screen.
|
||||
/// This should wrap around a `MyApp` widget (or equivalent).
|
||||
|
||||
@@ -96,10 +96,10 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
Colors.grey.shade500.withOpacity(0.2),
|
||||
Colors.grey.shade50.withOpacity(0.1),
|
||||
Colors.grey.shade400.withOpacity(0.2),
|
||||
Colors.grey.shade300.withOpacity(0.4),
|
||||
Colors.grey.shade500.withValues(alpha: 0.2),
|
||||
Colors.grey.shade50.withValues(alpha: 0.1),
|
||||
Colors.grey.shade400.withValues(alpha: 0.2),
|
||||
Colors.grey.shade300.withValues(alpha: 0.4),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
|
||||
@@ -98,8 +98,9 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
|
||||
style: TextStyle(
|
||||
decoration: TextDecoration.underline,
|
||||
fontSize: 12,
|
||||
color:
|
||||
getEnteColorScheme(context).textBase.withOpacity(0.9),
|
||||
color: getEnteColorScheme(context)
|
||||
.textBase
|
||||
.withValues(alpha: 0.9),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -180,7 +180,7 @@ Future<ButtonResult?> showGenericErrorDialog({
|
||||
context,
|
||||
context.l10n.faq,
|
||||
"https://help.ente.io/auth/troubleshooting/windows-login",
|
||||
);
|
||||
).ignore();
|
||||
},
|
||||
),
|
||||
ButtonWidget(
|
||||
|
||||
@@ -34,7 +34,7 @@ class DirectoryUtils {
|
||||
}
|
||||
|
||||
static String migratedNamingChanges = "migrated_naming_changes.b5";
|
||||
static migrateNamingChanges() async {
|
||||
static Future<void> migrateNamingChanges() async {
|
||||
try {
|
||||
final sharedPrefs = await SharedPreferences.getInstance();
|
||||
if (sharedPrefs.containsKey(migratedNamingChanges)) {
|
||||
@@ -57,7 +57,7 @@ class DirectoryUtils {
|
||||
Directory oldDataDir;
|
||||
Directory newDataDir = await getApplicationSupportDirectory();
|
||||
await newDataDir.create(recursive: true);
|
||||
|
||||
|
||||
if (Platform.isLinux) {
|
||||
oldDataDir = Directory(
|
||||
p.join(dataHome.path, "ente_auth"),
|
||||
|
||||
@@ -232,9 +232,13 @@ Future<void> exportLogs(
|
||||
MimeType.zip,
|
||||
);
|
||||
} else {
|
||||
await Share.shareXFiles(
|
||||
[XFile(zipFilePath, mimeType: 'application/zip')],
|
||||
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
|
||||
await SharePlus.instance.share(
|
||||
ShareParams(
|
||||
files: <XFile>[
|
||||
XFile(zipFilePath, mimeType: 'application/zip'),
|
||||
],
|
||||
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||