feat : logs

pull/38/head
Yvan CALATAYUD 2 years ago
commit 54724d4fe3

@ -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();
}
}
}

@ -1,13 +0,0 @@
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
using Microsoft.AspNetCore.Identity;
using System.Security.Cryptography;
namespace Blazor.Models;
public class AdministratorsModel : PasswordHasher<string>
{
public int Id { get; set; }
public string Username { get; set; }
public string hashedPassword { get; set; }
}

@ -1,20 +1,20 @@
@page "/addAdministrators" @page "/addAdministrator"
@using Blazor.Models @using Blazor.Models
<h3>AddAdministrators</h3> <h3>AddAdministrator</h3>
<EditForm Model="@administratorsModel" OnValidSubmit="@HandleValidSubmit"> <EditForm Model="@administratorModel" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator /> <DataAnnotationsValidator />
<ValidationSummary /> <ValidationSummary />
<p> <p>
<label for="username"> <label for="username">
Username: Username:
<InputText id="username" @bind-Value="administratorsModel.Username" /> <InputText id="username" @bind-Value="administratorModel.Username" />
</label> </label>
<label for="hashedPassword"> <label for="hashedPassword">
Password: Password:
<InputText id="hashedPassword" @bind-Value="administratorsModel.hashedPassword" /> <InputText id="hashedPassword" @bind-Value="administratorModel.HashedPassword" />
</label> </label>
</p> </p>

@ -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<KeyValuePair<string, string>>();
formData.Add(new KeyValuePair<string, string>("username", administratorModel.Username));
formData.Add(new KeyValuePair<string, string>("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");
}
}
}

@ -5,7 +5,7 @@
<h3>Administrators</h3> <h3>Administrators</h3>
<div> <div>
<NavLink class="btn btn-primary" href="addAdministrators" Match="NavLinkMatch.All"> <NavLink class="btn btn-primary" href="addAdministrator" Match="NavLinkMatch.All">
<i class="fa fa-plus"></i> Ajouter <i class="fa fa-plus"></i> Ajouter
</NavLink> </NavLink>
</div> </div>

@ -9,6 +9,7 @@ using Blazor.Modals;
using Blazor.Services; using Blazor.Services;
using Blazored.Modal; using Blazored.Modal;
using Blazored.Modal; using Blazored.Modal;
using Blazor.Pages.Chapters;
namespace Blazor.Pages.Admins; namespace Blazor.Pages.Admins;
@ -43,13 +44,13 @@ public partial class Administrators
} }
// When you use a real API, we use this follow code // When you use a real API, we use this follow code
//var response = await Http.GetJsonAsync<Item[]>( $"http://my-api/api/data?page={e.Page}&pageSize={e.PageSize}" ); //var response = await Http.GetFromJsonAsync<ChaptersModel[]>( $"https://trusting-panini.87-106-126-109.plesk.page/api/administrators?page={e.Page}&pageSize={e.PageSize}" );
var response = (await Http.GetFromJsonAsync<Administrator[]>($"{NavigationManager.BaseUri}fake-administrator.json")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); var response = Http.GetFromJsonAsync<Administrator[]>($"https://trusting-panini.87-106-126-109.plesk.page/api/administrators").Result;
if (!e.CancellationToken.IsCancellationRequested) if (!e.CancellationToken.IsCancellationRequested)
{ {
totalItem = (await Http.GetFromJsonAsync<List<Administrator>>($"{NavigationManager.BaseUri}fake-administrator.json")).Count;
administrators = new List<Administrator>(response); // an actual data for the current page administrators = new List<Administrator>(response); // an actual data for the current page
totalItem = administrators.Count;
} }
} }
@ -61,13 +62,13 @@ public partial class Administrators
return; return;
} }
var currentData = await LocalStorage.GetItemAsync<AdministratorsModel[]>("data"); var currentData = await LocalStorage.GetItemAsync<AdministratorModel[]>("data");
// Check if data exist in the local storage // Check if data exist in the local storage
if (currentData == null) 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) // 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<AdministratorsModel[]>($"trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; var originalData = Http.GetFromJsonAsync<AdministratorModel[]>($"https://trusting-panini.87-106-126-109.plesk.page/api/administrators").Result;
await LocalStorage.SetItemAsync("data", originalData); await LocalStorage.SetItemAsync("data", originalData);
} }
} }

