commit
9f1c373403
@ -19,6 +19,7 @@ export class AuthGuard implements CanActivate {
|
|||||||
this.tokenKey = environment.tokenKey;
|
this.tokenKey = environment.tokenKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//s'il n'y a pas de token, le user ne peut pas naviguer sur les url où cette option est activée
|
||||||
canActivate(
|
canActivate(
|
||||||
route: ActivatedRouteSnapshot,
|
route: ActivatedRouteSnapshot,
|
||||||
state: RouterStateSnapshot
|
state: RouterStateSnapshot
|
||||||
@ -35,20 +36,17 @@ export class AuthGuard implements CanActivate {
|
|||||||
console.log('decodedToken : ', decodedToken);
|
console.log('decodedToken : ', decodedToken);
|
||||||
|
|
||||||
if (decodedToken.exp) {
|
if (decodedToken.exp) {
|
||||||
console.log("Date d'exp decodedToken : ", decodedToken.exp);
|
|
||||||
const dateExp = new Date(decodedToken.exp * 1000);
|
const dateExp = new Date(decodedToken.exp * 1000);
|
||||||
if (new Date() >= dateExp) {
|
if (new Date() >= dateExp) {
|
||||||
// le token a expiré, je n'autorise pas l'accès
|
// le token a expiré, je n'autorise pas l'accès et je redirige pour connexion
|
||||||
this.router.navigate(['accueil']);
|
this.router.navigate(['accueil']);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("C'est ok ! ");
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
console.log('You shall not pass !!!!');
|
console.log('You shall not pass !!!!');
|
||||||
this.router.navigate(['accueil']); // redirection de notre utilisateur vers une url de notre application (dans notre code TS)
|
this.router.navigate(['accueil']);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,11 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="container mt-5 menu">
|
<div class="container mt-5 menu">
|
||||||
|
<app-alert
|
||||||
|
*ngIf="isShow"
|
||||||
|
[alert]="alert"
|
||||||
|
(eventClose)="onClickCloseAlert()"
|
||||||
|
></app-alert>
|
||||||
<div class="row d-flex justify-content-center">
|
<div class="row d-flex justify-content-center">
|
||||||
<div class="col-md-auto" *ngFor="let menu of listMenus">
|
<div class="col-md-auto" *ngFor="let menu of listMenus">
|
||||||
<div class="card p-3 py-4 align-items" style="width: 14rem">
|
<div class="card p-3 py-4 align-items" style="width: 14rem">
|
||||||
|
@ -19,6 +19,8 @@ import {
|
|||||||
})
|
})
|
||||||
export class CardMenuComponent implements OnInit {
|
export class CardMenuComponent implements OnInit {
|
||||||
closeResult = '';
|
closeResult = '';
|
||||||
|
alert : any;
|
||||||
|
isShow : boolean;
|
||||||
public listMenus:any[];
|
public listMenus:any[];
|
||||||
public menuId : any;
|
public menuId : any;
|
||||||
public menuForm : FormGroup;
|
public menuForm : FormGroup;
|
||||||
@ -35,30 +37,21 @@ public upMenuForm : FormGroup;
|
|||||||
this.listMenus=[];
|
this.listMenus=[];
|
||||||
this.menuForm = new FormGroup({});
|
this.menuForm = new FormGroup({});
|
||||||
this.upMenuForm = new FormGroup({});
|
this.upMenuForm = new FormGroup({});
|
||||||
this.upMenuForm = this.initForm();
|
this.isShow = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Méthode qui initialise les champs du formulaire avec les infos de la BDD
|
|
||||||
private initForm(menu?: Menu): FormGroup {
|
|
||||||
return this.fb.group({
|
|
||||||
dateMenu: [menu ? menu.dateMenu : ''],
|
|
||||||
repasMidi: [menu ? menu.repasMidi : ''],
|
|
||||||
repasSoir: [menu ? menu.repasSoir : ''],
|
|
||||||
|
|
||||||
});
|
//delete d'un menu - fait appel au service dédié MenuService qui gère les observables
|
||||||
}
|
|
||||||
|
|
||||||
//delete d'un menu
|
|
||||||
deleteMenu(id_menu : number): void {
|
deleteMenu(id_menu : number): void {
|
||||||
// window.alert("Le menu a bien été supprimé!")
|
this.alert={"type":"danger", "content":"Le menu a bien été supprimé"};
|
||||||
|
this.isShow = true;
|
||||||
this.menusService.deleteMenu(id_menu)?.subscribe((resp) => {
|
this.menusService.deleteMenu(id_menu)?.subscribe((resp) => {
|
||||||
// this.router.navigate(['menu']);
|
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//updateMenu
|
//updateMenu - fait appel au service dédié MenuService qui gère les observables
|
||||||
updateMenu(id_menu : number): void {
|
updateMenu(id_menu : number): void {
|
||||||
|
|
||||||
const dateValue = this.upMenuForm.value['dateMenuFc'];
|
const dateValue = this.upMenuForm.value['dateMenuFc'];
|
||||||
@ -83,14 +76,14 @@ updateMenu(id_menu : number): void {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//ajout d'un menu
|
//ajout d'un menu - fait appel au service dédié MenuService qui gère les observables
|
||||||
saveMenu(): void {
|
saveMenu(): void {
|
||||||
|
|
||||||
const dateValue = this.menuForm.value['dateMenuFc'];
|
const dateValue = this.menuForm.value['dateMenuFc'];
|
||||||
const repasMidiValue = this.menuForm.value['repasMidiFc'];
|
const repasMidiValue = this.menuForm.value['repasMidiFc'];
|
||||||
const repasSoirValue = this.menuForm.value['repasSoirFc'];
|
const repasSoirValue = this.menuForm.value['repasSoirFc'];
|
||||||
|
|
||||||
|
//permet de construire l'objet à passer en base
|
||||||
const menu: Menu = {
|
const menu: Menu = {
|
||||||
dateMenu: dateValue,
|
dateMenu: dateValue,
|
||||||
repasMidi: repasMidiValue,
|
repasMidi: repasMidiValue,
|
||||||
@ -102,7 +95,7 @@ saveMenu(): void {
|
|||||||
|
|
||||||
console.log(menu.dateMenu);
|
console.log(menu.dateMenu);
|
||||||
this.menusService.addMenu(menu)?.subscribe((resp) => {
|
this.menusService.addMenu(menu)?.subscribe((resp) => {
|
||||||
window.location.reload();
|
window.location.reload(); //rechargement de la page pour affichage des modifications
|
||||||
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -113,10 +106,10 @@ saveMenu(): void {
|
|||||||
|
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
//affichage des menus d'une team
|
//affichage des menus d'une team - fait appel au service dédié MenuService qui gère les observables
|
||||||
this.menusService.getMenu()?.subscribe((listMenus: any[])=>{
|
this.menusService.getMenu()?.subscribe((listMenus: any[])=>{
|
||||||
console.log(listMenus);
|
console.log(listMenus);
|
||||||
this.listMenus=listMenus;
|
this.listMenus=listMenus; //socke les objets récupérés de la base
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -129,7 +122,6 @@ this.menusService.getMenu()?.subscribe((listMenus: any[])=>{
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
this.upMenuForm = this.fb.group(
|
this.upMenuForm = this.fb.group(
|
||||||
{
|
{
|
||||||
dateMenuFc: new FormControl('',[Validators.required]),
|
dateMenuFc: new FormControl('',[Validators.required]),
|
||||||
@ -141,7 +133,7 @@ this.menusService.getMenu()?.subscribe((listMenus: any[])=>{
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//gestion de la fenêtre modale, open au click
|
||||||
open(content: any) {
|
open(content: any) {
|
||||||
this.modalService.open(content,
|
this.modalService.open(content,
|
||||||
{ariaLabelledBy: 'menu'}).result.then((result)=> {
|
{ariaLabelledBy: 'menu'}).result.then((result)=> {
|
||||||
@ -152,6 +144,7 @@ open(content: any) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//gestion de la fenêtre modale, mode de fermeture
|
||||||
private getDismissReason(reason: any): string {
|
private getDismissReason(reason: any): string {
|
||||||
if (reason === ModalDismissReasons.ESC) {
|
if (reason === ModalDismissReasons.ESC) {
|
||||||
return 'by pressing ESC';
|
return 'by pressing ESC';
|
||||||
@ -161,6 +154,11 @@ open(content: any) {
|
|||||||
return `with: ${reason}`;
|
return `with: ${reason}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//fermeture du message d'alerte quand un menu est supprimé
|
||||||
|
onClickCloseAlert(){
|
||||||
|
this.isShow = ! this.isShow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ export class DeconnexionComponent implements OnInit {
|
|||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//au click on fait appel au ServiceToken pour supprimer le token et on redirige l'utilisateur
|
||||||
onClickDeco(){
|
onClickDeco(){
|
||||||
this.tokenService.eraseToken();
|
this.tokenService.eraseToken();
|
||||||
this.router.navigate(['accueil']);
|
this.router.navigate(['accueil']);
|
||||||
|
@ -22,8 +22,9 @@ export class SigninComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit(): void {}
|
ngOnInit(): void {}
|
||||||
|
|
||||||
|
//quand on se connecte - appel au service d'authentification
|
||||||
public onSubmit(submittedForm: any): void {
|
public onSubmit(submittedForm: any): void {
|
||||||
console.log(submittedForm.form.value);
|
|
||||||
const email = submittedForm.form.value['email'];
|
const email = submittedForm.form.value['email'];
|
||||||
const password = submittedForm.form.value['password'];
|
const password = submittedForm.form.value['password'];
|
||||||
if (email !== '' && password !== '') {
|
if (email !== '' && password !== '') {
|
||||||
@ -32,19 +33,20 @@ export class SigninComponent implements OnInit {
|
|||||||
next: resp => {
|
next: resp => {
|
||||||
this.router.navigate(['tableau-de-bord']);
|
this.router.navigate(['tableau-de-bord']);
|
||||||
},
|
},
|
||||||
error: err => {
|
error: err => { //gestion des alertes si les id/pwd sont faux
|
||||||
this.alert={"type":"danger", "content":"Le login ou paswword est invalide"};
|
this.alert={"type":"danger", "content":"Le login ou paswword est invalide"};
|
||||||
this.isShow = true;
|
this.isShow = true;
|
||||||
},
|
},
|
||||||
complete: () => console.log('DONE!')
|
complete: () => console.log('DONE!')
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// afficher une erreur à l'utilisateur
|
// affiche une erreur à l'utilisateur
|
||||||
this.alert={"type":"danger", "content":"Le login ou password est invalide"};
|
this.alert={"type":"danger", "content":"Le login ou password est invalide"};
|
||||||
this.isShow = true;
|
this.isShow = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//fermeture du message d'alerte
|
||||||
onClickCloseAlert(){
|
onClickCloseAlert(){
|
||||||
console.log('fermeture');
|
console.log('fermeture');
|
||||||
this.isShow = ! this.isShow;
|
this.isShow = ! this.isShow;
|
||||||
|
@ -92,7 +92,7 @@ export class PageAgendaComponent implements AfterViewInit {
|
|||||||
{
|
{
|
||||||
next: result => {
|
next: result => {
|
||||||
this.viewChange();
|
this.viewChange();
|
||||||
this.alert={"type":"success", "content":"L'évènement à bien été modifié"};
|
this.alert={"type":"success", "content":"L'évènement a bien été modifié"};
|
||||||
this.isShow = true;
|
this.isShow = true;
|
||||||
},
|
},
|
||||||
error: err => {
|
error: err => {
|
||||||
@ -105,7 +105,7 @@ export class PageAgendaComponent implements AfterViewInit {
|
|||||||
);
|
);
|
||||||
}else{
|
}else{
|
||||||
this.viewChange();
|
this.viewChange();
|
||||||
this.alert={"type":"danger", "content":"Vous ne pouvez pas modifié cet évènement !"};
|
this.alert={"type":"danger", "content":"Vous ne pouvez pas modifier cet évènement !"};
|
||||||
this.isShow = true;
|
this.isShow = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,9 +41,7 @@ export class PageForgotPasswordComponent implements OnInit {
|
|||||||
};
|
};
|
||||||
|
|
||||||
console.log(membre);
|
console.log(membre);
|
||||||
// this.authService.forgotPassword(membre).subscribe((resp) => {
|
|
||||||
// console.log('----'+resp)
|
|
||||||
// });
|
|
||||||
|
|
||||||
this.authService.forgotPassword(membre).subscribe(
|
this.authService.forgotPassword(membre).subscribe(
|
||||||
{
|
{
|
||||||
|
@ -36,16 +36,6 @@ export class PageResetPasswordComponent implements OnInit {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public onSubmit(submittedForm: any): void {
|
|
||||||
// console.log(submittedForm.form.value);
|
|
||||||
// const password = submittedForm.form.value['password'];
|
|
||||||
// console.log(email);
|
|
||||||
// this.authService.resetPassword(email, password).subscribe((resp: any) => {
|
|
||||||
// window.alert("Votre mot de passe est bien ré-initialisé !")
|
|
||||||
// this.router.navigate(['accueil']);
|
|
||||||
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
public onSubmit(): void {
|
public onSubmit(): void {
|
||||||
console.log('value : ', this.resetForm.value);
|
console.log('value : ', this.resetForm.value);
|
||||||
|
@ -14,7 +14,6 @@ export class AuthInterceptor implements HttpInterceptor {
|
|||||||
constructor(private tokenService: TokenService) {}
|
constructor(private tokenService: TokenService) {}
|
||||||
|
|
||||||
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
|
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
|
||||||
console.log('Coucou je suis le videur ! ');
|
|
||||||
const token = this.tokenService.getToken();
|
const token = this.tokenService.getToken();
|
||||||
if(token) {
|
if(token) {
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ export class AuthService {
|
|||||||
this.tokenKey = environment.tokenKey;
|
this.tokenKey = environment.tokenKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//methode pour s'inscrire - on passe l'objet en entier
|
||||||
signup(membre: Membre): Observable<any> {
|
signup(membre: Membre): Observable<any> {
|
||||||
console.log(membre);
|
console.log(membre);
|
||||||
|
|
||||||
@ -26,17 +27,15 @@ export class AuthService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//methode pour se connecter - on passe id et pwd
|
||||||
signin(email: string, password: string): Observable<any> {
|
signin(email: string, password: string): Observable<any> {
|
||||||
const body = {
|
const body = {
|
||||||
email: email,
|
email: email,
|
||||||
password: password,
|
password: password,
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log('Mon body : ', body);
|
|
||||||
return this.http.post(`${this.apiUrl}/membres/sign-in`, body).pipe(
|
return this.http.post(`${this.apiUrl}/membres/sign-in`, body).pipe(
|
||||||
map((x: any) => {
|
map((x: any) => {
|
||||||
console.log('Service : ', x.token);
|
|
||||||
localStorage.setItem(this.tokenKey, x.token);
|
localStorage.setItem(this.tokenKey, x.token);
|
||||||
return x; // permet de renvoyer la réponse à l'initiateur (page Signin) après le traitement du map
|
return x; // permet de renvoyer la réponse à l'initiateur (page Signin) après le traitement du map
|
||||||
})
|
})
|
||||||
@ -44,10 +43,12 @@ export class AuthService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//permet d'envoyer un mail à l'utilisateur pour qu'il change son pwd
|
||||||
forgotPassword(membre: Membre): Observable<any> {
|
forgotPassword(membre: Membre): Observable<any> {
|
||||||
return this.http.post(`${this.apiUrl}/membres/forgot-password`, membre, {responseType: "text"});
|
return this.http.post(`${this.apiUrl}/membres/forgot-password`, membre, {responseType: "text"});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//permet à l'utilisateur de changer son pwd
|
||||||
resetPassword(membre: Membre, uuid:string): Observable<any> {
|
resetPassword(membre: Membre, uuid:string): Observable<any> {
|
||||||
console.log('--'+uuid+' / '+membre);
|
console.log('--'+uuid+' / '+membre);
|
||||||
return this.http.put(`${this.apiUrl}/membres/reset-password/${uuid}`, membre);
|
return this.http.put(`${this.apiUrl}/membres/reset-password/${uuid}`, membre);
|
||||||
|
@ -19,7 +19,7 @@ apiUrl: string;
|
|||||||
this.apiUrl = environment.apiUrl;
|
this.apiUrl = environment.apiUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
//on affiche les menus d'une team
|
//on affiche les menus d'une team - on récupère l'id de la team dans le token
|
||||||
getMenu(): Observable<any> | void {
|
getMenu(): Observable<any> | void {
|
||||||
const teamId = this.tokenService.getCurrentTeamId();
|
const teamId = this.tokenService.getCurrentTeamId();
|
||||||
if (teamId){
|
if (teamId){
|
||||||
@ -33,6 +33,7 @@ apiUrl: string;
|
|||||||
return this.http.get(`${this.apiUrl}/menus/` + id);
|
return this.http.get(`${this.apiUrl}/menus/` + id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//permet d'ajouter un menu et de lui attribuer l'id de la bonne team
|
||||||
addMenu(menu: Menu): Observable<any> | void {
|
addMenu(menu: Menu): Observable<any> | void {
|
||||||
console.log(menu);
|
console.log(menu);
|
||||||
const teamId = this.tokenService.getCurrentTeamId();
|
const teamId = this.tokenService.getCurrentTeamId();
|
||||||
@ -44,11 +45,12 @@ apiUrl: string;
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//suppression d'un menu
|
||||||
deleteMenu(id:number): Observable<any> {
|
deleteMenu(id:number): Observable<any> {
|
||||||
return this.http.delete(`${this.apiUrl}/menus/delete/${id}`, {responseType:"text"});
|
return this.http.delete(`${this.apiUrl}/menus/delete/${id}`, {responseType:"text"});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//modification d'un menu - avec id du menu et id de la team
|
||||||
updateMenu(menu: Menu, id:number): Observable<any> | void {
|
updateMenu(menu: Menu, id:number): Observable<any> | void {
|
||||||
const teamId = this.tokenService.getCurrentTeamId();
|
const teamId = this.tokenService.getCurrentTeamId();
|
||||||
if (teamId){
|
if (teamId){
|
||||||
|
@ -11,6 +11,7 @@ tokenKey = environment.tokenKey;
|
|||||||
|
|
||||||
constructor() { }
|
constructor() { }
|
||||||
|
|
||||||
|
//récupère le token
|
||||||
public getToken(): string | null {
|
public getToken(): string | null {
|
||||||
const token = localStorage.getItem(this.tokenKey);
|
const token = localStorage.getItem(this.tokenKey);
|
||||||
if(token) {
|
if(token) {
|
||||||
@ -20,17 +21,18 @@ tokenKey = environment.tokenKey;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//supprime le token
|
||||||
public eraseToken(): string | null {
|
public eraseToken(): string | null {
|
||||||
const token = localStorage.getItem(this.tokenKey);
|
const token = localStorage.getItem(this.tokenKey);
|
||||||
if(token) {
|
if(token) {
|
||||||
localStorage.removeItem(this.tokenKey);
|
localStorage.removeItem(this.tokenKey); //.clear() supprime tous les token du localStorage !
|
||||||
return token;
|
return token; //utiliser remove()
|
||||||
}else {
|
}else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//recupère l'id du membre stocké dans le token
|
||||||
public getCurrentMembreId(): number | null {
|
public getCurrentMembreId(): number | null {
|
||||||
const token = this.getToken();
|
const token = this.getToken();
|
||||||
if(token) {
|
if(token) {
|
||||||
@ -42,6 +44,7 @@ tokenKey = environment.tokenKey;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//recupère l'id de la team stocké dans le token
|
||||||
public getCurrentTeamId(): number | null {
|
public getCurrentTeamId(): number | null {
|
||||||
const token = this.getToken();
|
const token = this.getToken();
|
||||||
if(token){
|
if(token){
|
||||||
@ -55,6 +58,7 @@ return null;
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//recupère le role du membre stocké dans le token
|
||||||
public getRole(): string | null {
|
public getRole(): string | null {
|
||||||
const token = this.getToken();
|
const token = this.getToken();
|
||||||
if(token){
|
if(token){
|
||||||
|
Loading…
Reference in New Issue
Block a user