X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Fauth%2Fauth.service.ts;h=0aa276c693b4d866baecd6818f54741487d51991;hb=1e1265b36c09df1465aa2b4866815c957b6a532e;hp=4a8814c4e4c5dc6e077952606380fe1f911cd73c;hpb=127d96b969891a73d76e257581e5fd81cd867480;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts index 4a8814c4e..0aa276c69 100644 --- a/client/src/app/core/auth/auth.service.ts +++ b/client/src/app/core/auth/auth.service.ts @@ -3,6 +3,8 @@ import { Router } from '@angular/router' import { Observable } from 'rxjs/Observable' import { Subject } from 'rxjs/Subject' import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http' +import { ReplaySubject } from 'rxjs/ReplaySubject' +import 'rxjs/add/operator/do' import 'rxjs/add/operator/map' import 'rxjs/add/operator/mergeMap' import 'rxjs/add/observable/throw' @@ -11,11 +13,17 @@ import { NotificationsService } from 'angular2-notifications' import { AuthStatus } from './auth-status.model' import { AuthUser } from './auth-user.model' -import { OAuthClientLocal, UserRole, UserRefreshToken } from '../../../../../shared' +import { + OAuthClientLocal, + UserRole, + UserRefreshToken, + VideoChannel, + User as UserServerModel +} from '../../../../../shared' // Do not use the barrel (dependency loop) import { RestExtractor } from '../../shared/rest' import { UserLogin } from '../../../../../shared/models/users/user-login.model' -import { User } from '../../shared/users/user.model' +import { UserConstructorHash } from '../../shared/users/user.model' interface UserLoginWithUsername extends UserLogin { access_token: string @@ -33,6 +41,12 @@ interface UserLoginWithUserInformation extends UserLogin { role: UserRole displayNSFW: boolean email: string + videoQuota: number + account: { + id: number + uuid: string + } + videoChannels: VideoChannel[] } @Injectable() @@ -42,6 +56,7 @@ export class AuthService { private static BASE_USER_INFORMATION_URL = API_URL + '/api/v1/users/me' loginChangedSource: Observable + userInformationLoaded = new ReplaySubject(1) private clientId: string private clientSecret: string @@ -114,12 +129,6 @@ export class AuthService { return this.user } - isAdmin () { - if (this.user === null) return false - - return this.user.isAdmin() - } - isLoggedIn () { return !!this.getAccessToken() } @@ -193,27 +202,33 @@ export class AuthService { } this.mergeUserInformation(obj) - .subscribe( - res => { - this.user.displayNSFW = res.displayNSFW - this.user.role = res.role - - this.user.save() - } - ) + .do(() => this.userInformationLoaded.next(true)) + .subscribe( + res => { + this.user.displayNSFW = res.displayNSFW + this.user.role = res.role + this.user.videoChannels = res.videoChannels + this.user.account = res.account + + this.user.save() + } + ) } private mergeUserInformation (obj: UserLoginWithUsername): Observable { // User is not loaded yet, set manually auth header const headers = new HttpHeaders().set('Authorization', `${obj.token_type} ${obj.access_token}`) - return this.http.get(AuthService.BASE_USER_INFORMATION_URL, { headers }) + return this.http.get(AuthService.BASE_USER_INFORMATION_URL, { headers }) .map(res => { const newProperties = { - id: res.id as number, - role: res.role as UserRole, - displayNSFW: res.displayNSFW as boolean, - email: res.email as string + id: res.id, + role: res.role, + displayNSFW: res.displayNSFW, + email: res.email, + videoQuota: res.videoQuota, + account: res.account, + videoChannels: res.videoChannels } return Object.assign(obj, newProperties) @@ -222,18 +237,23 @@ export class AuthService { } private handleLogin (obj: UserLoginWithUserInformation) { - const id = obj.id - const username = obj.username - const role = obj.role - const email = obj.email - const displayNSFW = obj.displayNSFW + const hashUser: UserConstructorHash = { + id: obj.id, + username: obj.username, + role: obj.role, + email: obj.email, + displayNSFW: obj.displayNSFW, + videoQuota: obj.videoQuota, + videoChannels: obj.videoChannels, + account: obj.account + } const hashTokens = { accessToken: obj.access_token, tokenType: obj.token_type, refreshToken: obj.refresh_token } - this.user = new AuthUser({ id, username, role, displayNSFW, email }, hashTokens) + this.user = new AuthUser(hashUser, hashTokens) this.user.save() this.setStatus(AuthStatus.LoggedIn)