@ -13,7 +13,7 @@
</label> </label>
<label for="hashedPassword"> <label for="hashedPassword">
Password: Password:
<InputText id="hashedPassword" @bind-Value="administratorsModel.hashedPassword" /> <InputText id="hashedPassword" @bind-Value="administratorsModel.HashedPassword" />
</label> </label>
</p> </p>

@ -11,7 +11,7 @@ namespace Blazor.Pages.Admins
[Parameter] [Parameter]
public int Id { get; set; } public int Id { get; set; }
private AdministratorsModel administratorsModel = new(); private AdministratorModel administratorsModel = new();
[Inject] [Inject]
public IDataService DataService { get; set; } public IDataService DataService { get; set; }
@ -30,7 +30,7 @@ namespace Blazor.Pages.Admins
var administrator = await DataService.GetAdminById(Id); var administrator = await DataService.GetAdminById(Id);
// Set the model with the admin // Set the model with the admin
administratorsModel = new AdministratorsModel administratorsModel = new AdministratorModel
{ {
Id = administrator.Id, Id = administrator.Id,
Username = administrator.Username Username = administrator.Username

@ -29,7 +29,7 @@ public partial class AddChapter
var formContent = new FormUrlEncodedContent(formData); var formContent = new FormUrlEncodedContent(formData);
string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/chapters"; string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/chapter";
using (var httpClient = new HttpClient()) using (var httpClient = new HttpClient())
{ {

@ -58,24 +58,13 @@ public partial class Chapters
} }
protected override async Task OnAfterRenderAsync(bool firstRender) //protected override async Task OnAfterRenderAsync(bool firstRender)
{ //{
// Do not treat this action if is not the first render // if (!firstRender)
if (!firstRender) // {
{ // return;
return; // }
} //}
var currentData = await LocalStorage.GetItemAsync<Chapter[]>("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<Chapter[]>($"https://trusting-panini.87-106-126-109.plesk.page/api/chapters").Result;
await LocalStorage.SetItemAsync("data", originalData);
}
}
private async Task OnReadData(DataGridReadDataEventArgs<Chapter> e) private async Task OnReadData(DataGridReadDataEventArgs<Chapter> e)
{ {
@ -92,7 +81,12 @@ public partial class Chapters
{ {
chapters = new List<Chapter>(response); // an actual data for the current page chapters = new List<Chapter>(response); // an actual data for the current page
totalChapter = chapters.Count; totalChapter = chapters.Count;
var currentData = await LocalStorage.GetItemAsync<Chapter[]>("data");
if (currentData == null || currentData.Length != chapters.Count)
{
var originalData = Http.GetFromJsonAsync<Chapter[]>($"https://trusting-panini.87-106-126-109.plesk.page/api/chapters").Result;
await LocalStorage.SetItemAsync("data", originalData);
}
} }
} }
@ -116,14 +110,7 @@ public partial class Chapters
await IJSRuntime.InvokeVoidAsync("downloadFileFromStream", "data.csv", streamRef); await IJSRuntime.InvokeVoidAsync("downloadFileFromStream", "data.csv", streamRef);
} }
} }
private async void Import()
{
// for
// {
// var formData = new MultipartFormDataContent();
// }
}
private async Task SingleUpload(InputFileChangeEventArgs e) private async Task SingleUpload(InputFileChangeEventArgs e)
{ {
using (MemoryStream ms = new MemoryStream()) using (MemoryStream ms = new MemoryStream())
@ -165,7 +152,7 @@ public partial class Chapters
var formContent = new FormUrlEncodedContent(formData); var formContent = new FormUrlEncodedContent(formData);
string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/chapters"; string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/chapter";
using (var httpClient = new HttpClient()) using (var httpClient = new HttpClient())
{ {

@ -38,10 +38,30 @@ public partial class EditChapter
private async void HandleValidSubmit() private async void HandleValidSubmit()
{ {
await DataService.Update(Id, chapterModel); await DataService.Update(Id, chapterModel);
var formData = new List<KeyValuePair<string, string>>();
formData.Add(new KeyValuePair<string, string>("name", chapterModel.Name));
var formContent = new FormUrlEncodedContent(formData);
string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/update/chapter/"+chapterModel.Id;
using (var httpClient = new HttpClient())
{
var response = await httpClient.PostAsync(apiUri, formContent);
Logger.LogInformation("Chapter '{chapterModelName}' edited", chapterModel.Name); Logger.LogInformation("Chapter '{chapterModelName}' edited", chapterModel.Name);
if (response.IsSuccessStatusCode)
{
var responseBody = await response.Content.ReadAsStringAsync();
}
else
{
var errorResponse = await response.Content.ReadAsStringAsync();
}
}
NavigationManager.NavigateTo("chapters"); NavigationManager.NavigateTo("chapters");
} }
} }

@ -5,7 +5,7 @@
<h3>Chapters</h3> <h3>Chapters</h3>
<div> <div>
<NavLink class="btn btn-primary" href="addChapter" Match="NavLinkMatch.All"> <NavLink class="btn btn-primary" href="addQuestion" Match="NavLinkMatch.All">
<i class="fa fa-plus"></i> Ajouter <i class="fa fa-plus"></i> Ajouter
</NavLink> </NavLink>
</div> </div>

@ -2,7 +2,6 @@
using Blazor.ViewClasses; using Blazor.ViewClasses;
using Blazored.LocalStorage; using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using static System.Net.WebRequestMethods;
namespace Blazor.Services namespace Blazor.Services
{ {
@ -149,7 +148,7 @@ namespace Blazor.Services
return admin; return admin;
} }
public async Task Update(int id, AdministratorsModel model) public async Task Update(int id, AdministratorModel model)
{ {
// Get the current data // Get the current data
var currentData = await _localStorage.GetItemAsync<List<Administrator>>("data"); var currentData = await _localStorage.GetItemAsync<List<Administrator>>("data");
@ -165,13 +164,13 @@ namespace Blazor.Services
// Modify the content of the adminnistrator // Modify the content of the adminnistrator
admin.Username = model.Username; admin.Username = model.Username;
admin.hashedPassword = model.hashedPassword; admin.HashedPassword = model.HashedPassword;
// Save the data // Save the data
await _localStorage.SetItemAsync("data", currentData); await _localStorage.SetItemAsync("data", currentData);
} }
public async Task Add(AdministratorsModel model) public async Task Add(AdministratorModel model)
{ {
// Get the current data // Get the current data
var currentData = await _localStorage.GetItemAsync<List<Administrator>>("data"); var currentData = await _localStorage.GetItemAsync<List<Administrator>>("data");
@ -184,7 +183,7 @@ namespace Blazor.Services
{ {
Id = model.Id, Id = model.Id,
Username = model.Username, Username = model.Username,
hashedPassword = model.hashedPassword HashedPassword = model.HashedPassword
}); });

@ -15,9 +15,9 @@ namespace Blazor.Services
Task Update(int id, ChapterModel model); 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<Administrator> GetAdminById(int id); Task<Administrator> GetAdminById(int id);

@ -4,6 +4,6 @@ public class Administrator
{ {
public int Id { get; set; } public int Id { get; set; }
public string Username { get; set; } public string Username { get; set; }
public string hashedPassword { get; set; } public string HashedPassword { get; set; }
} }

Loading…
Cancel
Save