github.com/readium/readium-lcp-server@v0.0.0-20240101192032-6e95190e99f1/frontend/manage/app/components/user.service.ts (about) 1 import { Injectable } from '@angular/core'; 2 import { Headers, Http } from '@angular/http'; 3 import 'rxjs/add/operator/toPromise'; 4 import { User } from './user'; 5 import * as jsSHA from 'jssha'; 6 7 declare var Config: any; // this comes from the autogenerated config.js file 8 @Injectable() 9 export class UserService { 10 private usersUrl = Config.frontend.url + '/users' ; 11 private headers = new Headers ({'Content-Type': 'application/json'}); 12 13 constructor (private http: Http) { } 14 getUsers(): Promise<User[]> { 15 return this.http.get(this.usersUrl) 16 .toPromise() 17 .then(function (response) { 18 let users: User[] = []; 19 for (let jsonUser of response.json()) { 20 users[users.length] = {userID: jsonUser.userID, alias: jsonUser.alias, email: jsonUser.email, password: jsonUser.password}; 21 } 22 return users; 23 }) 24 .catch(this.handleError); 25 } 26 27 create(newAlias: string, newEmail: string, newPassword: string): Promise<User> { 28 const jsSHAObject:jsSHA.jsSHA = new jsSHA("SHA-256","TEXT"); 29 jsSHAObject.update(newPassword); 30 let hashedPassword = jsSHAObject.getHash ("HEX"); 31 let user: User = {userID: null, alias: newAlias, email: newEmail, password: hashedPassword}; 32 return this.http 33 .put(this.usersUrl, JSON.stringify(user), {headers: this.headers}) 34 .toPromise() 35 .then(function (response) { 36 if (response.status === 201) { 37 return user; 38 } else { 39 throw 'Error creating user ' + response.text; 40 } 41 }) 42 .catch(this.handleError); 43 } 44 45 delete(id: number): Promise<void> { 46 const url = `${this.usersUrl}/${id}`; 47 return this.http.delete(url, {headers: this.headers}) 48 .toPromise() 49 .then(() => null) 50 .catch(this.handleError); 51 } 52 53 private handleError(error: any): Promise<any> { 54 console.error('An error occurred', error); 55 return Promise.reject(error.message || error); 56 } 57 getUser(id: number): Promise<User> { 58 return this.getUsers() 59 .then(users => users.find(user => user.userID === id)); 60 } 61 update(user: User, newPassword: string |undefined): Promise<User> { 62 if ((user.password != newPassword) && newPassword!=undefined) { 63 const jsSHAObject:jsSHA.jsSHA = new jsSHA("SHA-256","TEXT"); 64 jsSHAObject.update(newPassword); 65 user.password = jsSHAObject.getHash ("HEX"); 66 } 67 const url = `${this.usersUrl}/${user.userID}`; 68 return this.http 69 .post(url, JSON.stringify(user), {headers: this.headers}) 70 .toPromise() 71 .then(() => user) 72 .catch(this.handleError); 73 } 74 75 }