Fusion de master ici

vueNavBar
Shana CASCARRA 1 year ago
commit 70c4d731f0

@ -4,9 +4,8 @@
</Found> </Found>
<NotFound> <NotFound>
<CascadingAuthenticationState> <CascadingAuthenticationState>
<LayoutView Layout="@typeof(MainLayout)"> <VeraxShield.pages.erreurs.ErreurParDefaut/>
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</CascadingAuthenticationState> </CascadingAuthenticationState>
</NotFound> </NotFound>
</Router> </Router>

@ -22,7 +22,7 @@
</BarMenu> </BarMenu>
<BarEnd> <BarEnd>
<BarItem class="bar-role"> <BarItem class="bar-role">
@DonneurEtat.NomUtilisateur @DonneurEtat.getUtilisateurCourant().Pseudo
</BarItem> </BarItem>
<BarItem> <BarItem>
<Button Color="Color.Primary">Deconnexion</Button> <Button Color="Color.Primary">Deconnexion</Button>

@ -6,6 +6,10 @@
@layout NavBarPrincipale @layout NavBarPrincipale
<head>
<link rel="stylesheet" href="css/composants/affichages/utilisateurs/datagridUtilisateurs.css">
</head>
<DataGrid TItem="Utilisateur" <DataGrid TItem="Utilisateur"
Data="@Utilisateurs" Data="@Utilisateurs"
@bind-SelectedRow="@utilisateurSelectionne" @bind-SelectedRow="@utilisateurSelectionne"
@ -23,31 +27,49 @@
<DataGridColumn Field="@nameof(Utilisateur.Pseudo)" Caption="Pseudo" Sortable="false" /> <DataGridColumn Field="@nameof(Utilisateur.Pseudo)" Caption="Pseudo" Sortable="false" />
<DataGridColumn Field="@nameof(Utilisateur.Prenom)" Caption="Prenom" Editable /> <DataGridColumn Field="@nameof(Utilisateur.Prenom)" Caption="Prenom" Editable />
<DataGridColumn Field="@nameof(Utilisateur.Nom)" Caption="Nom" Editable /> <DataGridColumn Field="@nameof(Utilisateur.Nom)" Caption="Nom" Editable />
<DataGridColumn Field="@nameof(Utilisateur.IsBan)" Caption="Banissement" Editable /> <DataGridColumn Field="@nameof(Utilisateur.IsBan)" Caption="Banissement" Editable >
<DisplayTemplate>
@if (context.IsBan)
{
<Badge Color="Color.Danger" Pill>Ban</Badge>
} else
{
<Badge Color="Color.Success" Pill>Valide</Badge>
}
</DisplayTemplate>
</DataGridColumn>
<DataGridColumn Field="@nameof(Utilisateur.Role)" Caption="role" Editable />
<DataGridColumn Field="@nameof(Utilisateur.Mail)" Caption="mail" Editable />
<DataGridColumn Field="@nameof(Utilisateur.Pseudo)" Caption="Gerer"> <DataGridColumn Field="@nameof(Utilisateur.Pseudo)" Caption="Gerer">
<DisplayTemplate> <DisplayTemplate>
<button type="button" class="btn btn-primary" @onclick="() => onClickBoutonSuppression(context.Pseudo)"><i class="fa fa-trash"></i> Supprimer</button> <button type="button" class="btn btn-primary editButton" @onclick="() => onClickBoutonSuppression(context.Pseudo)"><i class="fa fa-trash"></i> </button>
<button type="button" class="btn btn-primary" @onclick="() => onClickBoutonModification(context.Pseudo)"><i class="fa fa-trash"></i> Modifier</button> <button type="button" class="btn btn-primary editButton" @onclick="() => onClickBoutonModification(context.Pseudo)"><i class="fa fa-edit"></i> </button>
</DisplayTemplate> </DisplayTemplate>
</DataGridColumn> </DataGridColumn>
</DataGridColumns> </DataGridColumns>
<PageButtonTemplate> <PageButtonTemplate>
<Span TextColor="TextColor.Success"> <Span class="darkBlue">
@context.PageNumber @context.PageNumber
</Span> </Span>
</PageButtonTemplate> </PageButtonTemplate>
<NextPageButtonTemplate><Icon Name="IconName.StepForward" TextColor="TextColor.Success" /></NextPageButtonTemplate> <NextPageButtonTemplate><Icon Name="IconName.StepForward" class="darkBlue" /></NextPageButtonTemplate>
<PreviousPageButtonTemplate><Icon Name="IconName.StepBackward" TextColor="TextColor.Success" /></PreviousPageButtonTemplate> <PreviousPageButtonTemplate><Icon Name="IconName.StepBackward" class="darkBlue" /></PreviousPageButtonTemplate>
<LastPageButtonTemplate><Icon Name="IconName.Forward" TextColor="TextColor.Success" /></LastPageButtonTemplate> <LastPageButtonTemplate><Icon Name="IconName.Forward" class="darkBlue" /></LastPageButtonTemplate>
<FirstPageButtonTemplate><Icon Name="IconName.Backward" TextColor="TextColor.Success" /></FirstPageButtonTemplate> <FirstPageButtonTemplate><Icon Name="IconName.Backward" class="darkBlue" /></FirstPageButtonTemplate>
<TotalItemsTemplate><Badge Color="Color.Success">@context.TotalItems total items</Badge></TotalItemsTemplate> <TotalItemsTemplate><Badge class="darkBlue">@context.TotalItems utilisateurs</Badge></TotalItemsTemplate>
<TotalItemsShortTemplate><Badge Color="Color.Success">@context.TotalItems</Badge></TotalItemsShortTemplate> <TotalItemsShortTemplate><Badge class="darkBlue">@context.TotalItems</Badge></TotalItemsShortTemplate>
<ButtonRowTemplate>
<Button Class="editButton biggest" Clicked="boutonclick">+</Button>
</ButtonRowTemplate>
<ItemsPerPageTemplate></ItemsPerPageTemplate> <ItemsPerPageTemplate></ItemsPerPageTemplate>
<PageSelectorTemplate> <PageSelectorTemplate>
@ -62,7 +84,7 @@
</PageSelectorTemplate> </PageSelectorTemplate>
<PageSizesTemplate> <PageSizesTemplate>
<Select TextColor="TextColor.Success" @bind-SelectedValue="@context.CurrentPageSize" Size="Size.Small"> <Select class="darkBlue" @bind-SelectedValue="@context.CurrentPageSize" Size="Size.Small">
@foreach (var curPageSize in context.PageSizes) @foreach (var curPageSize in context.PageSizes)
{ {
<SelectItem Value="@curPageSize">@curPageSize</SelectItem> <SelectItem Value="@curPageSize">@curPageSize</SelectItem>
@ -71,12 +93,6 @@
</PageSizesTemplate> </PageSizesTemplate>
</DataGrid> </DataGrid>
<div>
<NavLink class="btn btn-primary" href="/utilisateurs/ajouter" Match="NavLinkMatch.All">
<i class="fa fa-plus"></i> Ajouter
</NavLink>
</div>
<div> <div>
<ModalSuppressionUtilisateur <ModalSuppressionUtilisateur
utilisateur="@utilisateurSelectionne" utilisateur="@utilisateurSelectionne"

@ -17,6 +17,9 @@ namespace VeraxShield.composants.affichages.utilisateurs
[Inject] [Inject]
private NavigationManager NavigationManager { get; set; } private NavigationManager NavigationManager { get; set; }
[Inject]
private DonneurEtat DonneurEtat {get; set;}
private Utilisateur? utilisateurSelectionne; private Utilisateur? utilisateurSelectionne;
[Parameter] [Parameter]
@ -70,7 +73,10 @@ namespace VeraxShield.composants.affichages.utilisateurs
public async Task onClickBoutonSuppression(String Pseudo) public async Task onClickBoutonSuppression(String Pseudo)
{ {
this.utilisateurSelectionne = await this.utilisateursDataService.getUtilisateurFromPseudo(Pseudo); this.utilisateurSelectionne = await this.utilisateursDataService.getUtilisateurFromPseudo(Pseudo);
await this.afficherModal(); if (this.DonneurEtat._utilisateurCourant.Pseudo != this.utilisateurSelectionne.Pseudo)
{
await this.afficherModal();
}
} }
public async Task onClickBoutonModification(String Pseudo) public async Task onClickBoutonModification(String Pseudo)
@ -78,5 +84,10 @@ namespace VeraxShield.composants.affichages.utilisateurs
this.utilisateurSelectionne = await this.utilisateursDataService.getUtilisateurFromPseudo(Pseudo); this.utilisateurSelectionne = await this.utilisateursDataService.getUtilisateurFromPseudo(Pseudo);
this.modifierUtilisateur(); this.modifierUtilisateur();
} }
public async Task boutonclick()
{
NavigationManager.NavigateTo("/utilisateurs/ajouter");
}
} }
} }

