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
65 changes: 65 additions & 0 deletions .github/workflows/nuget-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Publish NuGet Packages

on:
workflow_dispatch:

permissions:
id-token: write
contents: read

jobs:
publish:
runs-on: ubuntu-latest
environment: production

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
8.0.x
9.0.x
10.0.x

- name: Restore
run: dotnet restore

- name: Build (Release)
run: dotnet build -c Release --no-restore

- name: Pack (nupkg + snupkg)
run: |
dotnet pack -c Release \
--no-build \
-o ./nupkgs \
/p:IncludeSymbols=true \
/p:SymbolPackageFormat=snupkg

- name: NuGet login (Trusted Publishing)
uses: NuGet/login@v1
id: login
with:
user: CodeBeam

- name: List packages
run: ls -la ./nupkgs

- name: Publish packages
run: |
echo "🚀 Publishing..."

for f in ./nupkgs/*.nupkg; do
echo "📦 $f"

dotnet nuget push "$f" \
--api-key ${{ steps.login.outputs.NUGET_API_KEY }} \
--source https://api.nuget.org/v3/index.json \
--skip-duplicate \
|| echo "❌ Failed: $f"
done

- name: Done
run: echo "✅ Publish process completed"
27 changes: 0 additions & 27 deletions .ultimateauth/pack.bat.txt

This file was deleted.

27 changes: 0 additions & 27 deletions .ultimateauth/package.bat

This file was deleted.

10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
![License](https://img.shields.io/github/license/CodeBeamOrg/UltimateAuth)
[![Discord](https://img.shields.io/discord/1459498792192839774?color=%237289da&label=Discord&logo=discord&logoColor=%237289da&style=flat-square)](https://discord.gg/QscA86dXSR)
[![codecov](https://codecov.io/gh/CodeBeamOrg/UltimateAuth/branch/dev/graph/badge.svg)](https://codecov.io/gh/CodeBeamOrg/UltimateAuth)
[![NuGet version](https://img.shields.io/nuget/v/CodeBeam.UltimateAuth.Core?color=512bd4&label=nuget%20version&logo=nuget&style=flat-square)](https://www.nuget.org/packages/CodeBeam.UltimateAuth)
[![NuGet downloads](https://img.shields.io/nuget/dt/CodeBeam.UltimateAuth.Core?color=512bd4&label=nuget%20downloads&logo=nuget&style=flat-square)](https://www.nuget.org/packages/CodeBeam.UltimateAuth)

## 📑 Table of Contents

Expand Down Expand Up @@ -121,7 +123,7 @@ Traditional auth solutions struggle here — UltimateAuth embraces it.
# 🚀 Quick Start
> ⏱ Takes ~2 minutes to get started

### 1) Install packages (Will be available soon)
### 1) Install packages

1.1 Core Packages
```bash
Expand Down Expand Up @@ -288,12 +290,12 @@ UltimateAuth turns Auth into a simple application service — not a separate sys

## 📘 Documentation

Two documentation experiences will be provided:
Two documentation experiences are provided:

### **1) Classic Documentation**
Guides, API reference, tutorials
Guides, API reference, tutorials - https://ultimateauth.com

### **2) Interactive Identity Sandbox**
### **2) Interactive Identity Sandbox** (Available Soon)
Create accounts, simulate devices, test auth flows, and observe UltimateAuth in action.

---
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
<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>
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
<IsPackable>false</IsPackable>
</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>
<ItemGroup>
<PackageReference Include="CodeBeam.MudBlazor.Extensions" Version="9.0.3" />
<PackageReference Include="CodeBeam.MudBlazor.Extensions.Code" Version="9.0.1" />
<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
Expand Up @@ -8,6 +8,7 @@
<MudDialogProvider />
<MudSnackbarProvider />

<a id="uauth" />
<MudLayout>
<MudAppBar Class="ua-appbar" Color="Color.Transparent" Dense="true" Elevation="0">
<div class="ua-appbar-grid">
Expand All @@ -17,16 +18,18 @@
</div>

<div class="ua-desktop-only">
<MudButton Variant="Variant.Text">Docs (Preparing)</MudButton>
<MudButton Variant="Variant.Text">Donate</MudButton>
<MudButton Variant="Variant.Text" Href="/docs">Docs</MudButton>
<MudButton Variant="Variant.Text" Href="/samples">Samples</MudButton>
<MudButton Variant="Variant.Text" Href="/#donate">Donate</MudButton>
</div>
</div>

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

<div class="ua-right">
<MudIconButton Icon="@Icons.Custom.Brands.Discord" Color="Color.Primary" Href="https://discord.gg/ENhTkHWcwY" Target="_blank" />
<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>
Expand All @@ -35,7 +38,10 @@

<MudDrawer @bind-Open="_drawerOpen" Breakpoint="Breakpoint.None" ClipMode="DrawerClipMode.Always" Variant="DrawerVariant.Temporary">
<MudNavMenu>
<MudNavLink Href="/#home" Icon="@Icons.Material.Filled.Home">Preparing</MudNavLink>
<MudNavLink Href="/#uauth" Icon="@Icons.Material.Filled.Home">Home</MudNavLink>
<MudNavLink Href="/docs" Icon="@Icons.Material.Filled.Book">Docs</MudNavLink>
<MudNavLink Href="/docs" Icon="@Icons.Material.Filled.Apps">Samples</MudNavLink>
<MudNavLink Href="/#donate" Icon="@Icons.Material.Filled.VolunteerActivism">Donate</MudNavLink>
</MudNavMenu>
</MudDrawer>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
@page "/docs"

<MudPage FullScreen="FullScreen.FullWithoutAppbar" Row="1" Column="1">
<MudContainer MaxWidth="MaxWidth.Small" Class="d-flex align-center justify-center">
<MudStack Spacing="3" Class="text-center">
<MudText Typo="Typo.h3"><b>UltimateAuth Docs</b></MudText>
<MudText Typo="Typo.subtitle2">The modern way to understand authentication — unified, simple and powerful.</MudText>

<MudDivider Class="my-2" />

<MudText>This page is preparing.</MudText>

<MudText Typo="Typo.body2" Class="mt-2">
But the documentation is currently available in markdown format and covers core concepts, architecture, flows and integration guides.
</MudText>

<MudText Typo="Typo.body2">
Start exploring the docs to understand how UltimateAuth simplifies authentication across sessions, cookies and tokens.
</MudText>

<MudButton Variant="Variant.Filled" Color="Color.Primary" Href="https://github.com/CodeBeamOrg/UltimateAuth/tree/dev/docs/content" Target="_blank" StartIcon="@Icons.Material.Outlined.MenuBook" Class="mt-4">
Read Documentation
</MudButton>

<MudText Typo="Typo.caption" Class="mt-6">
Full documentation site is coming soon.
</MudText>
</MudStack>
</MudContainer>
</MudPage>
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,13 @@

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

<a id="donate" />
<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 Typo="Typo.h5"><b>UltimateAuth is, and will always remain 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.
Expand Down Expand Up @@ -135,7 +136,13 @@
"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.")
"Clean APIs, Blazor native design and seamless integration with .NET ecosystem."),

new(Icons.Material.Outlined.AccountTree, "Enterprise-Ready Foundations",
"Built-in multi-tenancy, soft delete and optimistic concurrency support. Designed with real-world data integrity and scalability in mind."),

new(Icons.Material.Outlined.Groups, "Advanced User Management",
"Support for multi-profile and multi-identifier users with a full lifecycle model. Go beyond basic identity systems with flexible, real-world user modeling.")
};

record Principle(string Icon, string Title, string Description);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
@page "/not-found"
@layout MainLayout

<h3>Not Found</h3>
<p>Sorry, the content you are looking for does not exist.</p>
<MudPage FullScreen="FullScreen.FullWithoutAppbar" Row="1" Column="1">
<MudContainer MaxWidth="MaxWidth.Medium" Class="d-flex align-center justify-center">
<MudStack Spacing="2">
<h3>Not Found</h3>
<p>Sorry, the content you are looking for does not exist.</p>
</MudStack>
</MudContainer>
</MudPage>
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
@page "/samples"

<MudPage FullScreen="FullScreen.FullWithoutAppbar" Row="1" Column="1">
<MudContainer MaxWidth="MaxWidth.Medium" Class="d-flex align-center justify-center">
<MudStack Spacing="4" Class="text-center">
<MudText Typo="Typo.h3"><b>Samples</b></MudText>
<MudText Typo="Typo.subtitle2">Explore working examples and see UltimateAuth in action.</MudText>
<MudText Typo="Typo.caption">Interactive online samples are coming soon.</MudText>

<MudDivider />

<MudText Typo="Typo.body2">
All samples are available on GitHub. Clone the repository, open the solution
and run the projects to play with real-world UltimateAuth implementation.
</MudText>

<MudGrid>
<MudItem xs="12" md="6">
<MudPaper Class="pa-4 d-flex flex-column align-center justify-center" Style="background: transparent; min-height: 200px" Outlined="true" Elevation="0">
<MudText Typo="Typo.h6">Blazor Server (EF Core)</MudText>
<MudText Typo="Typo.subtitle2">Full-featured sample with persistent storage using EF Core.</MudText>
<MudButton Class="mt-4" Variant="Variant.Filled" Href="https://github.com/CodeBeamOrg/UltimateAuth/tree/dev/samples/blazor-server/CodeBeam.UltimateAuth.Sample.BlazorServer.EFCore" Target="_blank" StartIcon="@Icons.Material.Outlined.OpenInNew">View Source Code on GitHub</MudButton>
</MudPaper>
</MudItem>

<MudItem xs="12" md="6">
<MudPaper Class="pa-4 d-flex flex-column align-center justify-center" Style="background: transparent; min-height: 200px" Outlined="true" Elevation="0">
<MudText Typo="Typo.h6">Blazor Server (InMemory)</MudText>
<MudText Typo="Typo.subtitle2">Lightweight sample for quick setup without persistence.</MudText>
<MudButton Class="mt-4" Variant="Variant.Filled" Href="https://github.com/CodeBeamOrg/UltimateAuth/tree/dev/samples/blazor-server/CodeBeam.UltimateAuth.Sample.BlazorServer" Target="_blank" StartIcon="@Icons.Material.Outlined.OpenInNew">View Source Code on GitHub</MudButton>
</MudPaper>
</MudItem>

<MudItem xs="12">
<MudPaper Class="pa-4 d-flex flex-column align-center justify-center" Style="background: transparent; min-height: 200px" Outlined="true" Elevation="0">
<MudText Typo="Typo.h6">Blazor WASM (Standalone)</MudText>
<MudText Typo="Typo.subtitle2">Client-side sample using Hybrid authentication model.</MudText>
<MudButton Class="mt-4" Variant="Variant.Filled" Href="https://github.com/CodeBeamOrg/UltimateAuth/tree/dev/samples/blazor-standalone-wasm/CodeBeam.UltimateAuth.Sample.BlazorStandaloneWasm" Target="_blank" StartIcon="@Icons.Material.Outlined.OpenInNew">View Source Code on GitHub</MudButton>
</MudPaper>
</MudItem>

<MudItem xs="12" md="6">
<MudPaper Class="pa-4 d-flex flex-column align-center justify-center" Style="background: transparent; min-height: 200px" Outlined="true" Elevation="0">
<MudText Typo="Typo.h6">UAuthHub</MudText>
<MudText Typo="Typo.subtitle2">Complete Auth server with UI, working together with WASM client.</MudText>
<MudButton Class="mt-4" Variant="Variant.Filled" Href="https://github.com/CodeBeamOrg/UltimateAuth/tree/dev/samples/UAuthHub/CodeBeam.UltimateAuth.Sample.UAuthHub" Target="_blank" StartIcon="@Icons.Material.Outlined.OpenInNew">View Source Code on GitHub</MudButton>
</MudPaper>
</MudItem>

<MudItem xs="12" md="6">
<MudPaper Class="pa-4 d-flex flex-column align-center justify-center" Style="background: transparent; min-height: 200px" Outlined="true" Elevation="0">
<MudText Typo="Typo.h6">Resource API</MudText>
<MudText Typo="Typo.subtitle2">Example of securing application APIs using UltimateAuth.</MudText>
<MudButton Class="mt-4" Variant="Variant.Filled" Href="https://github.com/CodeBeamOrg/UltimateAuth/tree/dev/samples/resource-api/CodeBeam.UltimateAuth.Sample.ResourceApi" Target="_blank" StartIcon="@Icons.Material.Outlined.OpenInNew">View Source Code on GitHub</MudButton>
</MudPaper>
</MudItem>
</MudGrid>

<MudAlert Severity="Severity.Info" Class="mt-6" ContentAlignment="HorizontalAlignment.Center">
<b>WASM Sample Setup:</b><br />
Start the following projects together:<br />
(1) UAuthHub<br />
(2) ResourceApi<br />
(3) BlazorStandaloneWasm<br />
After opening the solution, configure multiple startup projects in Visual Studio.
</MudAlert>

<MudAlert Severity="Severity.Info" Class="my-6">
Each sample refreshes (clear + seed) it's data on each restart. When you close application it will be reset.
</MudAlert>
</MudStack>
</MudContainer>
</MudPage>
Loading
Loading