diff --git a/Front/skydivelogs-app/src/app/app.component.ts b/Front/skydivelogs-app/src/app/app.component.ts index 2faf334..57d3f34 100644 --- a/Front/skydivelogs-app/src/app/app.component.ts +++ b/Front/skydivelogs-app/src/app/app.component.ts @@ -18,14 +18,10 @@ export class AppComponent implements OnInit { public currentUser: User; public version: string; - constructor( - private router: Router, - private authenticationService: AuthenticationService, - private serviceComm: ServiceComm - ) { - this.authenticationService.currentUser.subscribe( - x => (this.currentUser = x) - ); + constructor(private router: Router, + private authenticationService: AuthenticationService, + private serviceComm: ServiceComm) { + this.authenticationService.currentUser.subscribe(user => { this.currentUser = user; }); ConfigurationHelper.settings.subscribe(settings => { diff --git a/Front/skydivelogs-app/src/app/app.module.ts b/Front/skydivelogs-app/src/app/app.module.ts index 6578800..7bc2429 100644 --- a/Front/skydivelogs-app/src/app/app.module.ts +++ b/Front/skydivelogs-app/src/app/app.module.ts @@ -68,42 +68,42 @@ const appRoutes: Routes = [ { path: "summary", component: SummaryComponent, - canActivate: [AuthGuardService], + canActivate: [AuthGuardService] }, { path: "jumps", component: ListOfJumpsComponent, - canActivate: [AuthGuardService], + canActivate: [AuthGuardService] }, { path: "dzs", component: ListOfDzsComponent, - canActivate: [AuthGuardService], + canActivate: [AuthGuardService] }, { path: "newjump", component: NewJumpComponent, - canActivate: [AuthGuardService], + canActivate: [AuthGuardService] }, { path: "aircrafts", component: ListOfAircraftsComponent, - canActivate: [AuthGuardService], + canActivate: [AuthGuardService] }, { path: "jumpTypes", component: ListOfJumpTypesComponent, - canActivate: [AuthGuardService], + canActivate: [AuthGuardService] }, { path: "gears", component: ListOfGearsComponent, - canActivate: [AuthGuardService], + canActivate: [AuthGuardService] }, { path: "user", component: UserProfileComponent, - canActivate: [AuthGuardService], + canActivate: [AuthGuardService] }, { path: "login", component: LoginComponent }, diff --git a/Front/skydivelogs-app/src/app/create-user/create-user.component.ts b/Front/skydivelogs-app/src/app/create-user/create-user.component.ts index 48832c5..0b4a43d 100644 --- a/Front/skydivelogs-app/src/app/create-user/create-user.component.ts +++ b/Front/skydivelogs-app/src/app/create-user/create-user.component.ts @@ -58,7 +58,6 @@ export class CreateUserComponent implements OnInit { this.invalidForm = false; this.submitted = true; - // stop here if form is invalid if (this.createForm.invalid) { this.invalidForm = true; return; diff --git a/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.html b/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.html index 32993be..ce66488 100644 --- a/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.html +++ b/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.html @@ -1,6 +1,6 @@
- + diff --git a/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.ts b/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.ts index 63b0dea..1b9041a 100644 --- a/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.ts +++ b/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.ts @@ -3,11 +3,12 @@ import { MatPaginator } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { MatDialog } from '@angular/material/dialog'; -import { AircraftResp } from '../../models/aircraft'; import { AircraftService } from '../../services/aircraft.service'; import { ServiceComm } from '../../services/service-comm.service'; +import { AuthenticationService } from '../../services/authentication.service'; import { NewAircraftComponent } from '../new-aircraft/new-aircraft.component'; import { AddAction } from '../../models/add-action.enum'; +import { AircraftResp } from '../../models/aircraft'; @Component({ selector: 'app-list-of-aircrafts', @@ -18,13 +19,15 @@ export class ListOfAircraftsComponent implements OnInit { public displayedColumns: Array = ['id', 'name', 'imageData']; public dataSourceTable: MatTableDataSource; public resultsLength = 0; + public isUserAdmin: boolean; @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; - constructor( - private serviceApi: AircraftService, - private serviceComm: ServiceComm, - public dialog: MatDialog - ) { } + constructor(private serviceApi: AircraftService, + private serviceComm: ServiceComm, + private authenticationService: AuthenticationService, + public dialog: MatDialog) { + this.isUserAdmin = this.authenticationService.currentUserValue.IsAdmin; + } ngOnInit() { this.serviceComm.refreshRequest.subscribe(action => { diff --git a/Front/skydivelogs-app/src/app/list-of-dzs/list-of-dzs.component.html b/Front/skydivelogs-app/src/app/list-of-dzs/list-of-dzs.component.html index 3ea27e3..b6747d6 100644 --- a/Front/skydivelogs-app/src/app/list-of-dzs/list-of-dzs.component.html +++ b/Front/skydivelogs-app/src/app/list-of-dzs/list-of-dzs.component.html @@ -1,6 +1,6 @@
- +
diff --git a/Front/skydivelogs-app/src/app/list-of-dzs/list-of-dzs.component.ts b/Front/skydivelogs-app/src/app/list-of-dzs/list-of-dzs.component.ts index 82b2b9f..21c70e6 100644 --- a/Front/skydivelogs-app/src/app/list-of-dzs/list-of-dzs.component.ts +++ b/Front/skydivelogs-app/src/app/list-of-dzs/list-of-dzs.component.ts @@ -7,6 +7,7 @@ import { AddAction } from '../../models/add-action.enum'; import { DropZoneResp } from '../../models/dropzone'; import { DropzoneService } from '../../services/dropzone.service'; import { ServiceComm } from '../../services/service-comm.service'; +import { AuthenticationService } from '../../services/authentication.service'; import { NewDropZoneComponent } from '../new-drop-zone/new-drop-zone.component'; @Component({ @@ -23,14 +24,16 @@ export class ListOfDzsComponent implements OnInit { 'type', ]; public dataSourceTable: MatTableDataSource; + public isUserAdmin: boolean; public resultsLength = 0; @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; - constructor( - private serviceApi: DropzoneService, - private serviceComm: ServiceComm, - public dialog: MatDialog - ) { } + constructor(private serviceApi: DropzoneService, + private serviceComm: ServiceComm, + private authenticationService: AuthenticationService, + public dialog: MatDialog) { + this.isUserAdmin = this.authenticationService.currentUserValue.IsAdmin; + } ngOnInit() { this.serviceComm.refreshRequest.subscribe((action) => { diff --git a/Front/skydivelogs-app/src/app/list-of-jump-types/list-of-jump-types.component.html b/Front/skydivelogs-app/src/app/list-of-jump-types/list-of-jump-types.component.html index 8941959..532a90d 100644 --- a/Front/skydivelogs-app/src/app/list-of-jump-types/list-of-jump-types.component.html +++ b/Front/skydivelogs-app/src/app/list-of-jump-types/list-of-jump-types.component.html @@ -1,6 +1,6 @@
- +
diff --git a/Front/skydivelogs-app/src/app/list-of-jump-types/list-of-jump-types.component.ts b/Front/skydivelogs-app/src/app/list-of-jump-types/list-of-jump-types.component.ts index 06fb945..e0e13ab 100644 --- a/Front/skydivelogs-app/src/app/list-of-jump-types/list-of-jump-types.component.ts +++ b/Front/skydivelogs-app/src/app/list-of-jump-types/list-of-jump-types.component.ts @@ -7,6 +7,7 @@ import { AddAction } from "../../models/add-action.enum"; import { JumpTypeResp } from "../../models/jumpType"; import { JumpTypeService } from "../../services/jump-type.service"; import { ServiceComm } from "../../services/service-comm.service"; +import { AuthenticationService } from '../../services/authentication.service'; import { NewJumpTypeComponent } from "../new-jump-type/new-jump-type.component"; @Component({ @@ -17,14 +18,16 @@ import { NewJumpTypeComponent } from "../new-jump-type/new-jump-type.component"; export class ListOfJumpTypesComponent implements OnInit { public displayedColumns: Array = ["id", "name"]; public dataSourceTable: MatTableDataSource; + public isUserAdmin: boolean; public resultsLength = 0; @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; - constructor( - private serviceApi: JumpTypeService, - private serviceComm: ServiceComm, - public dialog: MatDialog - ) {} + constructor(private serviceApi: JumpTypeService, + private serviceComm: ServiceComm, + private authenticationService: AuthenticationService, + public dialog: MatDialog) { + this.isUserAdmin = this.authenticationService.currentUserValue.IsAdmin; + } ngOnInit() { this.serviceComm.refreshRequest.subscribe(action => { diff --git a/Front/skydivelogs-app/src/app/login-user/login-user.component.ts b/Front/skydivelogs-app/src/app/login-user/login-user.component.ts index 6bbe913..dd815bd 100644 --- a/Front/skydivelogs-app/src/app/login-user/login-user.component.ts +++ b/Front/skydivelogs-app/src/app/login-user/login-user.component.ts @@ -43,7 +43,7 @@ export class LoginUserComponent implements OnInit, AfterViewInit { password: [ '', [ - Validators.required /*, Validators.pattern("^[A-Za-z0-9_-]{8,15}$")*/ + Validators.required ] ] }, diff --git a/Front/skydivelogs-app/src/models/stats.ts b/Front/skydivelogs-app/src/models/stats.ts index bf8349c..6879c8e 100644 --- a/Front/skydivelogs-app/src/models/stats.ts +++ b/Front/skydivelogs-app/src/models/stats.ts @@ -85,10 +85,8 @@ export class StatsByYearResp { } export class StatsForLastYearResp { - constructor( - dataByDz: Array, - dataByJumpType: Array - ) { + constructor(dataByDz: Array, + dataByJumpType: Array) { this.byDz = new Array(); this.byJumpType = new Array(); @@ -101,10 +99,8 @@ export class StatsForLastYearResp { } export class StatsForLastMonthResp { - constructor( - dataByDz: Array, - dataByJumpType: Array - ) { + constructor(dataByDz: Array, + dataByJumpType: Array) { this.byDz = new Array(); this.byJumpType = new Array(); diff --git a/Front/skydivelogs-app/src/models/user.ts b/Front/skydivelogs-app/src/models/user.ts index 4034f76..df89a32 100644 --- a/Front/skydivelogs-app/src/models/user.ts +++ b/Front/skydivelogs-app/src/models/user.ts @@ -5,6 +5,9 @@ export class User { firstName: string; lastName: string; email: string; + roles: string; authdata?: string; token?: string; + + get IsAdmin() { return this.roles === "admin"; } } diff --git a/Front/skydivelogs-app/src/services/auth-guard.service.ts b/Front/skydivelogs-app/src/services/auth-guard.service.ts index e2aa522..e715b2b 100644 --- a/Front/skydivelogs-app/src/services/auth-guard.service.ts +++ b/Front/skydivelogs-app/src/services/auth-guard.service.ts @@ -1,23 +1,14 @@ import { Injectable } from "@angular/core"; -import { - CanActivate, - Router, - ActivatedRouteSnapshot, - RouterStateSnapshot -} from "@angular/router"; +import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from "@angular/router"; import { AuthenticationService } from "./authentication.service"; @Injectable({ providedIn: "root" }) export class AuthGuardService implements CanActivate { - constructor( - private router: Router, - private authenticationService: AuthenticationService - ) {} + constructor(private router: Router, + private authenticationService: AuthenticationService) {} - public canActivate( - route: ActivatedRouteSnapshot, - state: RouterStateSnapshot - ) { + public canActivate(route: ActivatedRouteSnapshot, + state: RouterStateSnapshot) { const currentUser = this.authenticationService.currentUserValue; if (currentUser) { // logged in so return true @@ -25,10 +16,9 @@ export class AuthGuardService implements CanActivate { } // not logged in so redirect to login page with the return url - this.router.navigate(["/login"], { - skipLocationChange: true, - queryParams: { returnUrl: state.url } - }); + this.router.navigate(["/login"], + {skipLocationChange: true, queryParams: { returnUrl: state.url }}); + return false; } } diff --git a/Front/skydivelogs-app/src/services/authentication.service.ts b/Front/skydivelogs-app/src/services/authentication.service.ts index 4b6de4e..54bc853 100644 --- a/Front/skydivelogs-app/src/services/authentication.service.ts +++ b/Front/skydivelogs-app/src/services/authentication.service.ts @@ -34,36 +34,31 @@ export class AuthenticationService extends BaseService { password: password }; - return this.http - .post(`${this.apiUrl}/User/Authenticate`, bodyLogin, { - headers: this.headers - }) - .pipe( - map(user => { - this.pushUserToken(username, password, user); - return user; - }) - ); + return this.http.post(`${this.apiUrl}/User/Authenticate`, + bodyLogin, + { headers: this.headers }) + .pipe(map(user => { + this.pushUserToken(username, password, user); + return user; + })); } public create(newUser: User) { - return this.http - .post(`${this.apiUrl}/User`, newUser, { - headers: this.headers - }) - .pipe( - map(user => { - this.pushUserToken(newUser.login, newUser.password, user); - return user; - }) - ); + return this.http.post(`${this.apiUrl}/User`, + newUser, + { headers: this.headers }) + .pipe(map(user => { + this.pushUserToken(newUser.login, newUser.password, user); + return user; + })); } - private pushUserToken(login: string, password: string, user: any){ - // store user details and basic auth credentials in local storage to keep user logged in between page refreshes - user.authdata = window.btoa(login + ":" + password); - localStorage.setItem("currentUser", JSON.stringify(user)); - this.currentUserSubject.next(user); + private pushUserToken(login: string, password: string, user: User){ + if (user && user.token) { + user.authdata = window.btoa(login + ":" + password); + localStorage.setItem("currentUser", JSON.stringify(user)); + this.currentUserSubject.next(user); + } } private alwaysLogin() { @@ -73,7 +68,6 @@ export class AuthenticationService extends BaseService { } logout() { - // remove user from local storage to log user out localStorage.removeItem("currentUser"); this.currentUserSubject.next(null); } diff --git a/Front/skydivelogs-app/src/services/base.service.ts b/Front/skydivelogs-app/src/services/base.service.ts index dd374c0..42bd921 100644 --- a/Front/skydivelogs-app/src/services/base.service.ts +++ b/Front/skydivelogs-app/src/services/base.service.ts @@ -18,16 +18,5 @@ export class BaseService { this.apiUrl = tmpApiUrl + '/api'; } }); - - // const config: ConfigurationHelper = injector.get(ConfigurationHelper); - // config.load(environment.env) - // .then(() => { - // let tmpApiUrl : string = ConfigurationHelper.settings.apiUrl; - - // this.headers = new HttpHeaders({ - // 'Access-Control-Allow-Origin': tmpApiUrl - // }); - // this.apiUrl = tmpApiUrl + '/api'; - // }); } }