@ -17,7 +17,7 @@
<Field Horizontal> <Field Horizontal>
<FieldLabel ColumnSize="ColumnSize.Is2">Pseudo</FieldLabel> <FieldLabel ColumnSize="ColumnSize.Is2">Pseudo</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10"> <FieldBody ColumnSize="ColumnSize.Is10">
<TextEdit Placeholder="Entrez votre pseudo" @bind-Text="@Requete.Nom"> <TextEdit Placeholder="Entrez votre pseudo" @bind-Text="@Requete.Pseudo">
<Feedback> <Feedback>
<ValidationError /> <ValidationError />
</Feedback> </Feedback>
@ -43,8 +43,13 @@
</div> </div>
<div class="btn-container"> <div class="btn-container">
<Button Class="btn-se-connecter" Clicked="@OnSubmit">Se connecter</Button> <Button Class="btn-se-connecter" Clicked="@OnSubmit">
<Button Class="btn-s-inscrire" Clicked="@OnSubmit">S'inscrire</Button> <Icon Name="Blazorise.Icons.FontAwesome.FontAwesomeIcons.Seedling" />
Se connecter</Button>
<Button Class="btn-s-inscrire" Clicked="@RedirectionInscription">
<Icon Name="Blazorise.Icons.FontAwesome.FontAwesomeIcons.CreditCard" />
S'inscrire</Button>
</div> </div>

