diff --git a/src/CraftSharp/App.razor b/src/CraftSharp/App.razor index 79d057a..4a40c50 100644 --- a/src/CraftSharp/App.razor +++ b/src/CraftSharp/App.razor @@ -2,17 +2,16 @@ - - + + - +

Sorry, there's nothing at this address.

-
+
- diff --git a/src/CraftSharp/Controllers/CultureController.cs b/src/CraftSharp/Controllers/CultureController.cs index 7db1cda..09f4472 100644 --- a/src/CraftSharp/Controllers/CultureController.cs +++ b/src/CraftSharp/Controllers/CultureController.cs @@ -22,7 +22,8 @@ namespace CraftSharp.Controllers this.HttpContext.Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue( - new RequestCulture(culture))); + new RequestCulture(culture)) + ); } return this.LocalRedirect(redirectUri); diff --git a/src/CraftSharp/Controllers/UserController.cs b/src/CraftSharp/Controllers/UserController.cs new file mode 100644 index 0000000..ac31e2d --- /dev/null +++ b/src/CraftSharp/Controllers/UserController.cs @@ -0,0 +1,47 @@ +using CraftSharp.Models; +using CraftSharp.Services; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using System.Globalization; +using System.Net; + +namespace CraftSharp.Controllers +{ + [Microsoft.AspNetCore.Mvc.Route("[controller]/[action]")] + public class UserController : Controller + { + [HttpPost] + public IActionResult SetUser([FromBody] String user) + { + if (user != null) + { + HttpContext.Response.Cookies.Append( + "CurrentUser", user + ); + } + return Ok(new { result = "userCookieSet" }); + } + + [HttpDelete] + public IActionResult DeleteUser() + { + + this.HttpContext.Response.Cookies.Delete( + "CurrentUser" + ); + return Ok(new { result = "userCookieDeleted" }); + + } + + [HttpGet] + public IActionResult GetUser() + { + var jsonUser = HttpContext.Request.Cookies["CurrentUser"]; + return Ok(jsonUser); + + } + + } +} \ No newline at end of file diff --git a/src/CraftSharp/Pages/Connexion.razor.cs b/src/CraftSharp/Pages/Connexion.razor.cs index 0d6c7e1..428c642 100644 --- a/src/CraftSharp/Pages/Connexion.razor.cs +++ b/src/CraftSharp/Pages/Connexion.razor.cs @@ -7,6 +7,9 @@ using CraftSharp.Models; using CraftSharp.Services; using Blazorise; using Newtonsoft.Json; +using System.Text.RegularExpressions; +using Newtonsoft.Json.Linq; +using System.Text; namespace CraftSharp.Pages { @@ -17,18 +20,31 @@ namespace CraftSharp.Pages [Inject] public NavigationManager NavigationManager { get; set; } - + + [Inject] + public HttpClient httpClient { get; set; } private string error { get; set; } private ConnexionModel loginRequest { get; set; } = new ConnexionModel(); + protected override async Task OnInitializedAsync() + { + if (AuthStateProvider.GetCurrentUser() != null && AuthStateProvider.GetCurrentUser().IsAuthenticated) + { + NavigationManager.NavigateTo("index"); + } + } + private async Task OnSubmit() { error = null; try { await AuthStateProvider.Login(loginRequest); + var stringified = JsonConvert.SerializeObject(loginRequest); + var response = await httpClient.PostAsJsonAsync($"{NavigationManager.BaseUri}User/SetUser", stringified); NavigationManager.NavigateTo("index"); + } catch (Exception ex) { diff --git a/src/CraftSharp/Pages/Inscription.razor.cs b/src/CraftSharp/Pages/Inscription.razor.cs index a22075e..a3c523f 100644 --- a/src/CraftSharp/Pages/Inscription.razor.cs +++ b/src/CraftSharp/Pages/Inscription.razor.cs @@ -5,6 +5,8 @@ using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.Components; using CraftSharp.Models; using CraftSharp.Services; +using Newtonsoft.Json; +using System.Net.Http; namespace CraftSharp.Pages { @@ -16,14 +18,30 @@ namespace CraftSharp.Pages [Inject] public NavigationManager NavigationManager { get; set; } + [Inject] + public HttpClient httpClient { get; set; } + private string error { get; set; } private InscriptionModel registerRequest { get; set; } = new InscriptionModel(); + protected override async Task OnInitializedAsync() + { + if (AuthStateProvider.GetCurrentUser() != null && AuthStateProvider.GetCurrentUser().IsAuthenticated) + { + NavigationManager.NavigateTo("index"); + } + } + private async Task OnSubmit() { - await AuthStateProvider.Register(registerRequest); - NavigationManager.NavigateTo("index"); + await AuthStateProvider.Register(registerRequest); + var stringified = JsonConvert.SerializeObject(new ConnexionModel() { + Password=registerRequest.Password, + UserName=registerRequest.UserName} + ); + var response = await httpClient.PostAsJsonAsync($"{NavigationManager.BaseUri}User/SetUser", stringified); + NavigationManager.NavigateTo("index"); } } diff --git a/src/CraftSharp/Pages/List.razor b/src/CraftSharp/Pages/List.razor index 47f0062..396694b 100644 --- a/src/CraftSharp/Pages/List.razor +++ b/src/CraftSharp/Pages/List.razor @@ -1,52 +1,59 @@ @page "/list" @using CraftSharp.Models -

@Localizer["Title"]

+@if (AuthStateProvider.GetCurrentUser().Roles.Contains(UserRoles.Admin)) +{ -
- - @Localizer["Add"] - -
+

@Localizer["Title"]

- - - - - @if (!string.IsNullOrWhiteSpace(context.ImageBase64)) - { - @context.DisplayName - } - else - { - @context.DisplayName - } - - - - - - - - @(string.Join(", ", ((Item)context).EnchantCategories)) - - - - - @(string.Join(", ", ((Item)context).RepairWith)) - - - - - - @Localizer["Edit"] - - - - \ No newline at end of file +
+ + @Localizer["Add"] + +
+ + + + + + @if (!string.IsNullOrWhiteSpace(context.ImageBase64)) + { + @context.DisplayName + } + else + { + @context.DisplayName + } + + + + + + + + @(string.Join(", ", ((Item)context).EnchantCategories)) + + + + + @(string.Join(", ", ((Item)context).RepairWith)) + + + + + + @Localizer["Edit"] + + + + + +}else{ +

FORBIDDEN !!

+} \ No newline at end of file diff --git a/src/CraftSharp/Pages/List.razor.cs b/src/CraftSharp/Pages/List.razor.cs index ca109a2..39aa62c 100644 --- a/src/CraftSharp/Pages/List.razor.cs +++ b/src/CraftSharp/Pages/List.razor.cs @@ -16,6 +16,9 @@ namespace CraftSharp.Pages private int totalItem; + [Inject] + public CustomStateProvider AuthStateProvider { get; set; } + [Inject] public IStringLocalizer Localizer { get; set; } diff --git a/src/CraftSharp/Pages/Opening.razor b/src/CraftSharp/Pages/Opening.razor index be844b6..65d2a4c 100644 --- a/src/CraftSharp/Pages/Opening.razor +++ b/src/CraftSharp/Pages/Opening.razor @@ -6,12 +6,11 @@
+ Value="@AuthStateProvider.GetCurrentUser().NumberOfKeys">
-
diff --git a/src/CraftSharp/Pages/Opening.razor.cs b/src/CraftSharp/Pages/Opening.razor.cs index 5347b86..8140806 100644 --- a/src/CraftSharp/Pages/Opening.razor.cs +++ b/src/CraftSharp/Pages/Opening.razor.cs @@ -23,13 +23,7 @@ namespace CraftSharp.Pages [Inject] public IDataService DataService { get; set; } [Inject] - public CustomStateProvider AuthService { get; set; } - [Inject] public CustomStateProvider AuthStateProvider { get; set; } - [CascadingParameter] - public Task Context { get; set; } - - int NumberOfKeys { get; set; } = 0; int CostInKeys { get; set; } = 1; [Inject] @@ -43,13 +37,11 @@ namespace CraftSharp.Pages totalItem = await DataService.Count(); items = await DataService.List(0, totalItem); - - NumberOfKeys = AuthService.GetCurrentUser().NumberOfKeys; } bool canOpen() { - return isChestClosed && NumberOfKeys >= CostInKeys; + return isChestClosed && AuthStateProvider.GetCurrentUser().NumberOfKeys >= CostInKeys; } async void selectRandom() @@ -57,7 +49,7 @@ namespace CraftSharp.Pages if (canOpen()) { - NumberOfKeys=NumberOfKeys-CostInKeys; + AuthStateProvider.GetCurrentUser().NumberOfKeys -= CostInKeys; randomItem = ItemFactory.GetRandomItem(items); if (AuthStateProvider.GetCurrentUser().getSizeInventory() <= 64) { diff --git a/src/CraftSharp/Pages/Shop.razor b/src/CraftSharp/Pages/Shop.razor index d8cd0f7..6d060bc 100644 --- a/src/CraftSharp/Pages/Shop.razor +++ b/src/CraftSharp/Pages/Shop.razor @@ -6,7 +6,7 @@
+ Value="@AuthService.GetCurrentUser().numberOfEmeralds">
diff --git a/src/CraftSharp/Pages/Shop.razor.cs b/src/CraftSharp/Pages/Shop.razor.cs index 0986aa6..11c7cf6 100644 --- a/src/CraftSharp/Pages/Shop.razor.cs +++ b/src/CraftSharp/Pages/Shop.razor.cs @@ -15,10 +15,6 @@ namespace CraftSharp.Pages [Inject] public IStringLocalizer Localizer { get; set; } - [Inject] - public IJSRuntime JsRuntime { get; set; } - int NumberOfEmeralds { get; set; } = 0; - List offers = new List() { new ShopOfferModel() @@ -48,7 +44,6 @@ namespace CraftSharp.Pages protected override async Task OnInitializedAsync() { - NumberOfEmeralds = AuthService.GetCurrentUser().numberOfEmeralds; foreach(ShopOfferModel offer in offers) { animation[offer] = ""; @@ -57,9 +52,9 @@ namespace CraftSharp.Pages private async void buyKeys(ShopOfferModel offer) { - if (offer.InputAmount <= NumberOfEmeralds) + if (offer.InputAmount <= AuthService.GetCurrentUser().numberOfEmeralds) { - NumberOfEmeralds -= offer.InputAmount; + AuthService.GetCurrentUser().numberOfEmeralds -= offer.InputAmount; AuthService.GetCurrentUser().NumberOfKeys += offer.OutputAmount; } else diff --git a/src/CraftSharp/Pages/_Host.cshtml b/src/CraftSharp/Pages/_Host.cshtml index 30a855b..3451d14 100644 --- a/src/CraftSharp/Pages/_Host.cshtml +++ b/src/CraftSharp/Pages/_Host.cshtml @@ -1,8 +1,24 @@ @page "/" @namespace CraftSharp.Pages +@using CraftSharp.Models; +@using CraftSharp.Services; +@using Microsoft.AspNetCore.Components; +@using Newtonsoft.Json; @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@inject CustomStateProvider authService; +@inject HttpClient httpClient; + @{ Layout = "_Layout"; + Console.WriteLine("==============START=============="); + var response = await httpClient.GetAsync($"https://localhost:7139/User/GetUser"); + string jsonUser = await response.Content.ReadAsStringAsync(); + var user = new ConnexionModel(); + if (jsonUser != null && jsonUser.Length != 0) + { + user = JsonConvert.DeserializeObject(jsonUser); + await authService.Login(user); + } } diff --git a/src/CraftSharp/Program.cs b/src/CraftSharp/Program.cs index 31efd19..9405507 100644 --- a/src/CraftSharp/Program.cs +++ b/src/CraftSharp/Program.cs @@ -18,6 +18,7 @@ using CraftSharp; using Microsoft.AspNetCore.Mvc.Infrastructure; using System; using Microsoft.JSInterop; +using CraftSharp.Controllers; var builder = WebApplication.CreateBuilder(args); @@ -27,16 +28,16 @@ builder.Services.AddServerSideBlazor(); builder.Services.AddSingleton(); builder.Services.AddOptions(); builder.Services.AddAuthorizationCore(); -builder.Services.AddScoped(); -builder.Services.AddScoped(s => s.GetRequiredService()); -builder.Services.AddScoped(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(s => s.GetRequiredService()); +builder.Services.AddSingleton(); // Add the controller of the app builder.Services.AddControllers(); // Add the localization to the app and specify the resources path builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); - +builder.Services.AddScoped(); builder.Services.AddHttpClient(); builder.Services.AddBlazoredModal(); diff --git a/src/CraftSharp/Services/AuthService.cs b/src/CraftSharp/Services/AuthService.cs index 5652c56..347854f 100644 --- a/src/CraftSharp/Services/AuthService.cs +++ b/src/CraftSharp/Services/AuthService.cs @@ -41,10 +41,13 @@ namespace CraftSharp.Services public void Login(ConnexionModel loginRequest) { + Console.WriteLine("LOGIN : " + loginRequest.UserName); var user = CurrentUser.FirstOrDefault(w => w.UserName == loginRequest.UserName && w.Password == loginRequest.Password); if (user == null) { + Console.WriteLine("LOGINFAILED"); + throw new Exception("User name or password invalid !"); } } diff --git a/src/CraftSharp/Services/CustomStateProvider.cs b/src/CraftSharp/Services/CustomStateProvider.cs index 059cab0..f1bbc58 100644 --- a/src/CraftSharp/Services/CustomStateProvider.cs +++ b/src/CraftSharp/Services/CustomStateProvider.cs @@ -70,12 +70,14 @@ namespace CraftSharp.Services public CurrentUser GetCurrentUser() { - CurrentUser cacheUser; if (_currentUser != null && _currentUser.IsAuthenticated) { + Console.WriteLine("GETUSER: " + _currentUser.UserName); return _currentUser; } + Console.WriteLine("GETUSER: FAIL"); + return new CurrentUser(); } } diff --git a/src/CraftSharp/Shared/HeaderLayout.razor.cs b/src/CraftSharp/Shared/HeaderLayout.razor.cs index f3b9136..280476b 100644 --- a/src/CraftSharp/Shared/HeaderLayout.razor.cs +++ b/src/CraftSharp/Shared/HeaderLayout.razor.cs @@ -3,6 +3,7 @@ using CraftSharp.Services; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.Extensions.Localization; +using System.Net.Http; namespace CraftSharp.Shared @@ -18,6 +19,9 @@ namespace CraftSharp.Shared [Inject] public NavigationManager NavigationManager { get; set; } + [Inject] + public HttpClient httpClient { get; set; } + [CascadingParameter] private Task AuthenticationState { get; set; } @@ -25,6 +29,10 @@ namespace CraftSharp.Shared protected override async Task OnInitializedAsync() { + if (AuthStateProvider.GetCurrentUser() == null || !AuthStateProvider.GetCurrentUser().IsAuthenticated) + { + NavigationManager.NavigateTo("/"); + } isAdmin(); } @@ -46,6 +54,8 @@ namespace CraftSharp.Shared private async Task LogoutClick() { await AuthStateProvider.Logout(); + await httpClient.DeleteAsync($"{NavigationManager.BaseUri}User/DeleteUser"); + NavigationManager.NavigateTo("/inscription"); } }