diff --git a/authorizer-app/package.json b/authorizer-app/package.json index 4b3a715f..ab3ac09a 100644 --- a/authorizer-app/package.json +++ b/authorizer-app/package.json @@ -34,7 +34,7 @@ "bootstrap": "^4.1.3", "core-js": "^2.5.4", "font-awesome": "^4.7.0", - "rxjs": "~6.2.0", + "rxjs": "^6.5.4", "zone.js": "~0.8.26" }, "devDependencies": { diff --git a/authorizer-app/src/app/components/rest-source-authorization/rest-source-user-list.component.ts b/authorizer-app/src/app/components/rest-source-authorization/rest-source-user-list.component.ts index 589df6bd..fb2fd592 100644 --- a/authorizer-app/src/app/components/rest-source-authorization/rest-source-user-list.component.ts +++ b/authorizer-app/src/app/components/rest-source-authorization/rest-source-user-list.component.ts @@ -1,5 +1,6 @@ -import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core'; -import { MatPaginator, MatSort, MatTableDataSource} from '@angular/material'; +import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core'; +import { MatPaginator, MatSort, MatTableDataSource } from '@angular/material'; + import { RestSourceUser } from '../../models/rest-source-user.model'; import { RestSourceUserService } from '../../services/rest-source-user.service'; @@ -9,7 +10,7 @@ import { RestSourceUserService } from '../../services/rest-source-user.service'; styleUrls: ['./rest-source-user-list.component.css'] }) export class RestSourceUserListComponent implements OnInit, AfterViewInit { - + displayedColumns = ['id', 'projectId', 'userId', 'sourceId', 'startDate', 'endDate', 'externalUserId', 'authorized', 'edit', 'delete']; @@ -22,7 +23,7 @@ export class RestSourceUserListComponent implements OnInit, AfterViewInit { dataSource: MatTableDataSource; - constructor(private restSourceUserService: RestSourceUserService) { } + constructor(private restSourceUserService: RestSourceUserService) {} ngOnInit() { this.loadAllRestSourceUsers(); @@ -45,13 +46,15 @@ export class RestSourceUserListComponent implements OnInit, AfterViewInit { } private loadAllRestSourceUsers() { - this.restSourceUserService.getAllUsers().subscribe((data: any) => { - this.restSourceUsers = data.users; + this.restSourceUserService.getAllUsersFromAssignedProjects().subscribe( + (users: any) => { + this.restSourceUsers = users; this.dataSource.data = this.restSourceUsers; }, () => { this.errorMessage = 'Cannot load registered users!'; - }); + } + ); } removeDevice(restSourceUser: RestSourceUser) { @@ -59,5 +62,4 @@ export class RestSourceUserListComponent implements OnInit, AfterViewInit { this.loadAllRestSourceUsers(); }); } - } diff --git a/authorizer-app/src/app/models/auth.model.ts b/authorizer-app/src/app/models/auth.model.ts index eec062e5..431177a0 100644 --- a/authorizer-app/src/app/models/auth.model.ts +++ b/authorizer-app/src/app/models/auth.model.ts @@ -18,4 +18,5 @@ export interface User { username: string; name: string; roles: string[]; + projects?: string[]; } diff --git a/authorizer-app/src/app/services/auth.service.ts b/authorizer-app/src/app/services/auth.service.ts index 55eca558..dce12de8 100644 --- a/authorizer-app/src/app/services/auth.service.ts +++ b/authorizer-app/src/app/services/auth.service.ts @@ -14,27 +14,31 @@ export class AuthService { constructor(private http: HttpClient) {} + static basicCredentials(user: string, password: string): string { + return 'Basic ' + btoa(`${user}:${password}`); + } + static getToken(): string { return localStorage.getItem(storageItems.token); } - static getUser(): User { + getUser(): User { const user = localStorage.getItem(storageItems.user); return JSON.parse(user); } - static basicCredentials(user: string, password: string): string { - return 'Basic ' + btoa(`${user}:${password}`); - } - getAuthData(): AuthData { const token = AuthService.getToken(); - const user = AuthService.getUser(); + const user = this.getUser(); return { token, user }; } setAuthData({ token, user }) { localStorage.setItem(storageItems.token, token); + this.setUser(user); + } + + setUser(user) { localStorage.setItem(storageItems.user, JSON.stringify(user)); } @@ -44,7 +48,10 @@ export class AuthService { } login(code) { - return this.authenticateUser(code).pipe(map(res => this.setAuthData(res))); + return this.authenticateUser(code).pipe( + map(res => this.setAuthData(res)), + map(() => this.getProjectsAssignedToUser(this.getUser())) + ); } authenticateUser(code) { @@ -84,4 +91,16 @@ export class AuthService { .set('redirect_uri', window.location.href.split('?')[0]) .set('code', code); } + + getProjectsAssignedToUser(user: User) { + return this.http + .get(`${environment.API_URI}/users/${user.username}/projects`) + .subscribe(projects => + this.setUser( + Object.assign({}, user, { + projects: projects.map(p => p.projectName) + }) + ) + ); + } } diff --git a/authorizer-app/src/app/services/rest-source-user.service.ts b/authorizer-app/src/app/services/rest-source-user.service.ts index 78c20c89..ccaa8461 100644 --- a/authorizer-app/src/app/services/rest-source-user.service.ts +++ b/authorizer-app/src/app/services/rest-source-user.service.ts @@ -1,21 +1,33 @@ -import {Injectable} from '@angular/core'; -import {HttpClient, HttpParams} from '@angular/common/http'; -import {Observable} from 'rxjs/internal/Observable'; -import {RestSourceUser} from '../models/rest-source-user.model'; -import {environment} from '../../environments/environment'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { map } from 'rxjs/operators'; + +import { AuthService } from './auth.service'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/internal/Observable'; +import { RestSourceUser } from '../models/rest-source-user.model'; +import { environment } from '../../environments/environment'; @Injectable({ providedIn: 'root' }) export class RestSourceUserService { - private serviceUrl = environment.BACKEND_BASE_URL + '/users'; - constructor(private http: HttpClient) { - } + constructor(private http: HttpClient, private authService: AuthService) {} getAllUsers(): Observable { - return this.http.get(this.serviceUrl); + return this.http.get(this.serviceUrl).pipe(map((res: any) => res.users)); + } + + getAllUsersByProjectIds(projectIds: string[]): Observable { + return this.getAllUsers().pipe( + map(res => res.filter(user => projectIds.includes(user.projectId))) + ); + } + + getAllUsersFromAssignedProjects() { + const projects = this.authService.getUser().projects; + return this.getAllUsersByProjectIds(projects); } updateUser(sourceUser: RestSourceUser): Observable { @@ -38,6 +50,4 @@ export class RestSourceUserService { deleteUser(userId: string): Observable { return this.http.delete(this.serviceUrl + '/' + userId); } - - } diff --git a/authorizer-app/src/environments/environment.prod.ts b/authorizer-app/src/environments/environment.prod.ts index bd5bc174..7a1246aa 100644 --- a/authorizer-app/src/environments/environment.prod.ts +++ b/authorizer-app/src/environments/environment.prod.ts @@ -9,5 +9,6 @@ export const environment = { scope: 'SOURCETYPE.READ PROJECT.READ SOURCE.READ SUBJECT.READ MEASUREMENT.READ' }, - AUTH_URI: 'http://localhost:8080/oauth' + AUTH_URI: 'http://localhost:8080/oauth', + API_URI: 'http://localhost:8080/api' }; diff --git a/authorizer-app/src/environments/environment.ts b/authorizer-app/src/environments/environment.ts index 2ecca560..2519bb1c 100644 --- a/authorizer-app/src/environments/environment.ts +++ b/authorizer-app/src/environments/environment.ts @@ -13,7 +13,8 @@ export const environment = { scope: 'SOURCETYPE.READ PROJECT.READ SOURCE.READ SUBJECT.READ MEASUREMENT.READ' }, - AUTH_URI: 'http://localhost:8080/oauth' + AUTH_URI: 'http://localhost:8080/oauth', + API_URI: 'http://localhost:8080/api' }; /* diff --git a/authorizer-app/src/index.html b/authorizer-app/src/index.html index 8077f18b..d1bc1dcb 100644 --- a/authorizer-app/src/index.html +++ b/authorizer-app/src/index.html @@ -1,15 +1,18 @@ - + - - - AuthorizerApp - + + + AuthorizerApp + - - - - - - - + + + + + + +