@ -23,6 +23,7 @@ namespace VeraxShield.composants.authentification
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
this.Requete = new RequeteConnexion(); this.Requete = new RequeteConnexion();
await base.OnInitializedAsync();
} }
public async Task OnSubmit() public async Task OnSubmit()
@ -40,5 +41,10 @@ namespace VeraxShield.composants.authentification
} }
} }
} }
public async Task RedirectionInscription()
{
this.NavigationManager.NavigateTo("/inscription");
}
} }
} }

@ -0,0 +1,119 @@
@using Blazorise.Components;
@using System.ComponentModel.DataAnnotations;
<head>
<link rel="stylesheet" href="css/composants/authentification/FormulaireConnexion.css" />
</head>
<div class="connexion-container">
<h1 class="title-spacing"> S'inscrire </h1>
<Validations @ref="Validations" Mode="ValidationMode.Manual" Model="Requete">
<div class="field-container">
<Validation>
<Field Horizontal>
<FieldLabel ColumnSize="ColumnSize.Is2">Pseudo</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<TextEdit Placeholder="Entrez votre pseudo" @bind-Text="@Requete.Pseudo">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</FieldBody>
</Field>
</Validation>
</div>
<div class="field-container">
<Validation>
<Field Horizontal>
<FieldLabel ColumnSize="ColumnSize.Is2">Prenom</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<TextEdit Placeholder="Entrez votre prenom" @bind-Text="@Requete.Prenom">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</FieldBody>
</Field>
</Validation>
</div>
<div class="field-container">
<Validation>
<Field Horizontal>
<FieldLabel ColumnSize="ColumnSize.Is2">Nom</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<TextEdit Placeholder="Entrez votre nom" @bind-Text="@Requete.Nom">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</FieldBody>
</Field>
</Validation>
</div>
<div class="field-container">
<Validation>
<Field Horizontal>
<FieldLabel ColumnSize="ColumnSize.Is2">Mail</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<TextEdit Placeholder="Entrez votre mail" @bind-Text="@Requete.Mail">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</FieldBody>
</Field>
</Validation>
</div>
<div class="field-container">
<Validation>
<Field Horizontal>
<FieldLabel ColumnSize="ColumnSize.Is2">Mot de passe</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<TextEdit Placeholder="Entrez votre mot de passe" @bind-Text="@Requete.MotDePasse">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</FieldBody>
</Field>
</Validation>
</div>
<div class="field-container">
<Validation>
<Field Horizontal>
<FieldLabel ColumnSize="ColumnSize.Is2">Confirmer le mot de passe</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is10">
<TextEdit Placeholder="Entrez votre mot de à nouveau" @bind-Text="@Requete.MotDePasseConfirmation">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</FieldBody>
</Field>
</Validation>
</div>
<div class="btn-container">
<Button Class="btn-se-connecter" Clicked="@OnSubmit">
<Icon Name="Blazorise.Icons.FontAwesome.FontAwesomeIcons.CheckCircle" />
S'inscrire</Button>
<Button Class="btn-s-inscrire" Clicked="@OnAnnulation">
<Icon Name="Blazorise.Icons.FontAwesome.FontAwesomeIcons.Reply" />
Annuler</Button>
</div>
<label class="text-danger">@Erreur</label>
</Validations>
</div>

