Add AliasVault.SmtpService project, refactor solution structure (#104)

This commit is contained in:
Leendert de Borst
2024-07-16 20:47:00 +02:00
parent 81a52dcc0e
commit dec69e959d
118 changed files with 351 additions and 139 deletions

4
.gitignore vendored
View File

@@ -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

View File

@@ -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`

View File

@@ -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}

View File

@@ -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

View File

@@ -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));
}

View File

@@ -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>

View File

@@ -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)

View File

@@ -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>

View File

@@ -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 />

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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">

View File

@@ -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

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
@using AliasVault.WebApp.Main.Models.Spamok
@using AliasVault.Client.Main.Models.Spamok
@inherits ComponentBase
@inject IHttpClientFactory HttpClientFactory

View File

@@ -1,4 +1,4 @@
@using AliasVault.WebApp.Services
@using AliasVault.Client.Services
<!-- CopyPasteFormRow.razor -->
@inject ClipboardCopyService ClipboardCopyService

View File

@@ -1,5 +1,5 @@
@inherits MainBase
@using AliasVault.WebApp.Main.Pages;
@using AliasVault.Client.Main.Pages;
@implements IDisposable
<header>

View File

@@ -5,7 +5,7 @@
// </copyright>
//-----------------------------------------------------------------------
namespace AliasVault.WebApp.Main.Models;
namespace AliasVault.Client.Main.Models;
/// <summary>
/// Represents a breadcrumb item for the breadcrumb component.

View File

@@ -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.

View File

@@ -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.

View File

@@ -5,7 +5,7 @@
// </copyright>
//-----------------------------------------------------------------------
namespace AliasVault.WebApp.Models.FormValidation;
namespace AliasVault.Client.Models.FormValidation;
using System.ComponentModel.DataAnnotations;
using System.Globalization;

View File

@@ -5,7 +5,7 @@
// </copyright>
//-----------------------------------------------------------------------
namespace AliasVault.WebApp.Main.Models.Spamok;
namespace AliasVault.Client.Main.Models.Spamok;
/// <summary>
/// Represents an attachment for an email.

View File

@@ -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.

View File

@@ -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.

View File

@@ -5,7 +5,7 @@
// </copyright>
//-----------------------------------------------------------------------
namespace AliasVault.WebApp.Main.Models.Spamok;
namespace AliasVault.Client.Main.Models.Spamok;
/// <summary>
/// Represents a mailbox API model.

View File

@@ -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.

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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>

View File

@@ -5,7 +5,7 @@
// </copyright>
//-----------------------------------------------------------------------
namespace AliasVault.WebApp.Services.Auth;
namespace AliasVault.Client.Services.Auth;
using System.Net;
using System.Net.Http.Headers;

View File

@@ -5,7 +5,7 @@
// </copyright>
//-----------------------------------------------------------------------
namespace AliasVault.WebApp.Services.Auth;
namespace AliasVault.Client.Services.Auth;
using System.Net.Http.Json;
using System.Text.Json;

View File

@@ -5,7 +5,7 @@
// </copyright>
//-----------------------------------------------------------------------
namespace AliasVault.WebApp.Services;
namespace AliasVault.Client.Services;
/// <summary>
/// Service to manage the clipboard copy operations across the application.

View File

@@ -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;

View File

@@ -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;

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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": {

View File

@@ -1,5 +1,5 @@
{
"name": "aliasvault.webapp",
"name": "aliasvault.client",
"version": "1.0.0",
"description": "",
"main": "index.js",

View File

@@ -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;
}

View File

Before

Width:  |  Height:  |  Size: 936 B

After

Width:  |  Height:  |  Size: 936 B

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 174 KiB

View File

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

View File

@@ -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">

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