X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Fusers%2Fuser.service.ts;h=b14bff1930645ac56b82bf2be749b1830c2a0a98;hb=d92d070c91ee73657f2e3a5756954ef63fdba306;hp=f173c356a8ab2ba8c5f89f9e15d97c5cec085ae6;hpb=cce70ae5ca3a2bfd893a7a8c457086151470de70;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/core/users/user.service.ts b/client/src/app/core/users/user.service.ts index f173c356a..b14bff193 100644 --- a/client/src/app/core/users/user.service.ts +++ b/client/src/app/core/users/user.service.ts @@ -1,24 +1,12 @@ -import { SortMeta } from 'primeng/api' -import { from, Observable, of } from 'rxjs' -import { catchError, concatMap, first, map, shareReplay, tap, toArray } from 'rxjs/operators' +import { Observable, of } from 'rxjs' +import { catchError, first, map, shareReplay } from 'rxjs/operators' import { HttpClient, HttpParams } from '@angular/common/http' import { Injectable } from '@angular/core' import { AuthService } from '@app/core/auth' -import { getBytes } from '@root-helpers/bytes' -import { - ActorImage, - ResultList, - User as UserServerModel, - UserCreate, - UserRegister, - UserRole, - UserUpdate, - UserUpdateMe, - UserVideoQuota -} from '@shared/models' +import { ActorImage, User as UserServerModel, UserUpdateMe, UserVideoQuota } from '@shared/models' import { environment } from '../../../environments/environment' -import { RestExtractor, RestPagination, RestService } from '../rest' -import { UserLocalStorageService } from './' +import { RestExtractor } from '../rest' +import { UserLocalStorageService } from './user-local-storage.service' import { User } from './user.model' @Injectable() @@ -26,45 +14,44 @@ export class UserService { static BASE_USERS_URL = environment.apiUrl + '/api/v1/users/' private userCache: { [ id: number ]: Observable } = {} - private signupInThisSession = false constructor ( private authHttp: HttpClient, private authService: AuthService, private restExtractor: RestExtractor, - private restService: RestService, private userLocalStorageService: UserLocalStorageService ) { } - hasSignupInThisSession () { - return this.signupInThisSession - } + // --------------------------------------------------------------------------- - changePassword (currentPassword: string, newPassword: string) { - const url = UserService.BASE_USERS_URL + 'me' - const body: UserUpdateMe = { - currentPassword, - password: newPassword + getUserWithCache (userId: number) { + if (!this.userCache[userId]) { + this.userCache[userId] = this.getUser(userId).pipe(shareReplay()) } - return this.authHttp.put(url, body) - .pipe(catchError(err => this.restExtractor.handleError(err))) + return this.userCache[userId] } - changeEmail (password: string, newEmail: string) { - const url = UserService.BASE_USERS_URL + 'me' - const body: UserUpdateMe = { - currentPassword: password, - email: newEmail - } + getUser (userId: number, withStats = false) { + const params = new HttpParams().append('withStats', withStats + '') - return this.authHttp.put(url, body) + return this.authHttp.get(UserService.BASE_USERS_URL + userId, { params }) .pipe(catchError(err => this.restExtractor.handleError(err))) } // --------------------------------------------------------------------------- + setSignupInThisSession (value: boolean) { + this.signupInThisSession = value + } + + hasSignupInThisSession () { + return this.signupInThisSession + } + + // --------------------------------------------------------------------------- + updateMyAnonymousProfile (profile: UserUpdateMe) { this.userLocalStorageService.setUserInfo(profile) } @@ -78,8 +65,42 @@ export class UserService { return new User(this.userLocalStorageService.getUserInfo()) } + getAnonymousOrLoggedUser () { + if (!this.authService.isLoggedIn()) { + return of(this.getAnonymousUser()) + } + + return this.authService.userInformationLoaded + .pipe( + first(), + map(() => this.authService.getUser()) + ) + } + // --------------------------------------------------------------------------- + changePassword (currentPassword: string, newPassword: string) { + const url = UserService.BASE_USERS_URL + 'me' + const body: UserUpdateMe = { + currentPassword, + password: newPassword + } + + return this.authHttp.put(url, body) + .pipe(catchError(err => this.restExtractor.handleError(err))) + } + + changeEmail (password: string, newEmail: string) { + const url = UserService.BASE_USERS_URL + 'me' + const body: UserUpdateMe = { + currentPassword: password, + email: newEmail + } + + return this.authHttp.put(url, body) + .pipe(catchError(err => this.restExtractor.handleError(err))) + } + updateMyProfile (profile: UserUpdateMe) { const url = UserService.BASE_USERS_URL + 'me' @@ -108,14 +129,6 @@ export class UserService { .pipe(catchError(err => this.restExtractor.handleError(err))) } - signup (userCreate: UserRegister) { - return this.authHttp.post(UserService.BASE_USERS_URL + 'register', userCreate) - .pipe( - tap(() => this.signupInThisSession = true), - catchError(err => this.restExtractor.handleError(err)) - ) - } - getMyVideoQuotaUsed () { const url = UserService.BASE_USERS_URL + 'me/video-quota-used' @@ -141,24 +154,6 @@ export class UserService { .pipe(catchError(res => this.restExtractor.handleError(res))) } - verifyEmail (userId: number, verificationString: string, isPendingEmail: boolean) { - const url = `${UserService.BASE_USERS_URL}/${userId}/verify-email` - const body = { - verificationString, - isPendingEmail - } - - return this.authHttp.post(url, body) - .pipe(catchError(res => this.restExtractor.handleError(res))) - } - - askSendVerifyEmail (email: string) { - const url = UserService.BASE_USERS_URL + '/ask-send-verify-email' - - return this.authHttp.post(url, { email }) - .pipe(catchError(err => this.restExtractor.handleError(err))) - } - autocomplete (search: string): Observable { const url = UserService.BASE_USERS_URL + 'autocomplete' const params = new HttpParams().append('search', search) @@ -167,169 +162,4 @@ export class UserService { .get(url, { params }) .pipe(catchError(res => this.restExtractor.handleError(res))) } - - getNewUsername (oldDisplayName: string, newDisplayName: string, currentUsername: string) { - // Don't update display name, the user seems to have changed it - if (this.displayNameToUsername(oldDisplayName) !== currentUsername) return currentUsername - - return this.displayNameToUsername(newDisplayName) - } - - displayNameToUsername (displayName: string) { - if (!displayName) return '' - - return displayName - .toLowerCase() - .replace(/\s/g, '_') - .replace(/[^a-z0-9_.]/g, '') - } - - /* ###### Admin methods ###### */ - - addUser (userCreate: UserCreate) { - return this.authHttp.post(UserService.BASE_USERS_URL, userCreate) - .pipe(catchError(err => this.restExtractor.handleError(err))) - } - - updateUser (userId: number, userUpdate: UserUpdate) { - return this.authHttp.put(UserService.BASE_USERS_URL + userId, userUpdate) - .pipe(catchError(err => this.restExtractor.handleError(err))) - } - - updateUsers (users: UserServerModel[], userUpdate: UserUpdate) { - return from(users) - .pipe( - concatMap(u => this.authHttp.put(UserService.BASE_USERS_URL + u.id, userUpdate)), - toArray(), - catchError(err => this.restExtractor.handleError(err)) - ) - } - - getUserWithCache (userId: number) { - if (!this.userCache[userId]) { - this.userCache[userId] = this.getUser(userId).pipe(shareReplay()) - } - - return this.userCache[userId] - } - - getUser (userId: number, withStats = false) { - const params = new HttpParams().append('withStats', withStats + '') - return this.authHttp.get(UserService.BASE_USERS_URL + userId, { params }) - .pipe(catchError(err => this.restExtractor.handleError(err))) - } - - getUsers (parameters: { - pagination: RestPagination - sort: SortMeta - search?: string - }): Observable> { - const { pagination, sort, search } = parameters - - let params = new HttpParams() - params = this.restService.addRestGetParams(params, pagination, sort) - - if (search) { - const filters = this.restService.parseQueryStringFilter(search, { - blocked: { - prefix: 'banned:', - isBoolean: true - } - }) - - params = this.restService.addObjectParams(params, filters) - } - - return this.authHttp.get>(UserService.BASE_USERS_URL, { params }) - .pipe( - map(res => this.restExtractor.convertResultListDateToHuman(res)), - map(res => this.restExtractor.applyToResultListData(res, this.formatUser.bind(this))), - catchError(err => this.restExtractor.handleError(err)) - ) - } - - removeUser (usersArg: UserServerModel | UserServerModel[]) { - const users = Array.isArray(usersArg) ? usersArg : [ usersArg ] - - return from(users) - .pipe( - concatMap(u => this.authHttp.delete(UserService.BASE_USERS_URL + u.id)), - toArray(), - catchError(err => this.restExtractor.handleError(err)) - ) - } - - banUsers (usersArg: UserServerModel | UserServerModel[], reason?: string) { - const body = reason ? { reason } : {} - const users = Array.isArray(usersArg) ? usersArg : [ usersArg ] - - return from(users) - .pipe( - concatMap(u => this.authHttp.post(UserService.BASE_USERS_URL + u.id + '/block', body)), - toArray(), - catchError(err => this.restExtractor.handleError(err)) - ) - } - - unbanUsers (usersArg: UserServerModel | UserServerModel[]) { - const users = Array.isArray(usersArg) ? usersArg : [ usersArg ] - - return from(users) - .pipe( - concatMap(u => this.authHttp.post(UserService.BASE_USERS_URL + u.id + '/unblock', {})), - toArray(), - catchError(err => this.restExtractor.handleError(err)) - ) - } - - getAnonymousOrLoggedUser () { - if (!this.authService.isLoggedIn()) { - return of(this.getAnonymousUser()) - } - - return this.authService.userInformationLoaded - .pipe( - first(), - map(() => this.authService.getUser()) - ) - } - - private formatUser (user: UserServerModel) { - let videoQuota - if (user.videoQuota === -1) { - videoQuota = '∞' - } else { - videoQuota = getBytes(user.videoQuota, 0) - } - - const videoQuotaUsed = getBytes(user.videoQuotaUsed, 0) - - let videoQuotaDaily: string - let videoQuotaUsedDaily: string - if (user.videoQuotaDaily === -1) { - videoQuotaDaily = '∞' - videoQuotaUsedDaily = getBytes(0, 0) + '' - } else { - videoQuotaDaily = getBytes(user.videoQuotaDaily, 0) + '' - videoQuotaUsedDaily = getBytes(user.videoQuotaUsedDaily || 0, 0) + '' - } - - const roleLabels: { [ id in UserRole ]: string } = { - [UserRole.USER]: $localize`User`, - [UserRole.ADMINISTRATOR]: $localize`Administrator`, - [UserRole.MODERATOR]: $localize`Moderator` - } - - return Object.assign(user, { - roleLabel: roleLabels[user.role], - videoQuota, - videoQuotaUsed, - rawVideoQuota: user.videoQuota, - rawVideoQuotaUsed: user.videoQuotaUsed, - videoQuotaDaily, - videoQuotaUsedDaily, - rawVideoQuotaDaily: user.videoQuotaDaily, - rawVideoQuotaUsedDaily: user.videoQuotaUsedDaily - }) - } }