@ -0,0 +1,43 @@
using Blazorise;
using Microsoft.AspNetCore.Components;
using VeraxShield.composants.formulaires.modeles;
namespace VeraxShield.composants.authentification
{
public partial class FormulaireInscription
{
[Parameter]
public Validations Validations {get; set;}
public RequeteInscription Requete {get; set;}
[Inject]
private NavigationManager NavigationManager {get; set;}
[Inject]
private DonneurEtat DonneurEtat {get; set;}
public String Erreur {get; set; }
protected override async Task OnInitializedAsync()
{
this.Requete = new RequeteInscription();
await base.OnInitializedAsync();
}
public async Task OnSubmit()
{
if (await this.Validations.ValidateAll())
{
await DonneurEtat.Inscription(this.Requete);
NavigationManager.NavigateTo("/connexion");
}
}
public async Task OnAnnulation()
{
this.NavigationManager.NavigateTo("/connexion");
}
}
}

@ -8,6 +8,6 @@ namespace VeraxShield.composants.formulaires.modeles
public string MotDePasse { get; set; } public string MotDePasse { get; set; }
[Required(ErrorMessage="le champ est obligatoire !")] [Required(ErrorMessage="le champ est obligatoire !")]
public string Nom { get; set; } public string Pseudo { get; set; }
} }
} }

@ -13,5 +13,14 @@ namespace VeraxShield.composants.formulaires.modeles
[Required] [Required]
public string Nom { get; set; } public string Nom { get; set; }
[Required]
public string Prenom {get; set;}
[Required]
public string Pseudo { get; set; }
[Required]
public string Mail { get; set;}
} }
} }

@ -32,5 +32,16 @@ namespace VeraxShield.factories
return temp; return temp;
} }
// public static Utilisateur toUtilisateur(UtilisateurCourant appUtilisateur)
// {
// return new Utilisateur(appUtilisateur.Pseudo, appUtilisateur.Nom, appUtilisateur.Prenom,
// appUtilisateur.Roles[0], appUtilisateur.MotDePasse, appUtilisateur.Mail, false);
// }
public static AppUtilisateur toAppUtilisateur(Utilisateur u)
{
return new AppUtilisateur(u.Pseudo, u.Nom, u.Prenom, u.Mail, u.Mdp, u.Role);
}
} }
} }

