Add AliasVault.SmtpService project, refactor solution structure (#104)
4
.gitignore
vendored
@@ -373,9 +373,9 @@ FodyWeavers.xsd
|
||||
|
||||
# AliasVault specific
|
||||
# index.html is generated by the build process from index.template.html and therefore should be ignored
|
||||
src/AliasVault.WebApp/wwwroot/index.html
|
||||
src/AliasVault.Client/wwwroot/index.html
|
||||
# appsettings.Development.json is generated by the build process from appsettings.Development.template.json and therefore should be ignored
|
||||
src/AliasVault.WebApp/wwwroot/appsettings.Development.json
|
||||
src/AliasVault.Client/wwwroot/appsettings.Development.json
|
||||
# appsettings.Development.json is added manually if needed, it should not be committed.
|
||||
src/Tests/AliasVault.E2ETests/appsettings.Development.json
|
||||
|
||||
|
||||
@@ -69,8 +69,8 @@ dotnet tool install --global Microsoft.Playwright.CLI
|
||||
pwsh src/Tests/AliasVault.E2ETests/bin/Debug/net8.0/playwright.ps1 install
|
||||
```
|
||||
|
||||
### 7. Create AliasVault.WebApp appsettings.Development.json
|
||||
The WASM app supports a development specific appsettings.json file. This appsettings file is optional but can override various options to make debugging easier.
|
||||
### 7. Create AliasVault.Client appsettings.Development.json
|
||||
The WASM client app supports a development specific appsettings.json file. This appsettings file is optional but can override various options to make debugging easier.
|
||||
|
||||
|
||||
1. Copy `wwwroot/appsettings.json` to `wwwroot/appsettings.Development.json`
|
||||
|
||||
@@ -15,7 +15,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cryptography", "src\Utiliti
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AliasVault.Api", "src\AliasVault.Api\AliasVault.Api.csproj", "{B797C533-260E-4DA2-83B1-0EE4BCFE08DB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AliasVault.WebApp", "src\AliasVault.WebApp\AliasVault.WebApp.csproj", "{25248E01-5A4B-4F95-A63C-BEA01499A1C2}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AliasVault.Client", "src\AliasVault.Client\AliasVault.Client.csproj", "{25248E01-5A4B-4F95-A63C-BEA01499A1C2}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AliasVault.Shared", "src\AliasVault.Shared\AliasVault.Shared.csproj", "{15EFE0D0-F41B-47D7-86B7-8F840335CB82}"
|
||||
EndProject
|
||||
@@ -29,11 +29,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AliasServerDb", "src\Databa
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AliasClientDb", "src\Databases\AliasClientDb\AliasClientDb.csproj", "{FE10F294-817F-477E-A24F-8597A15AF0B5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AliasVault.E2ETests.WebApp.Server", "src\Tests\Server\AliasVault.E2ETests.WebApp.Server\AliasVault.E2ETests.WebApp.Server.csproj", "{DD1F496F-CF10-47D1-A57F-5FA256479332}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AliasVault.E2ETests.Client.Server", "src\Tests\Server\AliasVault.E2ETests.Client.Server\AliasVault.E2ETests.Client.Server.csproj", "{DD1F496F-CF10-47D1-A57F-5FA256479332}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{607945F3-9896-4544-99EC-F3496CF4D36B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CsvImportExport", "src\Utilities\CsvImportExport\CsvImportExport.csproj", "{A9C9A606-C87E-4298-AB32-09B1884D7487}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvImportExport", "src\Utilities\CsvImportExport\CsvImportExport.csproj", "{A9C9A606-C87E-4298-AB32-09B1884D7487}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Services", "Services", "{8A477241-B96C-4174-968D-D40CB77F1ECD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AliasVault.SmtpService", "src\Services\AliasVault.SmtpService\AliasVault.SmtpService.csproj", "{B095A174-E528-4D38-BEC1-D1D38B3B30C0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -89,6 +93,10 @@ Global
|
||||
{A9C9A606-C87E-4298-AB32-09B1884D7487}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A9C9A606-C87E-4298-AB32-09B1884D7487}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A9C9A606-C87E-4298-AB32-09B1884D7487}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B095A174-E528-4D38-BEC1-D1D38B3B30C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B095A174-E528-4D38-BEC1-D1D38B3B30C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B095A174-E528-4D38-BEC1-D1D38B3B30C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B095A174-E528-4D38-BEC1-D1D38B3B30C0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -103,6 +111,7 @@ Global
|
||||
{DD1F496F-CF10-47D1-A57F-5FA256479332} = {607945F3-9896-4544-99EC-F3496CF4D36B}
|
||||
{607945F3-9896-4544-99EC-F3496CF4D36B} = {29DE523D-EEF2-41E9-AC12-F20D8D02BEBB}
|
||||
{A9C9A606-C87E-4298-AB32-09B1884D7487} = {01AB9389-2F89-4F8E-A688-BF4BF1FC42C8}
|
||||
{B095A174-E528-4D38-BEC1-D1D38B3B30C0} = {8A477241-B96C-4174-968D-D40CB77F1ECD}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {FEE82475-C009-4762-8113-A6563D9DC49E}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
services:
|
||||
wasm:
|
||||
image: aliasvault
|
||||
image: aliasvault-client
|
||||
build:
|
||||
context: .
|
||||
dockerfile: src/AliasVault.WebApp/Dockerfile
|
||||
dockerfile: src/AliasVault.Client/Dockerfile
|
||||
ports:
|
||||
- "80:8080"
|
||||
restart: always
|
||||
|
||||
@@ -40,7 +40,7 @@ public class AuthController(AliasServerDbContext context, UserManager<AliasVault
|
||||
/// <summary>
|
||||
/// Error message for invalid email or password.
|
||||
/// </summary>
|
||||
public static readonly string[] InvalidEmailOrPasswordError = { "Invalid email or password. Please try again." };
|
||||
public static readonly string[] InvalidEmailOrPasswordError = ["Invalid email or password. Please try again."];
|
||||
|
||||
/// <summary>
|
||||
/// Login endpoint used to process login attempt using credentials.
|
||||
@@ -79,7 +79,7 @@ public class AuthController(AliasServerDbContext context, UserManager<AliasVault
|
||||
return BadRequest(ServerValidationErrorResponse.Create(InvalidEmailOrPasswordError, 400));
|
||||
}
|
||||
|
||||
if (!cache.TryGetValue(model.Email, out var serverSecretEphemeral) || !(serverSecretEphemeral is string))
|
||||
if (!cache.TryGetValue(model.Email, out var serverSecretEphemeral) || serverSecretEphemeral is not string)
|
||||
{
|
||||
return BadRequest(ServerValidationErrorResponse.Create(InvalidEmailOrPasswordError, 400));
|
||||
}
|
||||
|
||||
@@ -30,13 +30,13 @@ public class VaultController(AliasServerDbContext context, UserManager<AliasVaul
|
||||
/// </summary>
|
||||
private readonly RetentionPolicy _retentionPolicy = new()
|
||||
{
|
||||
Rules = new List<IRetentionRule>
|
||||
{
|
||||
Rules =
|
||||
[
|
||||
new DailyRetentionRule { DaysToKeep = 3 },
|
||||
new WeeklyRetentionRule { WeeksToKeep = 1 },
|
||||
new MonthlyRetentionRule { MonthsToKeep = 1 },
|
||||
new VersionRetentionRule { VersionsToKeep = 3 },
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -25,8 +25,7 @@ public class TimeValidationJwtBearerEvents(ITimeProvider timeProvider) : JwtBear
|
||||
/// <returns>Async task.</returns>
|
||||
public override Task TokenValidated(TokenValidatedContext context)
|
||||
{
|
||||
var jwtToken = context.SecurityToken as JsonWebToken;
|
||||
if (jwtToken != null)
|
||||
if (context.SecurityToken is JsonWebToken jwtToken)
|
||||
{
|
||||
var now = timeProvider.UtcNow;
|
||||
if (jwtToken.ValidTo < now)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
|
||||
<PropertyGroup>
|
||||
<RootNamespace>AliasVault.WebApp</RootNamespace>
|
||||
<RootNamespace>AliasVault.Client</RootNamespace>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
@@ -10,14 +10,14 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
|
||||
<DocumentationFile>bin\Debug\net8.0\AliasVault.WebApp.xml</DocumentationFile>
|
||||
<DocumentationFile>bin\Debug\net8.0\AliasVault.Client.xml</DocumentationFile>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<CacheBuster>dev</CacheBuster>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DocumentationFile>bin\Release\net8.0\AliasVault.WebApp.xml</DocumentationFile>
|
||||
<DocumentationFile>bin\Release\net8.0\AliasVault.Client.xml</DocumentationFile>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<Optimize>True</Optimize>
|
||||
<CacheBuster>$([System.DateTime]::UtcNow.ToString("yyyyMMddHHmmss"))</CacheBuster>
|
||||
@@ -1,5 +1,5 @@
|
||||
@inherits LayoutComponentBase
|
||||
@using AliasVault.WebApp.Auth.Components
|
||||
@using AliasVault.Client.Auth.Components
|
||||
|
||||
<div class="flex flex-col items-center justify-center px-6 pt-8 mx-auto md:h-screen pt:mt-0 dark:bg-gray-900">
|
||||
<Logo />
|
||||
@@ -5,13 +5,13 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Auth.Pages.Base;
|
||||
namespace AliasVault.Client.Auth.Pages.Base;
|
||||
|
||||
using System.Net.Http.Json;
|
||||
using System.Text.Json;
|
||||
using AliasVault.Client.Services.Auth;
|
||||
using AliasVault.Shared.Models.WebApi;
|
||||
using AliasVault.Shared.Models.WebApi.Auth;
|
||||
using AliasVault.WebApp.Services.Auth;
|
||||
using Blazored.LocalStorage;
|
||||
using Cryptography;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
@@ -1,9 +1,9 @@
|
||||
@page "/user/login"
|
||||
@inherits AliasVault.WebApp.Auth.Pages.Base.LoginBase
|
||||
@inherits AliasVault.Client.Auth.Pages.Base.LoginBase
|
||||
@layout Auth.Layout.MainLayout
|
||||
@attribute [AllowAnonymous]
|
||||
@using AliasVault.Shared.Models
|
||||
@using AliasVault.WebApp.Auth.Components
|
||||
@using AliasVault.Client.Auth.Components
|
||||
|
||||
<h2 class="text-2xl font-bold text-gray-900 dark:text-white">
|
||||
Sign in to AliasVault
|
||||
@@ -7,8 +7,8 @@
|
||||
@inject AuthService AuthService
|
||||
@using System.Text.Json
|
||||
@using AliasVault.Shared.Models
|
||||
@using AliasVault.WebApp.Auth.Components
|
||||
@using AliasVault.WebApp.Auth.Pages.Base
|
||||
@using AliasVault.Client.Auth.Components
|
||||
@using AliasVault.Client.Auth.Pages.Base
|
||||
@using Cryptography
|
||||
@using SecureRemotePassword
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
@page "/unlock"
|
||||
@inherits AliasVault.WebApp.Auth.Pages.Base.LoginBase
|
||||
@inherits AliasVault.Client.Auth.Pages.Base.LoginBase
|
||||
@layout Auth.Layout.MainLayout
|
||||
@using AliasVault.Shared.Models
|
||||
@using AliasVault.WebApp.Auth.Components
|
||||
@using AliasVault.Client.Auth.Components
|
||||
|
||||
<div class="flex space-x-4">
|
||||
<img class="w-8 h-8 rounded-full" src="/img/avatar.webp" alt="Bonnie image">
|
||||
@@ -14,31 +14,31 @@ RUN apt-get update && apt-get install -y python3 && apt-get clean
|
||||
RUN dotnet workload install wasm-tools
|
||||
|
||||
# Copy the project files and restore dependencies
|
||||
COPY ["src/AliasVault.WebApp/AliasVault.WebApp.csproj", "src/AliasVault.WebApp/"]
|
||||
COPY ["src/AliasVault.Client/AliasVault.Client.csproj", "src/AliasVault.Client/"]
|
||||
COPY ["src/AliasVault.Shared/AliasVault.Shared.csproj", "src/AliasVault.Shared/"]
|
||||
COPY ["src/Databases/AliasServerDb/AliasServerDb.csproj", "src/Databases/AliasServerDb/"]
|
||||
COPY ["src/AliasGenerators/AliasGenerators.csproj", "src/AliasGenerators/"]
|
||||
COPY ["src/Utilities/FaviconExtractor/FaviconExtractor.csproj", "src/Utilities/FaviconExtractor/"]
|
||||
RUN dotnet restore "src/AliasVault.WebApp/AliasVault.WebApp.csproj"
|
||||
RUN dotnet restore "src/AliasVault.Client/AliasVault.Client.csproj"
|
||||
|
||||
# Copy the rest of the application code
|
||||
COPY . .
|
||||
|
||||
# Build the WebApp project
|
||||
WORKDIR "/src/src/AliasVault.WebApp"
|
||||
RUN dotnet build "AliasVault.WebApp.csproj" -c "$BUILD_CONFIGURATION" -o /app/build
|
||||
# Build the Client project
|
||||
WORKDIR "/src/src/AliasVault.Client"
|
||||
RUN dotnet build "AliasVault.Client.csproj" -c "$BUILD_CONFIGURATION" -o /app/build
|
||||
|
||||
# Publish the WebApp project
|
||||
# Publish the Client project
|
||||
FROM build AS publish
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
RUN dotnet publish "AliasVault.WebApp.csproj" -c "$BUILD_CONFIGURATION" -o /app/publish /p:UseAppHost=false
|
||||
RUN dotnet publish "AliasVault.Client.csproj" -c "$BUILD_CONFIGURATION" -o /app/publish /p:UseAppHost=false
|
||||
|
||||
# Final stage: start nginx and serve static html files that were published in the previous stage
|
||||
FROM nginx:alpine AS final
|
||||
WORKDIR /usr/share/nginx/html
|
||||
COPY --from=publish /app/publish/wwwroot .
|
||||
COPY /src/AliasVault.WebApp/nginx.conf /etc/nginx/nginx.conf
|
||||
COPY /src/AliasVault.WebApp/entrypoint.sh /app/
|
||||
COPY /src/AliasVault.Client/nginx.conf /etc/nginx/nginx.conf
|
||||
COPY /src/AliasVault.Client/entrypoint.sh /app/
|
||||
RUN chmod +x /app/entrypoint.sh
|
||||
EXPOSE 8080
|
||||
ENV ASPNETCORE_URLS=http://+:8080
|
||||
@@ -9,7 +9,7 @@
|
||||
// Note: this file is not actually auto-generated but the statement above is required because
|
||||
// otherwise a lot of SA1200 checks will fail due to it not fully supporting GlobalUsings at time of writing.
|
||||
|
||||
global using AliasVault.WebApp.Main.Models;
|
||||
global using AliasVault.WebApp.Services;
|
||||
global using AliasVault.WebApp.Services.Auth;
|
||||
global using AliasVault.WebApp.Services.Database;
|
||||
global using AliasVault.Client.Main.Models;
|
||||
global using AliasVault.Client.Services;
|
||||
global using AliasVault.Client.Services.Auth;
|
||||
global using AliasVault.Client.Services.Database;
|
||||
@@ -1,4 +1,4 @@
|
||||
@using AliasVault.WebApp.Main.Models.Spamok
|
||||
@using AliasVault.Client.Main.Models.Spamok
|
||||
@inherits ComponentBase
|
||||
@inject IHttpClientFactory HttpClientFactory
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@using AliasVault.WebApp.Services
|
||||
@using AliasVault.Client.Services
|
||||
|
||||
<!-- CopyPasteFormRow.razor -->
|
||||
@inject ClipboardCopyService ClipboardCopyService
|
||||
@@ -1,5 +1,5 @@
|
||||
@inherits MainBase
|
||||
@using AliasVault.WebApp.Main.Pages;
|
||||
@using AliasVault.Client.Main.Pages;
|
||||
@implements IDisposable
|
||||
|
||||
<header>
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Models;
|
||||
namespace AliasVault.Client.Main.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a breadcrumb item for the breadcrumb component.
|
||||
@@ -5,13 +5,13 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Models;
|
||||
namespace AliasVault.Client.Main.Models;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using AliasClientDb;
|
||||
using AliasVault.WebApp.Models.FormValidation;
|
||||
using AliasVault.Client.Models.FormValidation;
|
||||
|
||||
/// <summary>
|
||||
/// Credential edit model.
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Models;
|
||||
namespace AliasVault.Client.Main.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Alias list entry model. This model is used to represent an alias in a list with simplified properties.
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Models.FormValidation;
|
||||
namespace AliasVault.Client.Models.FormValidation;
|
||||
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Globalization;
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Models.Spamok;
|
||||
namespace AliasVault.Client.Main.Models.Spamok;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an attachment for an email.
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Models.Spamok.Base;
|
||||
namespace AliasVault.Client.Main.Models.Spamok.Base;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a mailbox email API model base.
|
||||
@@ -5,9 +5,9 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Models.Spamok;
|
||||
namespace AliasVault.Client.Main.Models.Spamok;
|
||||
|
||||
using AliasVault.WebApp.Main.Models.Spamok.Base;
|
||||
using AliasVault.Client.Main.Models.Spamok.Base;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an email API model.
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Models.Spamok;
|
||||
namespace AliasVault.Client.Main.Models.Spamok;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a mailbox API model.
|
||||
@@ -5,9 +5,9 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Models.Spamok;
|
||||
namespace AliasVault.Client.Main.Models.Spamok;
|
||||
|
||||
using AliasVault.WebApp.Main.Models.Spamok.Base;
|
||||
using AliasVault.Client.Main.Models.Spamok.Base;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a mailbox email API model.
|
||||
@@ -5,10 +5,10 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Main.Pages;
|
||||
namespace AliasVault.Client.Main.Pages;
|
||||
|
||||
using AliasVault.WebApp.Services;
|
||||
using AliasVault.WebApp.Services.Auth;
|
||||
using AliasVault.Client.Services;
|
||||
using AliasVault.Client.Services.Auth;
|
||||
using Blazored.LocalStorage;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
@@ -1,7 +1,7 @@
|
||||
@page "/sync"
|
||||
@layout EmptyLayout
|
||||
@implements IDisposable
|
||||
@using AliasVault.WebApp.Main.Pages.Sync.StatusMessages
|
||||
@using AliasVault.Client.Main.Pages.Sync.StatusMessages
|
||||
@inject ILocalStorageService LocalStorage
|
||||
@inject DbService DbService
|
||||
@inject AuthService AuthService
|
||||
@@ -5,8 +5,8 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
using AliasVault.WebApp;
|
||||
using AliasVault.WebApp.Providers;
|
||||
using AliasVault.Client;
|
||||
using AliasVault.Client.Providers;
|
||||
using Blazored.LocalStorage;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
@@ -5,11 +5,11 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Providers;
|
||||
namespace AliasVault.Client.Providers;
|
||||
|
||||
using System.Security.Claims;
|
||||
using System.Text.Json;
|
||||
using AliasVault.WebApp.Services.Auth;
|
||||
using AliasVault.Client.Services.Auth;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
|
||||
/// <summary>
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Services.Auth;
|
||||
namespace AliasVault.Client.Services.Auth;
|
||||
|
||||
using System.Net;
|
||||
using System.Net.Http.Headers;
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Services.Auth;
|
||||
namespace AliasVault.Client.Services.Auth;
|
||||
|
||||
using System.Net.Http.Json;
|
||||
using System.Text.Json;
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Services;
|
||||
namespace AliasVault.Client.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Service to manage the clipboard copy operations across the application.
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Services;
|
||||
namespace AliasVault.Client.Services;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -14,8 +14,8 @@ using System.Net.Http;
|
||||
using System.Net.Http.Json;
|
||||
using System.Threading.Tasks;
|
||||
using AliasClientDb;
|
||||
using AliasVault.Client.Models;
|
||||
using AliasVault.Shared.Models;
|
||||
using AliasVault.WebApp.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Identity = AliasGenerators.Identity.Models.Identity;
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Services.Database;
|
||||
namespace AliasVault.Client.Services.Database;
|
||||
|
||||
using System.Data;
|
||||
using System.Net.Http.Json;
|
||||
using AliasClientDb;
|
||||
using AliasVault.Client.Services.Auth;
|
||||
using AliasVault.Shared.Models.WebApi;
|
||||
using AliasVault.WebApp.Services.Auth;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.JSInterop;
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Services.Database;
|
||||
namespace AliasVault.Client.Services.Database;
|
||||
|
||||
/// <summary>
|
||||
/// Class to manage the state of the AliasClientDbService that others can subscribe to events for.
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Services;
|
||||
namespace AliasVault.Client.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Global loading service that can be used to show or hide a global layout loading spinner.
|
||||
@@ -5,7 +5,7 @@
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace AliasVault.WebApp.Services;
|
||||
namespace AliasVault.Client.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Handles global notifications that should be displayed to the user, such as success or error messages. These messages
|
||||
@@ -9,20 +9,20 @@
|
||||
@using Microsoft.AspNetCore.Components.Web.Virtualization
|
||||
@using Microsoft.AspNetCore.Components.WebAssembly.Http
|
||||
@using Microsoft.JSInterop
|
||||
@using AliasVault.WebApp
|
||||
@using AliasVault.WebApp.Main.Layout
|
||||
@using AliasVault.WebApp.Main.Components
|
||||
@using AliasVault.WebApp.Main.Components.Alerts
|
||||
@using AliasVault.WebApp.Main.Components.Attachments
|
||||
@using AliasVault.WebApp.Main.Components.Credentials
|
||||
@using AliasVault.WebApp.Main.Components.Email
|
||||
@using AliasVault.WebApp.Main.Components.Forms
|
||||
@using AliasVault.WebApp.Main.Components.Layout
|
||||
@using AliasVault.WebApp.Main.Components.Loading
|
||||
@using AliasVault.WebApp.Main.Models
|
||||
@using AliasVault.WebApp.Services
|
||||
@using AliasVault.WebApp.Services.Auth
|
||||
@using AliasVault.WebApp.Services.Database
|
||||
@using AliasVault.Client
|
||||
@using AliasVault.Client.Main.Layout
|
||||
@using AliasVault.Client.Main.Components
|
||||
@using AliasVault.Client.Main.Components.Alerts
|
||||
@using AliasVault.Client.Main.Components.Attachments
|
||||
@using AliasVault.Client.Main.Components.Credentials
|
||||
@using AliasVault.Client.Main.Components.Email
|
||||
@using AliasVault.Client.Main.Components.Forms
|
||||
@using AliasVault.Client.Main.Components.Layout
|
||||
@using AliasVault.Client.Main.Components.Loading
|
||||
@using AliasVault.Client.Main.Models
|
||||
@using AliasVault.Client.Services
|
||||
@using AliasVault.Client.Services.Auth
|
||||
@using AliasVault.Client.Services.Database
|
||||
@using Microsoft.AspNetCore.Components.Authorization
|
||||
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
|
||||
@using Blazored.LocalStorage
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "aliasvault.webapp",
|
||||
"name": "AliasVault.Client",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "aliasvault.webapp",
|
||||
"name": "AliasVault.Client",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "aliasvault.webapp",
|
||||
"name": "aliasvault.client",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
@@ -631,19 +631,16 @@ video {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.m-6 {
|
||||
margin: 1.5rem;
|
||||
}
|
||||
|
||||
.m-4 {
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
.mx-3 {
|
||||
margin-left: 0.75rem;
|
||||
margin-right: 0.75rem;
|
||||
}
|
||||
|
||||
.mx-4 {
|
||||
margin-left: 1rem;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
.mx-auto {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
@@ -654,11 +651,6 @@ video {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.mx-4 {
|
||||
margin-left: 1rem;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
.-ml-1 {
|
||||
margin-left: -0.25rem;
|
||||
}
|
||||
@@ -695,10 +687,6 @@ video {
|
||||
margin-left: 0.75rem;
|
||||
}
|
||||
|
||||
.ml-5 {
|
||||
margin-left: 1.25rem;
|
||||
}
|
||||
|
||||
.ml-auto {
|
||||
margin-left: auto;
|
||||
}
|
||||
@@ -743,14 +731,6 @@ video {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.ml-4 {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.ml-6 {
|
||||
margin-left: 1.5rem;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
}
|
||||
@@ -791,10 +771,6 @@ video {
|
||||
height: 3rem;
|
||||
}
|
||||
|
||||
.h-32 {
|
||||
height: 8rem;
|
||||
}
|
||||
|
||||
.h-4 {
|
||||
height: 1rem;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 936 B After Width: | Height: | Size: 936 B |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
@@ -29,7 +29,7 @@
|
||||
<link rel="stylesheet" href="css/app.css?v=@CacheBuster" />
|
||||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
<link href="css/tailwind.css?v=@CacheBuster" rel="stylesheet">
|
||||
<link href="AliasVault.WebApp.styles.css?v=@CacheBuster" rel="stylesheet" />
|
||||
<link href="AliasVault.Client.styles.css?v=@CacheBuster" rel="stylesheet" />
|
||||
</head>
|
||||
|
||||
<body class="bg-gray-50 dark:bg-gray-800">
|
||||