Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions UltimateAuth.slnx
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
<Solution>
<Folder Name="/Docs/">
<Project Path="docs/website/CodeBeam.UltimateAuth.Docs.Wasm/CodeBeam.UltimateAuth.Docs.Wasm.Client/CodeBeam.UltimateAuth.Docs.Wasm.Client.csproj" Id="1976793c-a84c-4009-96c5-1fb8c7657c5e" />
<Project Path="docs/website/CodeBeam.UltimateAuth.Docs.Wasm/CodeBeam.UltimateAuth.Docs.Wasm/CodeBeam.UltimateAuth.Docs.Wasm.csproj" Id="629c8d74-d253-4ef2-9f26-47a405d9d7a6" />
</Folder>
<Folder Name="/Packages/">
<Project Path="nuget/CodeBeam.UltimateAuth.EntityFrameworkCore/CodeBeam.UltimateAuth.EntityFrameworkCore.Bundle.csproj" Id="764569b4-dd5b-4a18-a332-7307d20ee21a" />
<Project Path="nuget/CodeBeam.UltimateAuth.InMemory/CodeBeam.UltimateAuth.InMemory.Bundle.csproj" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
@inherits ComponentBase

<svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 240 240"
width="@Size"
height="@Size"
class="@Class"
style="@Style">

<!-- Shield -->
<path d="M123.5,232.1l-1.9-1.6c-1.5-1.3-3.1-2.6-4.8-4c-39.6-32.9-81.9-69.8-81.9-90.7V34.4c0-13,8.1-21,21-21h135.2
c13,0,21,8.1,21,21v101.4c0,20.9-42.3,57.8-81.9,90.7c-1.7,1.4-3.3,2.7-4.8,4L123.5,232.1z
M55.9,19.4c-9.6,0-15,5.5-15,15v101.4c0,19.9,53.9,64.6,79.8,86.1c1,0.8,2,1.6,2.9,2.4c0.9-0.8,1.9-1.6,2.9-2.4
c25.9-21.5,79.8-66.2,79.8-86.1V34.4c0-9.6-5.5-15-15-15H55.9z"
fill="currentColor" />

<!-- Key -->
<path d="M143.9,41.7h-40.9c-6.4,0-11.7,5.2-11.7,11.7v26.3c0,6.4,5.2,11.7,11.7,11.7H114l3.9,3.9v5.3l-3.8,3.8v81.4h8.4
v-5.3h13.7v-9.1h-4.6v-3.8h-9.1c0-14.5,12.9-12.2,12.9-12.2v-53.3h-8v-6.5l4.3-4.3h12.2c6.4,0,11.7-5.2,11.7-11.7V53.4
C155.6,46.9,150.4,41.7,143.9,41.7z
M111.8,79.7c0,1.6-1.3,2.9-2.9,2.9h-5.8c-1.6,0-2.9-1.3-2.9-2.9v-5.8c0-1.6,1.3-2.9,2.9-2.9h5.8c1.6,0,2.9,1.3,2.9,2.9V79.7z
M111.8,59.2c0,1.6-1.3,2.9-2.9,2.9h-5.8c-1.6,0-2.9-1.3-2.9-2.9v-5.8c0-1.6,1.3-2.9,2.9-2.9h5.8c1.6,0,2.9,1.3,2.9,2.9V59.2z
M146.8,79.7c0,1.6-1.3,2.9-2.9,2.9h-5.8c-1.6,0-2.9-1.3-2.9-2.9v-5.8c0-1.6,1.3-2.9,2.9-2.9h5.8c1.6,0,2.9,1.3,2.9,2.9V79.7z
M146.8,59.2c0,1.6-1.3,2.9-2.9,2.9h-5.8c-1.6,0-2.9-1.3-2.9-2.9v-5.8c0-1.6,1.3,2.9,2.9-2.9h5.8c1.6,0,2.9,1.3,2.9,2.9V59.2z"
fill="currentColor" />

</svg>
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using Microsoft.AspNetCore.Components;
using MudBlazor.Utilities;
using MudBlazor;

namespace CodeBeam.UltimateAuth.Docs.Wasm.Client.Brand;

