X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=client%2Fsrc%2Fapp%2Fshared%2Fusers%2Fuser.service.ts;h=41ee87197d66befebf2ab97a6ade88b0ad2a22af;hb=0ba5f5baade94a051710d9d9d408ac8083c14ac6;hp=d9b81c181f5ae5ec7873a716f149ef8f2090b6ee;hpb=54b3316099ed7d2dfcb6d708fdb686f1e125ce61;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/users/user.service.ts b/client/src/app/shared/users/user.service.ts index d9b81c181..41ee87197 100644 --- a/client/src/app/shared/users/user.service.ts +++ b/client/src/app/shared/users/user.service.ts @@ -1,5 +1,5 @@ -import { Observable } from 'rxjs' -import { catchError, map } from 'rxjs/operators' +import { from, Observable } from 'rxjs' +import { catchError, concatMap, map, toArray } from 'rxjs/operators' import { HttpClient, HttpParams } from '@angular/common/http' import { Injectable } from '@angular/core' import { ResultList, User, UserCreate, UserRole, UserUpdate, UserUpdateMe, UserVideoQuota } from '../../../../../shared' @@ -9,6 +9,7 @@ import { Avatar } from '../../../../../shared/models/avatars/avatar.model' import { SortMeta } from 'primeng/api' import { BytesPipe } from 'ngx-pipes' import { I18n } from '@ngx-translate/i18n-polyfill' +import { UserRegister } from '@shared/models/users/user-register.model' @Injectable() export class UserService { @@ -37,6 +38,20 @@ export class UserService { ) } + 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( + map(this.restExtractor.extractDataBool), + catchError(err => this.restExtractor.handleError(err)) + ) + } + updateMyProfile (profile: UserUpdateMe) { const url = UserService.BASE_USERS_URL + 'me' @@ -64,7 +79,7 @@ export class UserService { .pipe(catchError(err => this.restExtractor.handleError(err))) } - signup (userCreate: UserCreate) { + signup (userCreate: UserRegister) { return this.authHttp.post(UserService.BASE_USERS_URL + 'register', userCreate) .pipe( map(this.restExtractor.extractDataBool), @@ -103,10 +118,11 @@ export class UserService { ) } - verifyEmail (userId: number, verificationString: string) { + verifyEmail (userId: number, verificationString: string, isPendingEmail: boolean) { const url = `${UserService.BASE_USERS_URL}/${userId}/verify-email` const body = { - verificationString + verificationString, + isPendingEmail } return this.authHttp.post(url, body) @@ -135,6 +151,22 @@ export class UserService { .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) { @@ -153,15 +185,26 @@ export class UserService { ) } + updateUsers (users: User[], 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)) + ) + } + getUser (userId: number) { return this.authHttp.get(UserService.BASE_USERS_URL + userId) .pipe(catchError(err => this.restExtractor.handleError(err))) } - getUsers (pagination: RestPagination, sort: SortMeta): Observable> { + getUsers (pagination: RestPagination, sort: SortMeta, search?: string): Observable> { let params = new HttpParams() params = this.restService.addRestGetParams(params, pagination, sort) + if (search) params = params.append('search', search) + return this.authHttp.get>(UserService.BASE_USERS_URL, { params }) .pipe( map(res => this.restExtractor.convertResultListDateToHuman(res)), @@ -170,21 +213,38 @@ export class UserService { ) } - removeUser (user: { id: number }) { - return this.authHttp.delete(UserService.BASE_USERS_URL + user.id) - .pipe(catchError(err => this.restExtractor.handleError(err))) + removeUser (usersArg: User | User[]) { + 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)) + ) } - banUser (user: { id: number }, reason?: string) { + banUsers (usersArg: User | User[], reason?: string) { const body = reason ? { reason } : {} - - return this.authHttp.post(UserService.BASE_USERS_URL + user.id + '/block', body) - .pipe(catchError(err => this.restExtractor.handleError(err))) + 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)) + ) } - unbanUser (user: { id: number }) { - return this.authHttp.post(UserService.BASE_USERS_URL + user.id + '/unblock', {}) - .pipe(catchError(err => this.restExtractor.handleError(err))) + unbanUsers (usersArg: User | User[]) { + 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)) + ) } private formatUser (user: User) {