From 033747899bcaa8ac25029301f43f52ee4b9e7394 Mon Sep 17 00:00:00 2001 From: Egamorf Date: Mon, 21 Apr 2025 01:53:58 +0200 Subject: [PATCH] Add authentication and authorization (#21) Reviewed-on: https://gitea.egamorf.com/PRJ-Game-Ideas/game-ideas/pulls/21 --- README.md | 3 + .../Client/GameIdeas.BlazorApp/App.razor | 28 +- .../GameIdeas.BlazorApp.csproj | 3 + .../GameIdeas.BlazorApp/Helpers/GameHelper.cs | 18 +- .../Components/GameCreationForm.razor.cs | 9 +- .../Pages/Games/Header/GameHeader.razor | 44 +- .../Pages/Games/Header/GameHeader.razor.cs | 9 +- .../Pages/Games/Header/GameHeader.razor.css | 16 +- .../Pages/User/Components/Login.razor | 29 + .../Pages/User/Components/Login.razor.cs | 44 ++ .../User/Components/Login.razor.css} | 44 +- .../User/Components}/LoginValidator.cs | 4 +- .../Pages/User/Gateways/AuthGateway.cs | 38 + .../Pages/User/Gateways/IAuthGateway.cs | 9 + .../Pages/User/UserMenu.razor | 51 ++ .../Pages/User/UserMenu.razor.cs | 29 + .../Pages/User/UserMenu.razor.css | 48 ++ .../Client/GameIdeas.BlazorApp/Program.cs | 22 +- .../Services/HttpClientService.cs | 25 +- .../JwtAuthenticationStateProvider.cs | 48 ++ .../Components/Account/AccountSettings.razor | 49 -- .../Account/AccountSettings.razor.cs | 47 -- .../Shared/Constants/Endpoints.cs | 5 + .../Shared/Constants/Icons.cs | 4 + .../Exceptions/AuthenticationUserException.cs | 3 + .../CreateStaticResourceKey.cs | 12 + .../Constants/GlobalConstants.cs | 14 +- .../GameIdeas.Shared/Dto/GameDetailDto.cs | 4 +- .../GameIdeas.Shared/Dto/LoginDto.cs | 11 - .../GameIdeas.Shared/Dto/TokenDto.cs | 7 + src/GameIdeas/GameIdeas.Shared/Dto/UserDto.cs | 2 +- src/GameIdeas/GameIdeas.Shared/Enum/Role.cs | 8 - .../GameIdeas.Shared/GameIdeas.Shared.csproj | 4 + src/GameIdeas/GameIdeas.Shared/Model/Game.cs | 4 +- src/GameIdeas/GameIdeas.Shared/Model/User.cs | 11 +- src/GameIdeas/GameIdeas.sln | 7 + .../GameIdeas.WebAPI.Tests.csproj | 24 + .../GameIdeas.WebAPI.Tests/IdentityTest.cs | 17 + .../GameIdeas.WebAPI.Tests/MSTestSettings.cs | 1 + .../Context/GameIdeasContext.cs | 47 +- .../Controllers/GameController.cs | 7 +- .../Controllers/UserController.cs | 39 ++ .../Exceptions/UserInvalidException.cs | 3 + .../Exceptions/UserUnauthorizedException.cs | 3 + .../GameIdeas.WebAPI/Files/GameIdeas.fr.json | 8 +- .../GameIdeas.WebAPI/GameIdeas.WebAPI.csproj | 3 + ... 20250420153030_InitialCreate.Designer.cs} | 271 ++++++- ...ate.cs => 20250420153030_InitialCreate.cs} | 252 ++++++- ...20250420160158_SeedDefaultUser.Designer.cs | 663 ++++++++++++++++++ .../20250420160158_SeedDefaultUser.cs | 63 ++ .../GameIdeasContextModelSnapshot.cs | 269 ++++++- .../GameIdeas.WebAPI/Profiles/UserProfile.cs | 20 - .../Server/GameIdeas.WebAPI/Program.cs | 35 + .../Services/Users/IUserService.cs | 8 + .../Services/Users/UserService.cs | 57 ++ 55 files changed, 2186 insertions(+), 317 deletions(-) create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/User/Components/Login.razor create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/User/Components/Login.razor.cs rename src/GameIdeas/Client/GameIdeas.BlazorApp/{Shared/Components/Account/AccountSettings.razor.css => Pages/User/Components/Login.razor.css} (59%) rename src/GameIdeas/Client/GameIdeas.BlazorApp/{Shared/Components/Account => Pages/User/Components}/LoginValidator.cs (70%) create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/User/Gateways/AuthGateway.cs create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/User/Gateways/IAuthGateway.cs create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/User/UserMenu.razor create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/User/UserMenu.razor.cs create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/User/UserMenu.razor.css create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Services/JwtAuthenticationStateProvider.cs delete mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/Account/AccountSettings.razor delete mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/Account/AccountSettings.razor.cs create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Exceptions/AuthenticationUserException.cs delete mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/LoginDto.cs create mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/TokenDto.cs delete mode 100644 src/GameIdeas/GameIdeas.Shared/Enum/Role.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI.Tests/GameIdeas.WebAPI.Tests.csproj create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI.Tests/IdentityTest.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI.Tests/MSTestSettings.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/UserController.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Exceptions/UserInvalidException.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Exceptions/UserUnauthorizedException.cs rename src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/{20250409225125_InitialCreate.Designer.cs => 20250420153030_InitialCreate.Designer.cs} (60%) rename src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/{20250409225125_InitialCreate.cs => 20250420153030_InitialCreate.cs} (54%) create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420160158_SeedDefaultUser.Designer.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250420160158_SeedDefaultUser.cs delete mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/UserProfile.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/IUserService.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserService.cs diff --git a/README.md b/README.md index 9170bd2..3ebce33 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,9 @@ Store your favorite games, intelligent game add, store game files and data, mana | DB_USERNAME | Username for the database | | DB_PASSWORD | Plain password for the database | | DB_DATABASE | Name of the database | +| JWT_KEY | Key for your jwt tokens | +| JWT_ISSUER | Your domain name | +| JWT_AUDIENCE | Your domain name |