diff --git a/Blazor/Blazor/Models/AdministratorModel.cs b/Blazor/Blazor/Models/AdministratorModel.cs new file mode 100644 index 0000000..89e5042 --- /dev/null +++ b/Blazor/Blazor/Models/AdministratorModel.cs @@ -0,0 +1,30 @@ +using Microsoft.AspNetCore.Cryptography.KeyDerivation; +using Microsoft.AspNetCore.Identity; +using System.Security.Cryptography; +using System.Text; + +namespace Blazor.Models; + +public class AdministratorModel +{ + public int Id { get; set; } + public string Username { get; set; } + public string HashedPassword { get; set; } + + public void HashPassword(string password) + { + using (MD5 md5 = MD5.Create()) + { + byte[] inputBytes = Encoding.UTF8.GetBytes(password); + byte[] hashBytes = md5.ComputeHash(inputBytes); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < hashBytes.Length; i++) + { + sb.Append(hashBytes[i].ToString("x2")); + } + + HashedPassword = sb.ToString(); + } + } +} diff --git a/Blazor/Blazor/Models/AdministratorsModel.cs b/Blazor/Blazor/Models/AdministratorsModel.cs deleted file mode 100644 index 5a03654..0000000 --- a/Blazor/Blazor/Models/AdministratorsModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Microsoft.AspNetCore.Cryptography.KeyDerivation; -using Microsoft.AspNetCore.Identity; -using System.Security.Cryptography; - -namespace Blazor.Models; - -public class AdministratorsModel : PasswordHasher -{ - public int Id { get; set; } - public string Username { get; set; } - public string hashedPassword { get; set; } - -} diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrators.razor b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor similarity index 57% rename from Blazor/Blazor/Pages/Admins/AddAdministrators.razor rename to Blazor/Blazor/Pages/Admins/AddAdministrator.razor index 1d2d431..5a940e3 100644 --- a/Blazor/Blazor/Pages/Admins/AddAdministrators.razor +++ b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor @@ -1,20 +1,20 @@ -@page "/addAdministrators" +@page "/addAdministrator" @using Blazor.Models -

AddAdministrators

+

AddAdministrator

- +

diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs new file mode 100644 index 0000000..2be24ba --- /dev/null +++ b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs @@ -0,0 +1,51 @@ +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components.Forms; +using Microsoft.AspNetCore.Components; +using Blazor.Models; +using Blazor.Services; + +namespace Blazor.Pages.Admins +{ + public partial class AddAdministrator + { + private AdministratorModel administratorModel = new(); + + [Inject] + public IDataService DataService { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + + private async void HandleValidSubmit() + { + administratorModel.HashPassword(administratorModel.HashedPassword); + + await DataService.Add(administratorModel); + + var formData = new List>(); + formData.Add(new KeyValuePair("username", administratorModel.Username)); + formData.Add(new KeyValuePair("password", administratorModel.HashedPassword)); + + var formContent = new FormUrlEncodedContent(formData); + + string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/administrators"; + + using (var httpClient = new HttpClient()) + { + var response = await httpClient.PostAsync(apiUri, formContent); + + if (response.IsSuccessStatusCode) + { + var responseBody = await response.Content.ReadAsStringAsync(); + } + else + { + var errorResponse = await response.Content.ReadAsStringAsync(); + } + } + + NavigationManager.NavigateTo("administrators"); + } + } +} diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrators.razor.cs b/Blazor/Blazor/Pages/Admins/AddAdministrators.razor.cs deleted file mode 100644 index 257062b..0000000 --- a/Blazor/Blazor/Pages/Admins/AddAdministrators.razor.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Blazored.LocalStorage; -using Microsoft.AspNetCore.Components.Forms; -using Microsoft.AspNetCore.Components; -using Blazor.Models; -using Blazor.Services; - -namespace Blazor.Pages.Admins -{ - public partial class AddAdministrators - { - private AdministratorsModel administratorsModel = new(); - - [Inject] - public IDataService DataService { get; set; } - - [Inject] - public NavigationManager NavigationManager { get; set; } - - - private async void HandleValidSubmit() - { - await DataService.Add(administratorsModel); - - NavigationManager.NavigateTo("administrators"); - } - } -} diff --git a/Blazor/Blazor/Pages/Admins/Administrators.razor b/Blazor/Blazor/Pages/Admins/Administrators.razor index 53b79bf..7aeed40 100644 --- a/Blazor/Blazor/Pages/Admins/Administrators.razor +++ b/Blazor/Blazor/Pages/Admins/Administrators.razor @@ -5,7 +5,7 @@

Administrators

- + Ajouter
diff --git a/Blazor/Blazor/Pages/Admins/Administrators.razor.cs b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs index a55bc97..c86a07f 100644 --- a/Blazor/Blazor/Pages/Admins/Administrators.razor.cs +++ b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs @@ -9,6 +9,7 @@ using Blazor.Modals; using Blazor.Services; using Blazored.Modal; using Blazored.Modal; +using Blazor.Pages.Chapters; namespace Blazor.Pages.Admins; @@ -43,13 +44,13 @@ public partial class Administrators } // When you use a real API, we use this follow code - //var response = await Http.GetJsonAsync( $"http://my-api/api/data?page={e.Page}&pageSize={e.PageSize}" ); - var response = (await Http.GetFromJsonAsync($"{NavigationManager.BaseUri}fake-administrator.json")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); + //var response = await Http.GetFromJsonAsync( $"https://trusting-panini.87-106-126-109.plesk.page/api/administrators?page={e.Page}&pageSize={e.PageSize}" ); + var response = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/administrators").Result; if (!e.CancellationToken.IsCancellationRequested) { - totalItem = (await Http.GetFromJsonAsync>($"{NavigationManager.BaseUri}fake-administrator.json")).Count; administrators = new List(response); // an actual data for the current page + totalItem = administrators.Count; } } @@ -61,13 +62,13 @@ public partial class Administrators return; } - var currentData = await LocalStorage.GetItemAsync("data"); + var currentData = await LocalStorage.GetItemAsync("data"); // Check if data exist in the local storage if (currentData == null) { // this code add in the local storage the fake data (we load the data sync for initialize the data before load the OnReadData method) - var originalData = Http.GetFromJsonAsync($"trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; + var originalData = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/administrators").Result; await LocalStorage.SetItemAsync("data", originalData); } } diff --git a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor index 660b5d1..49f91d3 100644 --- a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor +++ b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor @@ -13,7 +13,7 @@

diff --git a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs index f41a5e9..75528fc 100644 --- a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs +++ b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs @@ -10,7 +10,7 @@ namespace Blazor.Pages.Admins [Parameter] public int Id { get; set; } - private AdministratorsModel administratorsModel = new(); + private AdministratorModel administratorsModel = new(); [Inject] public IDataService DataService { get; set; } @@ -26,7 +26,7 @@ namespace Blazor.Pages.Admins var administrator = await DataService.GetAdminById(Id); // Set the model with the admin - administratorsModel = new AdministratorsModel + administratorsModel = new AdministratorModel { Id = administrator.Id, Username = administrator.Username diff --git a/Blazor/Blazor/Pages/Questions/Questions.razor b/Blazor/Blazor/Pages/Questions/Questions.razor index eb87f83..5ae8448 100644 --- a/Blazor/Blazor/Pages/Questions/Questions.razor +++ b/Blazor/Blazor/Pages/Questions/Questions.razor @@ -5,7 +5,7 @@

Chapters

- + Ajouter
diff --git a/Blazor/Blazor/Services/DataLocalService.cs b/Blazor/Blazor/Services/DataLocalService.cs index 7db40b3..5fc7542 100644 --- a/Blazor/Blazor/Services/DataLocalService.cs +++ b/Blazor/Blazor/Services/DataLocalService.cs @@ -149,7 +149,7 @@ namespace Blazor.Services return admin; } - public async Task Update(int id, AdministratorsModel model) + public async Task Update(int id, AdministratorModel model) { // Get the current data var currentData = await _localStorage.GetItemAsync>("data"); @@ -165,13 +165,13 @@ namespace Blazor.Services // Modify the content of the adminnistrator admin.Username = model.Username; - admin.hashedPassword = model.hashedPassword; + admin.HashedPassword = model.HashedPassword; // Save the data await _localStorage.SetItemAsync("data", currentData); } - public async Task Add(AdministratorsModel model) + public async Task Add(AdministratorModel model) { // Get the current data var currentData = await _localStorage.GetItemAsync>("data"); @@ -184,7 +184,7 @@ namespace Blazor.Services { Id = model.Id, Username = model.Username, - hashedPassword = model.hashedPassword + HashedPassword = model.HashedPassword }); diff --git a/Blazor/Blazor/Services/IDataService.cs b/Blazor/Blazor/Services/IDataService.cs index e965c2b..6a1d422 100644 --- a/Blazor/Blazor/Services/IDataService.cs +++ b/Blazor/Blazor/Services/IDataService.cs @@ -15,9 +15,9 @@ namespace Blazor.Services Task Update(int id, ChapterModel model); - Task Add(AdministratorsModel model); + Task Add(AdministratorModel model); - Task Update(int id, AdministratorsModel model); + Task Update(int id, AdministratorModel model); Task GetAdminById(int id); diff --git a/Blazor/Blazor/ViewClasses/Administrator.cs b/Blazor/Blazor/ViewClasses/Administrator.cs index 8abff03..93a5ceb 100644 --- a/Blazor/Blazor/ViewClasses/Administrator.cs +++ b/Blazor/Blazor/ViewClasses/Administrator.cs @@ -4,6 +4,6 @@ public class Administrator { public int Id { get; set; } public string Username { get; set; } - public string hashedPassword { get; set; } + public string HashedPassword { get; set; } }