mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-07-31 09:17:11 -04:00
Update aliasvault.net to aliasvault.com in all apps as default URL (#2199)
This commit is contained in:
committed by
GitHub
parent
6b0bc30bec
commit
ba1af08051
@@ -35,7 +35,7 @@ FORCE_HTTPS_REDIRECT=true
|
||||
|
||||
# In order to use AliasVault's private email domains feature, you need to configure
|
||||
# your DNS. Please refer to the full documentation for more instructions on DNS:
|
||||
# https://docs.aliasvault.net/installation/install.html#3-email-server-setup
|
||||
# https://docs.aliasvault.com/installation/script/#3-email-server-setup
|
||||
#
|
||||
# Set the private email domains below that the server should accept incoming mail for (comma separated values).
|
||||
# Example: PRIVATE_EMAIL_DOMAINS=example.com,example2.org
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -4,5 +4,5 @@ contact_links:
|
||||
url: https://discord.gg/DsaXMTEtpF
|
||||
about: Ask questions and discuss ideas with the community on Discord
|
||||
- name: 📖 Documentation
|
||||
url: https://docs.aliasvault.net
|
||||
url: https://docs.aliasvault.com
|
||||
about: Check out the official (self-host) documentation
|
||||
18
.github/workflows/release.yml
vendored
18
.github/workflows/release.yml
vendored
@@ -375,31 +375,31 @@ jobs:
|
||||
- image: client
|
||||
dockerfile: apps/server/AliasVault.Client/Dockerfile
|
||||
title: AliasVault Client
|
||||
description: Blazor WebAssembly client UI for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)
|
||||
description: Blazor WebAssembly client UI for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)
|
||||
- image: postgres
|
||||
dockerfile: apps/server/Databases/AliasServerDb/Dockerfile
|
||||
title: AliasVault PostgreSQL
|
||||
description: PostgreSQL database for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)
|
||||
description: PostgreSQL database for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)
|
||||
- image: api
|
||||
dockerfile: apps/server/AliasVault.Api/Dockerfile
|
||||
title: AliasVault API
|
||||
description: REST API backend for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)
|
||||
description: REST API backend for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)
|
||||
- image: admin
|
||||
dockerfile: apps/server/AliasVault.Admin/Dockerfile
|
||||
title: AliasVault Admin
|
||||
description: Admin portal for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)
|
||||
description: Admin portal for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)
|
||||
- image: reverse-proxy
|
||||
dockerfile: apps/server/Dockerfile
|
||||
title: AliasVault Reverse Proxy
|
||||
description: Nginx reverse proxy for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)
|
||||
description: Nginx reverse proxy for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)
|
||||
- image: smtp
|
||||
dockerfile: apps/server/Services/AliasVault.SmtpService/Dockerfile
|
||||
title: AliasVault SMTP Service
|
||||
description: SMTP service for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)
|
||||
description: SMTP service for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)
|
||||
- image: task-runner
|
||||
dockerfile: apps/server/Services/AliasVault.TaskRunner/Dockerfile
|
||||
title: AliasVault TaskRunner
|
||||
description: Background task runner for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)
|
||||
description: Background task runner for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)
|
||||
- image: installcli
|
||||
dockerfile: apps/server/Utilities/AliasVault.InstallCli/Dockerfile
|
||||
title: AliasVault Install CLI
|
||||
@@ -499,9 +499,9 @@ jobs:
|
||||
type=raw,value={{branch}}-{{sha}},enable=${{ needs.detect-version.outputs.version == '' }}
|
||||
labels: |
|
||||
org.opencontainers.image.title=AliasVault All-in-One
|
||||
org.opencontainers.image.description=Self-contained AliasVault server including web app, with all services bundled using s6-overlay. Single container solution for easy deployment (see docs.aliasvault.net).
|
||||
org.opencontainers.image.description=Self-contained AliasVault server including web app, with all services bundled using s6-overlay. Single container solution for easy deployment (see docs.aliasvault.com).
|
||||
annotations: |
|
||||
org.opencontainers.image.description=Self-contained AliasVault server including web app, with all services bundled using s6-overlay. Single container solution for easy deployment (see docs.aliasvault.net).
|
||||
org.opencontainers.image.description=Self-contained AliasVault server including web app, with all services bundled using s6-overlay. Single container solution for easy deployment (see docs.aliasvault.com).
|
||||
|
||||
- name: Build and push all-in-one image
|
||||
uses: docker/build-push-action@v7
|
||||
|
||||
@@ -27,7 +27,7 @@ The following encryption algorithms and standards are used by AliasVault:
|
||||
|
||||
Below is a detailed explanation of each encryption algorithm and standard.
|
||||
|
||||
For more information about how these algorithms are specifically used in AliasVault, see the [Architecture Documentation](https://docs.aliasvault.net/architecture) section on the documentation site.
|
||||
For more information about how these algorithms are specifically used in AliasVault, see the [Architecture Documentation](https://docs.aliasvault.com/architecture) section on the documentation site.
|
||||
|
||||
### Argon2id
|
||||
To derive a key from the master password, AliasVault uses the Argon2id key derivation function. Argon2id is a memory-hard
|
||||
@@ -164,4 +164,4 @@ The mobile login system combines RSA-2048 asymmetric encryption with AES-256-GCM
|
||||
- **MITM Protection**: Only the client with the RSA private key can decrypt the response
|
||||
- **Limited Attack Surface**: Short timeout window minimizes QR code interception risks
|
||||
|
||||
More information about the mobile login flow can be found in the [Architecture Documentation](https://docs.aliasvault.net/architecture/#6-login-with-mobile).
|
||||
More information about the mobile login flow can be found in the [Architecture Documentation](https://docs.aliasvault.com/architecture/#6-login-with-mobile).
|
||||
|
||||
@@ -44,7 +44,7 @@ In AliasVault, when creating a new credential AliasVault automatically generates
|
||||
- Create a list of common last names (surnames)
|
||||
- Optionally: Decade-specific names for more authentic generations
|
||||
|
||||
Read the specific instructions on how to contribute here: [Identity Generator Translations](https://docs.aliasvault.net/contributing/identity-generator.html).
|
||||
Read the specific instructions on how to contribute here: [Identity Generator Translations](https://docs.aliasvault.com/contributing/identity-generator.html).
|
||||
|
||||
## 3. Contributing to the Documentation
|
||||
|
||||
@@ -77,7 +77,7 @@ That said, we genuinely appreciate your ideas and proposals for UI/UX improvemen
|
||||
### 4.2 Set up your local development environment
|
||||
You can find instructions on how to get your local development environment setup for the different parts of the AliasVault codebase here:
|
||||
|
||||
https://docs.aliasvault.net/misc/dev/
|
||||
https://docs.aliasvault.com/misc/dev/
|
||||
|
||||
> Tip: if the URL above is not available, the raw doc pages can also be found in the `docs` folder in this repository.
|
||||
|
||||
|
||||
10
README.md
10
README.md
@@ -8,7 +8,7 @@ AliasVault is a privacy-first password and email alias manager. Create unique id
|
||||
[<img alt="Discord" src="https://img.shields.io/discord/1309300619026235422?logo=discord&logoColor=%237289da&label=Discord&color=%237289da">](https://discord.gg/DsaXMTEtpF)
|
||||
[<img src="https://opencollective.com/aliasvault/tiers/badge.svg">](https://opencollective.com/aliasvault)
|
||||
|
||||
<a href="https://app.aliasvault.net">Try the cloud version 🔥</a> | <a href="https://www.aliasvault.com?utm_source=gh-readme">Website </a> | <a href="https://docs.aliasvault.com?utm_source=gh-readme">Documentation </a> | <a href="#self-hosting">Self-host instructions</a>
|
||||
<a href="https://app.aliasvault.com">Try the cloud version 🔥</a> | <a href="https://www.aliasvault.com?utm_source=gh-readme">Website </a> | <a href="https://docs.aliasvault.com?utm_source=gh-readme">Documentation </a> | <a href="#self-hosting">Self-host instructions</a>
|
||||
|
||||
**⭐ Star us on GitHub, it motivates us a lot!**
|
||||
|
||||
@@ -49,10 +49,10 @@ Built on 15 years of experience, AliasVault is independent, open-source, self-ho
|
||||
</table>
|
||||
|
||||
## Cloud-hosted
|
||||
Use the official cloud version of AliasVault at [app.aliasvault.net](https://app.aliasvault.net). This fully supported platform is always up to date with our latest release.
|
||||
Use the official cloud version of AliasVault at [app.aliasvault.com](https://app.aliasvault.com). This fully supported platform is always up to date with our latest release.
|
||||
|
||||
AliasVault is available on:
|
||||
- [Web (universal)](https://app.aliasvault.net)
|
||||
- [Web (universal)](https://app.aliasvault.com)
|
||||
- [Chrome](https://chromewebstore.google.com/detail/aliasvault/bmoggiinmnodjphdjnmpcnlleamkfedj)
|
||||
- [Firefox](https://addons.mozilla.org/en-US/firefox/addon/aliasvault/)
|
||||
- [Edge](https://microsoftedge.microsoft.com/addons/detail/aliasvault/kabaanafahnjkfkplbnllebdmppdemfo)
|
||||
@@ -65,7 +65,7 @@ AliasVault is available on:
|
||||
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/{%22id%22:%22net.aliasvault.app%22,%22url%22:%22https://github.com/aliasvault/aliasvault%22,%22author%22:%22AliasVault%22,%22name%22:%22AliasVault%22,%22additionalSettings%22:%22{\%22about\%22:\%22Privacy-first%20Password%20Manager%20with%20Built-in%20Email%20Aliasing.\%22}%22}" style="display: inline-block;"><img src="https://github.com/user-attachments/assets/0e8c7cc6-533b-4fc4-bbc0-ce974d72de4b" style="height: 40px;" alt="Get it on F-Droid"></a>
|
||||
</p>
|
||||
|
||||
[<img width="700" alt="Screenshot of AliasVault" src="docs/assets/img/screenshot.png">](https://app.aliasvault.net)
|
||||
[<img width="700" alt="Screenshot of AliasVault" src="docs/assets/img/screenshot.png">](https://app.aliasvault.com)
|
||||
|
||||
## Self-hosting
|
||||
> [!NOTE]
|
||||
@@ -96,7 +96,7 @@ For more information about the installation process, manual setup instructions a
|
||||
- [Documentation website (docs.aliasvault.com) 📚](https://docs.aliasvault.com)
|
||||
|
||||
## Security Architecture
|
||||
<a href="https://docs.aliasvault.com/architecture"><img alt="AliasVault Security Architecture Diagram" src="docs/static/assets/diagrams/security-architecture/aliasvault-security-architecture-thumb.jpg" width="343"></a>
|
||||
<a href="https://docs.aliasvault.com/architecture"><img alt="AliasVault Security Architecture Diagram" src="docs/assets/diagrams/security-architecture/aliasvault-security-architecture-thumb.jpg" width="343"></a>
|
||||
|
||||
AliasVault takes security seriously and implements various measures to protect your data:
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ import type { MatchingPasskeysResponse, WebAuthnAssertionResponse, WebAuthnPubli
|
||||
import { isRpIdAllowedForHost, validateWebAuthnRequest } from '@/utils/passkey/WebAuthnRequestValidation';
|
||||
import type { WebAuthnBridgeRequest } from '@/utils/passkey/WebAuthnRequestValidation';
|
||||
|
||||
import { runStartupMigrations } from '@/migrations';
|
||||
|
||||
import { defineBackground, browser } from '#imports';
|
||||
|
||||
type WebAuthnMessageSender = {
|
||||
@@ -329,6 +331,15 @@ export default defineBackground({
|
||||
* already synchronous and complete before this runs.
|
||||
*/
|
||||
(async () : Promise<void> => {
|
||||
try {
|
||||
/*
|
||||
* Run one-time startup migrations.
|
||||
*/
|
||||
await runStartupMigrations();
|
||||
} catch (error) {
|
||||
console.error('Error running startup migrations:', error);
|
||||
}
|
||||
|
||||
try {
|
||||
const isContextMenuEnabled = await LocalPreferencesService.getGlobalContextMenuEnabled();
|
||||
if (isContextMenuEnabled) {
|
||||
|
||||
@@ -16,7 +16,7 @@ type ApiOption = {
|
||||
};
|
||||
|
||||
const DEFAULT_OPTIONS: ApiOption[] = [
|
||||
{ label: 'Aliasvault.net', value: AppInfo.DEFAULT_API_URL },
|
||||
{ label: 'AliasVault.com', value: AppInfo.DEFAULT_API_URL },
|
||||
{ label: 'Self-hosted', value: 'custom' }
|
||||
];
|
||||
|
||||
@@ -165,7 +165,7 @@ const AuthSettings: React.FC = () => {
|
||||
} catch (error: unknown) {
|
||||
if (error instanceof Yup.ValidationError) {
|
||||
setErrors(prev => ({ ...prev, apiUrl: error.message }));
|
||||
// On error we revert back to the aliasvault.net official hosted instance.
|
||||
// On error we revert back to the aliasvault.com official hosted instance.
|
||||
await storage.setItem('local:apiUrl', AppInfo.DEFAULT_API_URL);
|
||||
await storage.setItem('local:clientUrl', AppInfo.DEFAULT_CLIENT_URL);
|
||||
pendingApiUrlRef.current = null;
|
||||
|
||||
@@ -34,7 +34,7 @@ export const useApiUrl = (): {
|
||||
*/
|
||||
const getDisplayUrl = (): string => {
|
||||
const cleanUrl = apiUrl.replace('https://', '').replace('http://', '').replace(':443', '').replace('/api', '');
|
||||
return cleanUrl === 'app.aliasvault.net' ? 'aliasvault.net' : cleanUrl;
|
||||
return cleanUrl === 'app.aliasvault.com' ? 'aliasvault.com' : cleanUrl;
|
||||
};
|
||||
|
||||
return {
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import { AppInfo } from '@/utils/AppInfo';
|
||||
|
||||
import { storage } from '#imports';
|
||||
|
||||
/**
|
||||
* Legacy official hosted URLs from before the aliasvault.net -> aliasvault.com domain move.
|
||||
* Existing installs may still have these persisted from when they were the defaults.
|
||||
*/
|
||||
const LEGACY_API_URL = 'https://app.aliasvault.net/api';
|
||||
const LEGACY_CLIENT_URL = 'https://app.aliasvault.net';
|
||||
|
||||
/**
|
||||
* One-time, idempotent migration that rewrites a persisted legacy aliasvault.net official URL to
|
||||
* the current aliasvault.com default. Only the exact old official defaults are migrated; custom
|
||||
* self-hosted URLs are left untouched. Safe to run on every startup (no-op once migrated or when
|
||||
* the official instance is used, which is stored as an empty string).
|
||||
*
|
||||
* Added in the 0.29.7 release. Can be removed once installs from before 0.29.7 are no longer in use.
|
||||
*/
|
||||
export async function migrateLegacyApiUrl(): Promise<void> {
|
||||
try {
|
||||
const apiUrl = await storage.getItem('local:apiUrl') as string | null;
|
||||
if (apiUrl === LEGACY_API_URL) {
|
||||
await storage.setItem('local:apiUrl', AppInfo.DEFAULT_API_URL);
|
||||
}
|
||||
|
||||
const clientUrl = await storage.getItem('local:clientUrl') as string | null;
|
||||
if (clientUrl === LEGACY_CLIENT_URL) {
|
||||
await storage.setItem('local:clientUrl', AppInfo.DEFAULT_CLIENT_URL);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to migrate legacy API URL:', error);
|
||||
}
|
||||
}
|
||||
14
apps/browser-extension/src/migrations/index.ts
Normal file
14
apps/browser-extension/src/migrations/index.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { migrateLegacyApiUrl } from '@/migrations/0.29.7-LegacyApiUrlMigration';
|
||||
|
||||
/**
|
||||
* Generic entry point for one-time startup migrations. Called once during background startup;
|
||||
* add any future migration as another awaited call below. Each migration must be idempotent and
|
||||
* swallow its own errors so a single failure cannot block startup.
|
||||
*
|
||||
* Keeping every migration behind this single function means callers never touch app internals,
|
||||
* and retiring a migration later is just deleting its file and removing its line here.
|
||||
*/
|
||||
export async function runStartupMigrations(): Promise<void> {
|
||||
// 0.29.7: Migrate legacy aliasvault.net URLs to aliasvault.com defaults.
|
||||
await migrateLegacyApiUrl();
|
||||
}
|
||||
@@ -52,12 +52,12 @@ export class AppInfo {
|
||||
/**
|
||||
* The default AliasVault client URL.
|
||||
*/
|
||||
public static readonly DEFAULT_CLIENT_URL = 'https://app.aliasvault.net';
|
||||
public static readonly DEFAULT_CLIENT_URL = 'https://app.aliasvault.com';
|
||||
|
||||
/**
|
||||
* The default AliasVault web API URL.
|
||||
*/
|
||||
public static readonly DEFAULT_API_URL = 'https://app.aliasvault.net/api';
|
||||
public static readonly DEFAULT_API_URL = 'https://app.aliasvault.com/api';
|
||||
|
||||
/**
|
||||
* Prevent instantiation of this utility class
|
||||
|
||||
@@ -47,6 +47,7 @@ async function createEmail(
|
||||
return {
|
||||
messageHtml: '',
|
||||
messagePlain: '',
|
||||
messageSource: '',
|
||||
id: 1,
|
||||
subject: '',
|
||||
fromDisplay: '',
|
||||
@@ -78,7 +79,7 @@ async function encryptAttachmentBytes(plaintext: Uint8Array, rawSymmetricKey: st
|
||||
['encrypt']
|
||||
);
|
||||
const iv = crypto.getRandomValues(new Uint8Array(12));
|
||||
const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, plaintext);
|
||||
const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, new Uint8Array(plaintext));
|
||||
const encryptedBytes = new Uint8Array(iv.length + ciphertext.byteLength);
|
||||
encryptedBytes.set(iv, 0);
|
||||
encryptedBytes.set(new Uint8Array(ciphertext), iv.length);
|
||||
|
||||
@@ -37,7 +37,7 @@ class WebApiService(private val context: Context) {
|
||||
private const val REFRESH_TOKEN_KEY = "refreshToken"
|
||||
private const val APP_INSTANCE_ID_KEY = "appInstanceId"
|
||||
private const val CUSTOM_PROXY_HEADERS_KEY = "customProxyHeaders"
|
||||
private const val DEFAULT_API_URL = "https://app.aliasvault.net/api"
|
||||
private const val DEFAULT_API_URL = "https://app.aliasvault.com/api"
|
||||
private const val SHARED_PREFS_NAME = "aliasvault"
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ export default function AndroidAutofillScreen() : React.ReactNode {
|
||||
* Handle opening the documentation link.
|
||||
*/
|
||||
const handleOpenDocs = () : void => {
|
||||
Linking.openURL('https://docs.aliasvault.net/mobile-apps/android/autofill.html');
|
||||
Linking.openURL('https://docs.aliasvault.com/installation/mobile-apps/android/autofill/');
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,6 +22,7 @@ import { DialogProvider } from '@/context/DialogContext';
|
||||
import { NavigationProvider, useNavigation } from '@/context/NavigationContext';
|
||||
import { WebApiProvider } from '@/context/WebApiContext';
|
||||
import { initI18n } from '@/i18n';
|
||||
import { runStartupMigrations } from '@/migrations';
|
||||
|
||||
SplashScreen.preventAutoHideAsync();
|
||||
|
||||
@@ -52,11 +53,12 @@ function RootLayoutNav() : React.ReactNode {
|
||||
|
||||
/**
|
||||
* Initialize i18n and inspect the cold-start deep link in parallel.
|
||||
* One-time startup migrations run here too.
|
||||
* If a deep link is detected, set the return URL so after succesful
|
||||
* initialization, the app will navigate to the deep link target.
|
||||
*/
|
||||
(async (): Promise<void> => {
|
||||
const [, initialUrl] = await Promise.all([initI18n(), Linking.getInitialURL()]);
|
||||
const [, initialUrl] = await Promise.all([initI18n(), Linking.getInitialURL(), runStartupMigrations()]);
|
||||
|
||||
const resolved = await resolveDeepLink(initialUrl);
|
||||
if (resolved) {
|
||||
|
||||
@@ -49,7 +49,7 @@ export default function SettingsScreen() : React.ReactNode {
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
|
||||
const DEFAULT_OPTIONS: ApiOption[] = useMemo(() => [
|
||||
{ label: t('app.loginSettings.aliasvaultNet'), value: AppInfo.DEFAULT_API_URL },
|
||||
{ label: 'AliasVault.com', value: AppInfo.DEFAULT_API_URL },
|
||||
{ label: t('app.loginSettings.selfHosted'), value: 'custom' },
|
||||
], [t]);
|
||||
|
||||
|
||||
@@ -814,7 +814,7 @@ export default function LoginScreen() : React.ReactNode {
|
||||
<View style={styles.createNewVaultContainer}>
|
||||
<Text style={styles.textMuted}>{t('auth.noAccountYet')} </Text>
|
||||
<InAppBrowserView
|
||||
url="https://app.aliasvault.net/user/setup"
|
||||
url="https://app.aliasvault.com/user/setup"
|
||||
title={t('auth.createNewVault')}
|
||||
textStyle={styles.clickableLink}
|
||||
/>
|
||||
|
||||
@@ -655,7 +655,6 @@
|
||||
},
|
||||
"loginSettings": {
|
||||
"title": "API Connection",
|
||||
"aliasvaultNet": "Aliasvault.net",
|
||||
"selfHosted": "Self-hosted",
|
||||
"customApiUrl": "Custom API URL",
|
||||
"customApiUrlPlaceholder": "https://my-aliasvault-instance.com/api",
|
||||
|
||||
@@ -861,7 +861,7 @@ final class AliasVaultUITests: XCTestCase {
|
||||
@MainActor
|
||||
private func performLogin(with testUser: TestUser) {
|
||||
// Check if API URL is already configured to localhost by looking at the displayed URL
|
||||
// The login screen shows the URL via server-url-link, containing text like "localhost:5100" or "aliasvault.net"
|
||||
// The login screen shows the URL via server-url-link, containing text like "localhost:5100" or "aliasvault.com"
|
||||
let serverUrlLink = app.findElement(testID: "server-url-link")
|
||||
var needsApiConfig = true
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ public class WebApiService {
|
||||
private let customProxyHeadersKey = "customProxyHeaders"
|
||||
|
||||
// Default API URL
|
||||
private let defaultApiUrl = "https://app.aliasvault.net/api"
|
||||
private let defaultApiUrl = "https://app.aliasvault.com/api"
|
||||
|
||||
/// Shared UserDefaults for communication between main app and extension
|
||||
private let userDefaults = UserDefaults(suiteName: VaultConstants.userDefaultsSuite)!
|
||||
|
||||
28
apps/mobile-app/migrations/0.29.7-LegacyApiUrlMigration.ts
Normal file
28
apps/mobile-app/migrations/0.29.7-LegacyApiUrlMigration.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { AppInfo } from '@/utils/AppInfo';
|
||||
|
||||
import NativeVaultManager from '@/specs/NativeVaultManager';
|
||||
|
||||
/**
|
||||
* Legacy official hosted API URL from before the aliasvault.net -> aliasvault.com domain move.
|
||||
* Existing installs that were set up while this was the default still have it persisted natively.
|
||||
*/
|
||||
const LEGACY_API_URL = 'https://app.aliasvault.net/api';
|
||||
|
||||
/**
|
||||
* One-time, idempotent migration that rewrites a persisted legacy aliasvault.net official API URL
|
||||
* to the current aliasvault.com default. Only the exact old official default is migrated; custom
|
||||
* self-hosted URLs are left untouched. Safe to run on every cold start (no-op once migrated or when
|
||||
* no URL is stored).
|
||||
*
|
||||
* Added in the 0.29.7 release. Can be removed once installs from before 0.29.7 are no longer in use.
|
||||
*/
|
||||
export async function migrateLegacyApiUrl(): Promise<void> {
|
||||
try {
|
||||
const apiUrl = await NativeVaultManager.getApiUrl();
|
||||
if (apiUrl === LEGACY_API_URL) {
|
||||
await NativeVaultManager.setApiUrl(AppInfo.DEFAULT_API_URL);
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Failed to migrate legacy API URL:', error);
|
||||
}
|
||||
}
|
||||
14
apps/mobile-app/migrations/index.ts
Normal file
14
apps/mobile-app/migrations/index.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { migrateLegacyApiUrl } from '@/migrations/0.29.7-LegacyApiUrlMigration';
|
||||
|
||||
/**
|
||||
* Generic entry point for one-time startup migrations. Called once during cold-start boot;
|
||||
* add any future migration as another awaited call below. Each migration must be idempotent and
|
||||
* swallow its own errors so a single failure cannot block startup.
|
||||
*
|
||||
* Keeping every migration behind this single function means callers never touch app internals,
|
||||
* and retiring a migration later is just deleting its file and removing its line here.
|
||||
*/
|
||||
export async function runStartupMigrations(): Promise<void> {
|
||||
// 0.29.7: Migrate legacy aliasvault.net URLs to aliasvault.com defaults.
|
||||
await migrateLegacyApiUrl();
|
||||
}
|
||||
@@ -37,7 +37,7 @@ export const useApiUrl = (): {
|
||||
*/
|
||||
const getDisplayUrl = (): string => {
|
||||
const cleanUrl = apiUrl.replace('https://', '').replace('http://', '').replace(':443', '').replace('/api', '');
|
||||
return cleanUrl === 'app.aliasvault.net' ? 'aliasvault.net' : cleanUrl;
|
||||
return cleanUrl === 'app.aliasvault.com' ? 'aliasvault.com' : cleanUrl;
|
||||
};
|
||||
|
||||
return {
|
||||
|
||||
@@ -39,12 +39,12 @@ export class AppInfo {
|
||||
/**
|
||||
* The default AliasVault client URL.
|
||||
*/
|
||||
public static readonly DEFAULT_CLIENT_URL = 'https://app.aliasvault.net';
|
||||
public static readonly DEFAULT_CLIENT_URL = 'https://app.aliasvault.com';
|
||||
|
||||
/**
|
||||
* The default AliasVault web API URL.
|
||||
*/
|
||||
public static readonly DEFAULT_API_URL = 'https://app.aliasvault.net/api';
|
||||
public static readonly DEFAULT_API_URL = 'https://app.aliasvault.com/api';
|
||||
|
||||
/**
|
||||
* Prevent instantiation of this utility class
|
||||
|
||||
@@ -25,7 +25,7 @@ LABEL org.opencontainers.image.source="https://github.com/aliasvault/aliasvault"
|
||||
LABEL org.opencontainers.image.vendor="AliasVault"
|
||||
LABEL org.opencontainers.image.licenses="AGPL-3.0"
|
||||
LABEL org.opencontainers.image.title="AliasVault Admin"
|
||||
LABEL org.opencontainers.image.description="Admin portal for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)"
|
||||
LABEL org.opencontainers.image.description="Admin portal for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)"
|
||||
|
||||
# Install Kerberos libraries to prevent .NET 10 GSSAPI warnings
|
||||
RUN apk add --no-cache krb5-libs
|
||||
|
||||
@@ -22,7 +22,7 @@ LABEL org.opencontainers.image.source="https://github.com/aliasvault/aliasvault"
|
||||
LABEL org.opencontainers.image.vendor="AliasVault"
|
||||
LABEL org.opencontainers.image.licenses="AGPL-3.0"
|
||||
LABEL org.opencontainers.image.title="AliasVault API"
|
||||
LABEL org.opencontainers.image.description="REST API backend for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)"
|
||||
LABEL org.opencontainers.image.description="REST API backend for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)"
|
||||
|
||||
# Install Kerberos libraries to prevent .NET 10 GSSAPI warnings
|
||||
RUN apk add --no-cache krb5-libs
|
||||
|
||||
@@ -100,7 +100,7 @@ LABEL org.opencontainers.image.source="https://github.com/aliasvault/aliasvault"
|
||||
LABEL org.opencontainers.image.vendor="AliasVault"
|
||||
LABEL org.opencontainers.image.licenses="AGPL-3.0"
|
||||
LABEL org.opencontainers.image.title="AliasVault Client"
|
||||
LABEL org.opencontainers.image.description="Blazor WebAssembly client UI for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)"
|
||||
LABEL org.opencontainers.image.description="Blazor WebAssembly client UI for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)"
|
||||
|
||||
WORKDIR /usr/share/nginx/html
|
||||
COPY --from=publish /app/publish/wwwroot .
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
</optgroup>
|
||||
</select>
|
||||
<span class="block text-sm font-normal text-gray-500 dark:text-gray-400 mt-2">
|
||||
@Localizer["DefaultEmailDomainDescription"] @Localizer["DefaultEmailDomainDescriptionNote"] <a href="https://docs.aliasvault.net/misc/private-vs-public-email.html" class="text-primary-500 hover:text-primary-700 hover:underline" target="_blank" rel="noopener">@Localizer["DefaultEmailDomainLearnMore"]</a>.
|
||||
@Localizer["DefaultEmailDomainDescription"] @Localizer["DefaultEmailDomainDescriptionNote"] <a href="https://docs.aliasvault.com/misc/private-vs-public-email.html" class="text-primary-500 hover:text-primary-700 hover:underline" target="_blank" rel="noopener">@Localizer["DefaultEmailDomainLearnMore"]</a>.
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ LABEL org.opencontainers.image.source="https://github.com/aliasvault/aliasvault"
|
||||
LABEL org.opencontainers.image.vendor="AliasVault"
|
||||
LABEL org.opencontainers.image.licenses="AGPL-3.0"
|
||||
LABEL org.opencontainers.image.title="AliasVault PostgreSQL"
|
||||
LABEL org.opencontainers.image.description="PostgreSQL database for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)"
|
||||
LABEL org.opencontainers.image.description="PostgreSQL database for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)"
|
||||
|
||||
# Install pigz for parallel compression during database exports
|
||||
RUN apk add --no-cache pigz
|
||||
|
||||
@@ -5,7 +5,7 @@ LABEL org.opencontainers.image.source="https://github.com/aliasvault/aliasvault"
|
||||
LABEL org.opencontainers.image.vendor="AliasVault"
|
||||
LABEL org.opencontainers.image.licenses="AGPL-3.0"
|
||||
LABEL org.opencontainers.image.title="AliasVault Reverse Proxy"
|
||||
LABEL org.opencontainers.image.description="Nginx reverse proxy for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)"
|
||||
LABEL org.opencontainers.image.description="Nginx reverse proxy for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)"
|
||||
|
||||
# Install OpenSSL and inotify-tools for certificate watching
|
||||
RUN apk add --no-cache openssl inotify-tools
|
||||
|
||||
@@ -23,7 +23,7 @@ LABEL org.opencontainers.image.source="https://github.com/aliasvault/aliasvault"
|
||||
LABEL org.opencontainers.image.vendor="AliasVault"
|
||||
LABEL org.opencontainers.image.licenses="AGPL-3.0"
|
||||
LABEL org.opencontainers.image.title="AliasVault SMTP Service"
|
||||
LABEL org.opencontainers.image.description="SMTP service for email alias functionality in AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)"
|
||||
LABEL org.opencontainers.image.description="SMTP service for email alias functionality in AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)"
|
||||
|
||||
# Install Kerberos libraries to prevent .NET 10 GSSAPI warnings
|
||||
RUN apk add --no-cache krb5-libs
|
||||
|
||||
@@ -21,7 +21,7 @@ LABEL org.opencontainers.image.source="https://github.com/aliasvault/aliasvault"
|
||||
LABEL org.opencontainers.image.vendor="AliasVault"
|
||||
LABEL org.opencontainers.image.licenses="AGPL-3.0"
|
||||
LABEL org.opencontainers.image.title="AliasVault TaskRunner"
|
||||
LABEL org.opencontainers.image.description="Background task runner for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.net)"
|
||||
LABEL org.opencontainers.image.description="Background task runner for AliasVault. Part of multi-container setup and can be deployed via install.sh (see docs.aliasvault.com)"
|
||||
|
||||
# Install Kerberos libraries to prevent .NET 10 GSSAPI warnings
|
||||
RUN apk add --no-cache krb5-libs
|
||||
|
||||
@@ -3,6 +3,6 @@ Business,,login,Item for business folder,,,0,,crisply,4CSp43uhSZri8A,
|
||||
,,login,Test,,,0,,,,
|
||||
,,login,Test,,,0,,test2,asdasd,
|
||||
Business,,login,TutaNota,,,0,,avtest2@tutamail.com,blabla,otpauth://totp/Strongbox?secret=PLW4SB3PQ7MKVXY2MXF4NEXS6Y&algorithm=SHA1&digits=6&period=30
|
||||
Business,,login,Aliasvault.net,,,0,https://www.aliasvault.com,root,toor,
|
||||
Business,,login,Aliasvault.com,,,0,https://www.aliasvault.com,root,toor,
|
||||
Work/Projects,,login,WorkItem,,,0,https://work.example.com,workuser,workpass,
|
||||
Work/Projects/Active,,login,ActiveItem,,,0,https://active.example.com,activeuser,activepass,
|
||||
|
||||
|
@@ -65,7 +65,7 @@ public class ImportTests : ClientPlaywrightTest
|
||||
{
|
||||
Assert.That(pageContent, Does.Contain("Test"), "Test item not imported at root level");
|
||||
Assert.That(pageContent, Does.Not.Contain("TutaNota"), "TutaNota should be in Business folder, not at root");
|
||||
Assert.That(pageContent, Does.Not.Contain("Aliasvault.net"), "Aliasvault.net should be in Business folder, not at root");
|
||||
Assert.That(pageContent, Does.Not.Contain("Aliasvault.com"), "Aliasvault.com should be in Business folder, not at root");
|
||||
});
|
||||
|
||||
// Verify the Business folder was created.
|
||||
@@ -84,7 +84,7 @@ public class ImportTests : ClientPlaywrightTest
|
||||
{
|
||||
Assert.That(folderPageContent, Does.Contain("Item for business folder"), "Item for business folder not imported");
|
||||
Assert.That(folderPageContent, Does.Contain("TutaNota"), "TutaNota item not imported in Business folder");
|
||||
Assert.That(folderPageContent, Does.Contain("Aliasvault.net"), "Aliasvault.net item not imported in Business folder");
|
||||
Assert.That(folderPageContent, Does.Contain("Aliasvault.com"), "Aliasvault.com item not imported in Business folder");
|
||||
});
|
||||
|
||||
// Navigate back to root and test hierarchical folders.
|
||||
|
||||
@@ -3,7 +3,7 @@ Business,,login,Item for business folder,,,0,,crisply,4CSp43uhSZri8A,
|
||||
,,login,Test,,,0,,,,
|
||||
,,login,Test,,,0,,test2,asdasd,
|
||||
Business,,login,TutaNota,,,0,,avtest2@tutamail.com,blabla,otpauth://totp/Strongbox?secret=PLW4SB3PQ7MKVXY2MXF4NEXS6Y&algorithm=SHA1&digits=6&period=30
|
||||
Business,,login,Aliasvault.net,,,0,https://www.aliasvault.com,root,toor,
|
||||
Business,,login,Aliasvault.com,,,0,https://www.aliasvault.com,root,toor,
|
||||
Business,,login,TutaNota3,,,0,"https://www.aliasvault.com,https://app.aliasvault.com,https://downloads.aliasvault.com",avtest3@tutamail.com,blabla,otpauth://totp/Test%20name%3Atest%40test.org?secret=PLW4SB3PQ7MKVXY2MXF4NEXS6Y&issuer=Alias%20Vault
|
||||
Business,,login,TutaNota4,,,0,,avtest4@tutamail.com,blabla,otpauth://totp/my.email@gmail.com?secret=TEST!INVALID&issuer=Alias%20Vault&algorithm=SHA1&digits=6&period=30
|
||||
Business,,login,TutaNota5,,,0,,avtest5@tutamail.com,blabla,incorrectstring
|
||||
|
||||
|
@@ -218,10 +218,10 @@ public class ImportExportTests
|
||||
Assert.That(tutaNotaCredential.TwoFactorSecret, Is.EqualTo("otpauth://totp/Strongbox?secret=PLW4SB3PQ7MKVXY2MXF4NEXS6Y&algorithm=SHA1&digits=6&period=30"));
|
||||
});
|
||||
|
||||
var aliasVaultCredential = importedCredentials.First(c => c.ServiceName == "Aliasvault.net");
|
||||
var aliasVaultCredential = importedCredentials.First(c => c.ServiceName == "Aliasvault.com");
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(aliasVaultCredential.ServiceName, Is.EqualTo("Aliasvault.net"));
|
||||
Assert.That(aliasVaultCredential.ServiceName, Is.EqualTo("Aliasvault.com"));
|
||||
Assert.That(aliasVaultCredential.ServiceUrls?.FirstOrDefault(), Is.EqualTo("https://www.aliasvault.com"));
|
||||
Assert.That(aliasVaultCredential.Username, Is.EqualTo("root"));
|
||||
Assert.That(aliasVaultCredential.Password, Is.EqualTo("toor"));
|
||||
|
||||
@@ -126,7 +126,7 @@ LABEL org.opencontainers.image.source="https://github.com/aliasvault/aliasvault"
|
||||
LABEL org.opencontainers.image.vendor="AliasVault"
|
||||
LABEL org.opencontainers.image.licenses="AGPL-3.0"
|
||||
LABEL org.opencontainers.image.title="AliasVault All-in-One"
|
||||
LABEL org.opencontainers.image.description="Self-contained AliasVault server including web app, with all services bundled using s6-overlay. Single container solution for easy deployment (see docs.aliasvault.net)."
|
||||
LABEL org.opencontainers.image.description="Self-contained AliasVault server including web app, with all services bundled using s6-overlay. Single container solution for easy deployment (see docs.aliasvault.com)."
|
||||
|
||||
# Copy s6-overlay from downloader stage
|
||||
COPY --from=s6-downloader /*.tar.xz /tmp/
|
||||
|
||||
@@ -59,7 +59,7 @@ Other contributors may review and approve your translations. This helps ensure q
|
||||
## What Gets Translated?
|
||||
|
||||
The Crowdin project covers translations for all client apps in one place:
|
||||
- Web app (https://app.aliasvault.net)
|
||||
- Web app (https://app.aliasvault.com)
|
||||
- Browser extension
|
||||
- Mobile App (iOS and Android)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user