@ -2,11 +2,18 @@ public class AppUtilisateur
{ {
public string MotDePasse { get; set; } public string MotDePasse { get; set; }
public List<string> Roles { get; set; } public List<string> Roles { get; set; }
public string Pseudo { get; set; }
public string Prenom { get; set; }
public string Nom { get; set; } public string Nom { get; set; }
public string Mail { get; set; }
public AppUtilisateur(string nom, string mdp, String premierRole)
public AppUtilisateur(string pseudo,string nom, string prenom, string mail, string mdp, String premierRole)
{ {
this.MotDePasse = mdp; this.MotDePasse = mdp;
this.Pseudo = pseudo;
this.Mail = mail;
this.Prenom = prenom;
this.Nom = nom; this.Nom = nom;
this.Roles = new List<string>(); this.Roles = new List<string>();

@ -2,5 +2,5 @@ public class UtilisateurCourant
{ {
public Dictionary<string, string> Claims { get; set; } public Dictionary<string, string> Claims { get; set; }
public bool EstAuthentifie { get; set; } public bool EstAuthentifie { get; set; }
public string Nom { get; set; } public string Pseudo { get; set; }
} }

@ -1,5 +1,7 @@
@page "/" @using VeraxShield.composants.affichages.navBar;
@page "/"
<!--
<h1>VeraxShield</h1> <h1>VeraxShield</h1>
<button type="button" class="btn btn-link ml-md-auto" @onclick="@SeConnecter">Connexion</button> <button type="button" class="btn btn-link ml-md-auto" @onclick="@SeConnecter">Connexion</button>
@ -11,7 +13,60 @@
<h1> Adiu : @context.User.Identity.Name!</h1> <h1> Adiu : @context.User.Identity.Name!</h1>
<p>Podètz veire aquest contengut solament se sètz autentificat ! </p> <p>Podètz veire aquest contengut solament se sètz autentificat ! </p>
<NavLink href="/utilisateurs/liste"> --> Liste des utilisateurs</NavLink> <NavLink href="/utilisateurs/liste"> -> Liste des utilisateurs</NavLink>
<button type="button" class="btn btn-link ml-md-auto" @onclick="@SeDeconnecter">Deconnexion</button> <button type="button" class="btn btn-link ml-md-auto" @onclick="@SeDeconnecter">Deconnexion</button>
</AuthorizeView> </AuthorizeView>
-->
<head>
<link rel="stylesheet" href="css/index.css">
</head>
<AuthorizeView>
<NotAuthorized>
<body>
<header>
<h1>VeraxShield</h1>
</header>
<main>
<div class="center-box">
<div class="button-container">
<button type="button" class="btn btn-link" @onclick="@SeConnecter">Connexion</button>
</div>
<div class="button-container">
<button type="button" class="btn btn-link" @onclick="@RetourVerax">
<Icon Name="Blazorise.Icons.FontAwesome.FontAwesomeIcons.LocationArrow" />
Retourner sur Verax
</button>
</div>
</div>
</main>
<footer>
.
</footer>
</body>
</NotAuthorized>
<Authorized>
<body>
<header>
<h1>VeraxShield</h1>
</header>
@layout NavBarPrincipale
<main>
<div class="home-center-box">
<h1> Adiu : @context.User.Identity.Name!</h1>
<p>Podètz veire aquest contengut solament se sètz autentificat ! </p>
</div>
</main>
</body>
</Authorized>
</AuthorizeView>

@ -20,9 +20,9 @@ namespace VeraxShield.pages
NavigationManager.NavigateTo("/connexion"); NavigationManager.NavigateTo("/connexion");
} }
private async Task NavBar() private void RetourVerax()
{ {
NavigationManager.NavigateTo("/NavBar"); NavigationManager.NavigateTo("https://www.verax.com");
} }
} }
} }

@ -0,0 +1,14 @@
@using VeraxShield.composants.authentification;
@page "/inscription"
<head>
<link rel="stylesheet" href="css/pages/authentification/Inscription.css" />
</head>
<div class="centrer-composant">
<div class="formulaire-inscription">
<FormulaireInscription />
</div>
</div>

@ -0,0 +1,17 @@
<head>
<link rel="stylesheet" href="css/pages/erreurs/ErreurParDefaut.css">
</head>
<Div Margin="Margin.IsAuto.OnX" TextAlignment="TextAlignment.Center">
<Div Padding="Padding.Is5.OnY">
<DisplayHeading Size="DisplayHeadingSize.Is1" TextWeight="TextWeight.Bold" TextColor="TextColor.Primary" Margin="Margin.Is4.FromBottom">
500
</DisplayHeading>
<Paragraph TextSize="TextSize.ExtraLarge" Margin="Margin.Is4.FromBottom">
Error intern dau servidor.
</Paragraph>
<Paragraph Margin="Margin.Is4.FromBottom">
Aquesta pagina existís pas
</Paragraph>
</Div>
</Div>