public partial class UAuthLogo : ComponentBase
{
[Parameter] public UAuthLogoVariant Variant { get; set; } = UAuthLogoVariant.Brand;

[Parameter] public int Size { get; set; } = 32;

[Parameter] public Color Color { get; set; } = Color.Primary;

[Parameter] public string? Class { get; set; }
[Parameter] public string? Style { get; set; }

protected string KeyPath => @"
M120.43,39.44H79.57A11.67,11.67,0,0,0,67.9,51.11V77.37
A11.67,11.67,0,0,0,79.57,89H90.51l3.89,3.9v5.32l-3.8,3.81v81.41H99
v-5.33h13.69V169H108.1v-3.8H99C99,150.76,111.9,153,111.9,153
V99.79h-8V93.32L108.19,89h12.24
A11.67,11.67,0,0,0,132.1,77.37V51.11
A11.67,11.67,0,0,0,120.43,39.44Z

M79.57,48.19h5.84a2.92,2.92 0 0 1 2.92,2.92
v5.84a2.92,2.92 0 0 1 -2.92,2.92
h-5.84a2.91,2.91 0 0 1 -2.91,-2.92
v-5.84a2.91,2.91 0 0 1 2.91,-2.92Z

M79.57,68.62h5.84a2.92,2.92 0 0 1 2.92,2.92
v5.83a2.92,2.92 0 0 1 -2.92,2.92
h-5.84a2.91,2.91 0 0 1 -2.91,-2.92
v-5.83a2.91,2.91 0 0 1 2.91,-2.92Z

M114.59,48.19h5.84a2.92,2.92 0 0 1 2.91,2.92
v5.84a2.91,2.91 0 0 1 -2.91,2.91
h-5.84a2.92,2.92 0 0 1 -2.92,-2.91
v-5.84a2.92,2.92 0 0 1 2.92,-2.92Z

M114.59,68.62h5.84a2.92,2.92 0 0 1 2.91,2.92
v5.83a2.91,2.91 0 0 1 -2.91,2.92
h-5.84a2.92,2.92 0 0 1 -2.92,-2.92
v-5.83a2.92,2.92 0 0 1 2.92,-2.92Z
";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace CodeBeam.UltimateAuth.Docs.Wasm.Client.Brand;

public enum UAuthLogoVariant
{
Brand,
Mono
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CodeBeam.MudBlazor.Extensions" Version="9.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.5" />
<PackageReference Include="MudBlazor" Version="9.2.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
@using CodeBeam.UltimateAuth.Docs.Wasm.Client.Brand
@inherits LayoutComponentBase

@inject NavigationManager Nav

<MudThemeProvider Theme="@_uauthTheme" IsDarkMode="@_isDarkMode" />
<MudPopoverProvider />
<MudDialogProvider />
<MudSnackbarProvider />

<MudLayout>
<MudAppBar Class="ua-appbar" Color="Color.Transparent" Dense="true" Elevation="0">
<div class="ua-appbar-grid">
<div class="ua-left">
<div class="ua-mobile-only">
<MudIconButton Icon="@Icons.Material.Filled.Menu" OnClick="@(() => _drawerOpen = !_drawerOpen)" />
</div>

<div class="ua-desktop-only">
<MudButton Variant="Variant.Text">Docs (Preparing)</MudButton>
<MudButton Variant="Variant.Text">Donate</MudButton>
</div>
</div>

<div class="ua-center cursor-pointer" @onclick="@(() => Nav.NavigateTo("/"))">
<UAuthLogo Class="ua-logo mt-4" Size="64" />
</div>

<div class="ua-right">
<MudIconButton Icon="@Icons.Custom.Brands.GitHub" Color="Color.Primary" Href="https://github.com/CodeBeamOrg/UltimateAuth" Target="_blank" />
<MudToggleIconButton @bind-Toggled="@_isDarkMode" Icon="@Icons.Material.Filled.DarkMode" ToggledIcon="@Icons.Material.Filled.LightMode" Color="Color.Primary" ToggledColor="Color.Primary" />
</div>
</div>
</MudAppBar>

<MudDrawer @bind-Open="_drawerOpen" Breakpoint="Breakpoint.None" ClipMode="DrawerClipMode.Always" Variant="DrawerVariant.Temporary">
<MudNavMenu>
<MudNavLink Href="/#home" Icon="@Icons.Material.Filled.Home">Preparing</MudNavLink>
</MudNavMenu>
</MudDrawer>

<MudMainContent>
<CascadingValue Value="this" IsFixed="true">
@Body
</CascadingValue>
</MudMainContent>
</MudLayout>

<div class="ua-global-overlay @( _visionOverlay ? "active" : "" )"></div>

<div id="blazor-error-ui" data-nosnippet>
An unhandled error has occurred.
<a href="." class="reload">Reload</a>
<span class="dismiss">🗙</span>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using MudBlazor;

namespace CodeBeam.UltimateAuth.Docs.Wasm.Client.Layout;

public partial class MainLayout
{
private bool _drawerOpen = false;
private bool _isDarkMode = true;
private bool _visionOverlay = false;

public void SetVisionOverlay(bool value)
{
_visionOverlay = value;
StateHasChanged();
}

MudTheme _uauthTheme = new MudTheme()
{
PaletteLight = new PaletteLight()
{
Primary = "#0C1618",
Secondary = "#f6f5ae",
Tertiary = "#8CE38C",
},

PaletteDark = new PaletteDark()
{
Primary = "#FBFEFB",
PrimaryContrastText = "#0C1618",
Secondary = "#2E2D4D",
Tertiary = "#8CE38C",

TextPrimary = "#FBFEFB",
TextSecondary = "#DEF7DE",

Background = "#0C1618"
},
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#blazor-error-ui {
color-scheme: light only;
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
box-sizing: border-box;
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}

#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
@page "/"
@inject IJSRuntime JS

<MudPage FullScreen="FullScreen.FullWithoutAppbar" Row="1" Column="1">
<MudContainer MaxWidth="MaxWidth.Medium" Class="d-flex align-center justify-center">
<MudStack Spacing="2">
<MudText Typo="Typo.h3"><b>UltimateAuth</b></MudText>

<MudText>The
<span class="ua-gradient">modern unified Auth framework for .NET – Reimagined.</span>
</MudText>

<MudDivider Class="my-4" />

<MudText Typo="Typo.subtitle2" Class="mt-4">
UltimateAuth is an
<span style="color: var(--mud-palette-text-secondary)">open-source</span>
auth framework with platform-level capabilities that unifies secure session, cookie and token based Auth, modern PKCE flows,
<span style="color: var(--mud-palette-text-secondary)">Blazor/Maui-ready</span>
client experiences - eliminating the complexity of traditional Auth systems while providing a clean, lightweight, extensible and developer-first architecture.
</MudText>

<MudText Class="ua-signature mt-16">A <MudLink Href="https://codebeam.org" Target="_blank">CodeBeam</MudLink> Product</MudText>
</MudStack>
</MudContainer>
</MudPage>

<div class="ua-separator"></div>

<MudPage FullScreen="FullScreen.Full" Row="1" Column="1">
<MudContainer MaxWidth="MaxWidth.Large" Class="d-flex flex-column align-center justify-center">
<MudStack Spacing="0" Class="mb-8">
<MudText Typo="Typo.h4"><b>Why UltimateAuth?</b></MudText>
<MudText Typo="Typo.body1" Class="text-secondary">
Built for modern .NET applications with simplicity, flexibility and security at its core.
</MudText>
</MudStack>

<MudGrid>
@foreach (var item in Principles)
{
<MudItem xs="12" sm="6" md="4">
<MudPaper Outlined="true" Class="pa-6 h-100 ua-card">
<MudStack Spacing="2">
<MudIcon Icon="@item.Icon" Size="Size.Large" Color="Color.Primary" />

<MudText Typo="Typo.subtitle1">
<b>@item.Title</b>
</MudText>

<MudText Typo="Typo.body2" Class="text-secondary">
@item.Description
</MudText>
</MudStack>
</MudPaper>
</MudItem>
}
</MudGrid>
</MudContainer>
</MudPage>

<div class="ua-separator"></div>

<MudPage FullScreen="FullScreen.Full" Row="1" Column="1">
<MudContainer MaxWidth="MaxWidth.Large" Class="d-flex flex-column align-center justify-center">
<MudStack Spacing="3" Class="text-center ua-vision" Justify="Justify.Center" AlignItems="AlignItems.Center">
<MudText Typo="Typo.subtitle2" Class="ua-vision-highlight">Vision of UltimateAuth</MudText>
<MudIcon Class="ua-vision-icon-wrapper mt-n1" Style="width: 72px; height: 72px" Icon="@Icons.Material.Filled.EmojiObjects"
Color="Color.Primary" @onmouseenter="() => Layout.SetVisionOverlay(true)"
@onmouseleave="() => Layout.SetVisionOverlay(false)" />

<MudText Typo="Typo.h4" Class="ua-vision-title mt-8">
AUTHENTICATION IS COMPLEX.<br />
USING IT SHOULDN’T BE.
</MudText>

<MudText Typo="Typo.body1" Class="ua-vision-text">
Security is not about a single “correct” flow.
It’s about adapting to context — users, devices, environments and risk.
</MudText>

<MudText Typo="Typo.subtitle2" Class="ua-vision-highlight">
Flexibility brings real security.
</MudText>

<MudText Typo="Typo.caption" Class="ua-vision-footer">
Built from real-world Blazor and .NET application needs — not theoretical models.
</MudText>
</MudStack>
</MudContainer>
</MudPage>

<div class="ua-separator"></div>

<MudPage FullScreen="FullScreen.Full" Row="1" Column="1">
<MudContainer MaxWidth="MaxWidth.Medium" Class="d-flex align-center justify-center text-center">
<MudStack Spacing="4" AlignItems="AlignItems.Center">
<MudIcon Class="ua-vision-icon-wrapper mt-n1" Style="width: 72px; height: 72px" Icon="@Icons.Material.Filled.VolunteerActivism" />

<MudText Typo="Typo.h5"><b>UltimateAuth is and will always forever free.</b></MudText>
<MudText Class="ua-donate-text">No licenses. No tiers. No hidden limits. Full features as a self-hosted framework.</MudText>
<MudText Class="ua-donate-subtext">
But building and maintaining a secure, production-ready Auth framework takes time, effort and care.
</MudText>
<MudText>While UltimateAuth secures your applications, you can secure its future.</MudText>

<MudText Class="ua-donate-subtext">If you believe in this vision, consider supporting the project.</MudText>

<MudButton Variant="Variant.Filled" Color="Color.Primary" Size="Size.Large" Href="https://github.com/sponsors/CodeBeamOrg" Target="_blank">
Support the Project
</MudButton>
</MudStack>
</MudContainer>
</MudPage>

@code {
private List<Principle> Principles = new()
{
new(Icons.Material.Outlined.Diversity2, "Unified Auth Model",
"Stop choosing between cookies, tokens or sessions. UltimateAuth unifies them into a single model — no more fragmented authentication logic."),

new(Icons.Material.Outlined.Adjust, "Zero Auth Boilerplate",
"Authentication just works. No manual cookie handling, no token plumbing — UltimateAuth handles it for you."),

new(Icons.Material.Outlined.Devices, "Device-Aware Sessions",
"Understand and control user sessions across devices with a built-in Root, Chain and Session model."),

new(Icons.Material.Outlined.AddModerator, "Modern Security",
"Built-in PKCE, secure flows and extensible validation pipelines — secure by default, not by configuration."),

new(Icons.Material.Outlined.Assistant, "Flexible Modes",
"PureOpaque, Hybrid, SemiHybrid and PureJwt modes allow adapting to different architectures."),

new(Icons.Material.Outlined.DashboardCustomize, "Extensible",
"Override any part of the pipeline without breaking security boundaries."),

new(Icons.Material.Outlined.Category, "Developer First",
"Clean APIs, Blazor native design and seamless integration with .NET ecosystem.")
};

record Principle(string Icon, string Title, string Description);

[CascadingParameter]
public MainLayout Layout { get; set; } = default!;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@page "/not-found"
@layout MainLayout

<h3>Not Found</h3>
<p>Sorry, the content you are looking for does not exist.</p>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using MudBlazor.Services;
using MudExtensions.Services;

var builder = WebAssemblyHostBuilder.CreateDefault(args);

builder.Services.AddMudServices();
builder.Services.AddMudExtensions();

await builder.Build().RunAsync();
Loading
Loading