@ -4,9 +4,22 @@
@page "/utilisateurs/liste" @page "/utilisateurs/liste"
@attribute [Authorize(Roles = "admin, modo")] @attribute [Authorize(Roles = "admin, modo")]
<h1>Utilisateurs de Verax</h1> <head>
<link rel="stylesheet" href="css/pages/utilisateurs/listeUtilisateurs.css">
</head>
<body>
<div class="center-box lightBlueBG">
<h1> Utilisateurs de Verax</h1>
<p class="margin10">Vous retrouverez ici les utilisateurs de Verax ainsi que les actions associées </p>
</div>
<div class="dataGrid"><DatagridUtilisateurs/></div>
</body>
<DatagridUtilisateurs/>

@ -2,5 +2,17 @@
<h1> Modifier l'utilisateur </h1> <h1> Modifier l'utilisateur </h1>
<head>
<link rel="stylesheet" href="css/pages/utilisateurs/ModifierUtilisateur.css">
</head>
<FormulaireModification Utilisateur="@Utilisateur" /> <FormulaireModification Utilisateur="@Utilisateur" />
<div class="test">
<VeraxShield.composants.authentification.FormulaireInscription>
</VeraxShield.composants.authentification.FormulaireInscription>
</div>

@ -1,22 +1,25 @@
using System.Linq;
using System.Security.Claims; using System.Security.Claims;
using VeraxShield.composants.formulaires.modeles; using VeraxShield.composants.formulaires.modeles;
using VeraxShield.modele.utilisateurs;
using VeraxShield.services.UtilisateursDataService;
public class AuthentificationService : IAuthentificationService public class AuthentificationService : IAuthentificationService
{ {
private List<Utilisateur> UtilisateursApplication {get; set;}
private static readonly List<AppUtilisateur> utilisateursApplication; private IUtilisateursDataService _utilisateursDataService;
public AuthentificationService(IUtilisateursDataService utilisateursDataService)
static AuthentificationService()
{ {
utilisateursApplication = new List<AppUtilisateur>(); Console.WriteLine("Passage dans le constructeur !");
utilisateursApplication.Add(new AppUtilisateur("Admin", "Admin", "admin")); this._utilisateursDataService = utilisateursDataService;
this.UtilisateursApplication = new List<Utilisateur>();
} }
public void Connexion(RequeteConnexion requete) public async Task Connexion(RequeteConnexion requete)
{ {
var utilisateur = utilisateursApplication.FirstOrDefault(w => w.Nom == requete.Nom && w.MotDePasse == requete.MotDePasse); await this.MajUtilisateurs();
var utilisateur = this.UtilisateursApplication.FirstOrDefault(w => w.Pseudo == requete.Pseudo && w.Mdp == requete.MotDePasse);
if (utilisateur == null) if (utilisateur == null)
{ {
@ -24,9 +27,10 @@ public class AuthentificationService : IAuthentificationService
} }
} }
public UtilisateurCourant GetUtilisateur(string nom) public async Task<UtilisateurCourant> GetUtilisateur(string pseudo)
{ {
var utilisateur = utilisateursApplication.FirstOrDefault(w => w.Nom == nom); await this.MajUtilisateurs();
var utilisateur = this.UtilisateursApplication.FirstOrDefault(w => w.Pseudo == pseudo);
if (utilisateur == null) if (utilisateur == null)
{ {
@ -34,18 +38,26 @@ public class AuthentificationService : IAuthentificationService
} }
var claims = new List<Claim>(); var claims = new List<Claim>();
claims.AddRange(utilisateur.Roles.Select(s => new Claim(ClaimTypes.Role, s))); claims.Add(new Claim(ClaimTypes.Role, utilisateur.Role));
return new UtilisateurCourant return new UtilisateurCourant
{ {
EstAuthentifie = true, EstAuthentifie = true,
Nom = utilisateur.Nom, Pseudo = utilisateur.Pseudo,
Claims = claims.ToDictionary(c => c.Type, c => c.Value) Claims = claims.ToDictionary(c => c.Type, c => c.Value)
}; };
} }
public void Inscription(RequeteInscription requete) public async Task Inscription(RequeteInscription requete)
{
await this._utilisateursDataService.AjouterUtilisateur(new Utilisateur(requete.Pseudo, requete.Nom, requete.Prenom, "invite",
requete.MotDePasse, requete.Mail, false));
await this.MajUtilisateurs();
}
public async Task MajUtilisateurs()
{ {
utilisateursApplication.Add(new AppUtilisateur(requete.Nom, requete.MotDePasse, "invite" )); this.UtilisateursApplication = await this._utilisateursDataService.getAllUtilisateurs();
} }
} }

@ -1,30 +1,33 @@
using System.Security.Claims; using System.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Components.Authorization;
using VeraxShield.composants.formulaires.modeles; using VeraxShield.composants.formulaires.modeles;
using VeraxShield.factories;
using VeraxShield.modele.utilisateurs;
using VeraxShield.services.UtilisateursDataService;
public class DonneurEtat : AuthenticationStateProvider public class DonneurEtat : AuthenticationStateProvider
{ {
private IAuthentificationService _serviceAuthentification; private IAuthentificationService _serviceAuthentification;
private UtilisateurCourant _utilisateurCourant; public UtilisateurCourant _utilisateurCourant;
private IUtilisateursDataService _utilisateursDataService;
public string NomUtilisateur => _utilisateurCourant?.Nom; public DonneurEtat(IAuthentificationService service, IUtilisateursDataService utilisateursDataService)
public DonneurEtat(IAuthentificationService service)
{ {
this._utilisateursDataService = utilisateursDataService;
this._serviceAuthentification = service; this._serviceAuthentification = service;
} }
public override Task<AuthenticationState> GetAuthenticationStateAsync() public override Task<AuthenticationState> GetAuthenticationStateAsync()
{ {
var identite = new ClaimsIdentity(); var identite = new ClaimsIdentity();
try try
{ {
var userInfo = this.getUtilisateurCourant(); var userInfo = this.getUtilisateurCourant();
if (userInfo.EstAuthentifie) if (userInfo.EstAuthentifie)
{ {
var claims = new[] { new Claim(ClaimTypes.Name, this._utilisateurCourant.Nom) }.Concat(this._utilisateurCourant.Claims.Select(c => new Claim(c.Key, c.Value))); var claims = new[] { new Claim(ClaimTypes.Name, this._utilisateurCourant.Pseudo) }.Concat(this._utilisateurCourant.Claims.Select(c => new Claim(c.Key, c.Value)));
identite = new ClaimsIdentity(claims, "Server authentication"); identite = new ClaimsIdentity(claims, "Server authentication");
} }
} }
@ -36,7 +39,7 @@ public class DonneurEtat : AuthenticationStateProvider
return Task.FromResult(new AuthenticationState(new ClaimsPrincipal(identite))); return Task.FromResult(new AuthenticationState(new ClaimsPrincipal(identite)));
} }
private UtilisateurCourant getUtilisateurCourant() public UtilisateurCourant getUtilisateurCourant()
{ {
if (this._utilisateurCourant != null && this._utilisateurCourant.EstAuthentifie) if (this._utilisateurCourant != null && this._utilisateurCourant.EstAuthentifie)
{ {
@ -48,10 +51,10 @@ public class DonneurEtat : AuthenticationStateProvider
public async Task Connexion(RequeteConnexion requete) public async Task Connexion(RequeteConnexion requete)
{ {
this._serviceAuthentification.Connexion(requete); await this._serviceAuthentification.Connexion(requete);
// No error - Login the user // No error - Login the user
var user = this._serviceAuthentification.GetUtilisateur(requete.Nom); var user = await this._serviceAuthentification.GetUtilisateur(requete.Pseudo);
this._utilisateurCourant = user; this._utilisateurCourant = user;
NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
@ -65,12 +68,13 @@ public class DonneurEtat : AuthenticationStateProvider
public async Task Inscription(RequeteInscription requete) public async Task Inscription(RequeteInscription requete)
{ {
this._serviceAuthentification.Inscription(requete); await this._serviceAuthentification.Inscription(requete);
// No error - Login the user // No error - Login the user
var user = this._serviceAuthentification.GetUtilisateur(requete.Nom); // var user = await this._serviceAuthentification.GetUtilisateur(requete.Nom);
this._utilisateurCourant = user; // this._utilisateurCourant = user;
NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
} }
} }

@ -2,7 +2,7 @@ using VeraxShield.composants.formulaires.modeles;
public interface IAuthentificationService public interface IAuthentificationService
{ {
public UtilisateurCourant GetUtilisateur(String nom); public Task<UtilisateurCourant> GetUtilisateur(String nom);
public void Connexion(RequeteConnexion requete); public Task Connexion(RequeteConnexion requete);
public void Inscription(RequeteInscription requete); public Task Inscription(RequeteInscription requete);
} }

@ -0,0 +1,16 @@
.darkBlue {
color: #053679;
}
.editButton {
background-color: #053679;
border: none;
color: white;
}
.biggest{
font-weight: bold;
font-size:120%;
}

@ -5,6 +5,8 @@
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* Ajoute une ombre légère */ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* Ajoute une ombre légère */
} }
.field-container { .field-container {
margin-bottom: 15px; margin-bottom: 15px;
} }
@ -31,11 +33,15 @@
} }
.btn-se-connecter { .btn-se-connecter {
background-color: darkblue; background-color: #053679;
color: white; color: white;
} }
.btn-se-connecter:hover, .btn-s-inscrire:hover {
background-color: #afc1db;
color: #053679;
}
.btn-s-inscrire { .btn-s-inscrire {
background-color: grey; background-color: grey;
color: white; color: white;
} }

@ -0,0 +1,84 @@
/*Not Authorized
---------------------------------------------------
*/
body {
background-color: white;
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
width: 100%;
}
header {
color: #053679;
text-align: center;
padding: 10px;
margin: 0;
background-color: #afc1db;
}
main {
display: flex;
justify-content: center;
align-items: center;
height: 80vh;
margin-top:10vh;
}
.center-box {
background-color: #afc1db;
padding: 20px;
text-align: center;
border-radius: 10px;
}
.button-container {
margin-top: 10px;
display: flex;
justify-content: center;
align-items: center;
}
.btn-link {
color: white;
background-color: #053679;
margin: 5px;
padding: 10px;
border: none;
border-radius: 5px;
display: block;
cursor: pointer;
width:100%;
}
.btn-link:hover {
background-color: white;
color: #053679;
}
/*Authorized
---------------------------------------------------
*/
.navbar {
background-color: #053679;
}
.btn-navbar {
color: white;
background-color: none;
}
.btn-navbar:hover {
color: #afc1db;
}
.home-center-box {
background-color: #afc1db;
padding: 40px;
text-align: center;
border-radius: 10px;
width: 80%;
}

@ -0,0 +1,20 @@
.centrer-composant {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.formulaire-inscription {
width: 53%;
/* border: 2px solid black;
border-radius: 10px; */
/* padding: 20px; */
}
body {
background-image: url('/ressources/images/fondPages/fondConnexion.webp');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}

@ -0,0 +1,4 @@
/* body {
background-color: #8BC6EC;
background-image: linear-gradient(135deg, #8BC6EC 0%, #9599E2 100%);
} */

@ -0,0 +1,9 @@
.test {
/* background-color: white; */
background-color: #8EC5FC;
background-image: linear-gradient(62deg, #8EC5FC 0%, #E0C3FC 100%);
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* Ajoute une ombre légère */
}

@ -0,0 +1,27 @@
.h1{
text-align:center;
margin: 50px;
}
.margin10{
margin: 10px;
}
.center-box {
padding: 20px;
margin: 20px auto;
text-align: center;
border-radius: 10px;
background-color: #afc1db;
width: 80%;
}
.dataGrid {
margin: 10px auto;
width: 80%;
}
.btn:hover {
background-color: #afc1db;
color: #053679;
}

@ -17,6 +17,15 @@
"Mdp": "SecretPassword456", "Mdp": "SecretPassword456",
"IsBan": true "IsBan": true
}, },
{
"Pseudo": "Admin",
"Mail": "Admin.admin@admin.com",
"Nom": "Admin",
"Prenom": "Admin",
"Role": "admin",
"Mdp": "Admin",
"IsBan": false
},
{ {
"Pseudo": "alice_jones", "Pseudo": "alice_jones",
"Mail": "alice.jones@example.com", "Mail": "alice.jones@example.com",

Loading…
Cancel
Save