UNPKG

osmos

Version:

OSMOS - Symbiosys

210 lines (179 loc) 5.33 kB
import { ApiClient } from './apiClient'; import { inject } from 'aurelia-framework'; import { EventAggregator } from 'aurelia-event-aggregator'; let urlPrefix = 'api/identity/'; @inject(ApiClient, EventAggregator) export class IdentityManager { constructor(apiClient, eventAggregator) { this._apiClient = apiClient; this._eventAggregator = eventAggregator; this.userInfo = null; this.passwordValidationRules = null; } login(userName, password) { return this._apiClient.post({ url: 'connect/token', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: `grant_type=password&username=${userName}&password=${password}&client_id=ro.client&client_secret=secret&scope=api` }) .then(response => { return response.json() .then((result) => { localStorage.setItem('token', result.access_token); return this.getUserInfo(); }); }); } logout() { localStorage.removeItem('token'); this.userInfo = null; this._userInfoHasChanged(); } getUserInfo() { return this._apiClient.get({ url: urlPrefix + 'userInfo' }) .then(response => response.json()) .then(result => { this.userInfo = result; console.info('userInfo', this.userInfo); this._userInfoHasChanged(); return result; }) .catch(error => { this.userInfo = null; this._userInfoHasChanged(); this.logout(); }); } sendRegisterCode(email) { return this._apiClient.post({ url: urlPrefix + 'sendRegisterCode', data: { email: email } }); } register(data) { return this._apiClient.post({ url: urlPrefix + 'register', data: data }); } getPasswordValidationRules() { let promise = new Promise((resolve, reject) => { resolve(this.passwordValidationRules); }); if (!this.passwordValidationRules) promise = this._apiClient.get({ url: urlPrefix + 'passwordValidationRules' }) .then(response => { return response.json(); }) .then(result => { this.passwordValidationRules = result; return this.passwordValidationRules; }); return promise; } // sendConfirmEmailCode(email){ // return this._apiClient.post({ // url: urlPrefix + 'sendConfirmEmailCode', // data: { // email: email // } // }); // } confirmEmail(userId, code) { //console.info('data', data); return this._apiClient.post({ url: urlPrefix + 'confirmEmail', data: { userId: userId, code: code } }); } resetPassword(userId, code, password, confirmPassword) { return this._apiClient.post({ url: urlPrefix + 'resetPassword', data: { userId: userId, code: code, password: password, confirmPassword: confirmPassword } }) .then(response => { return response.json() .then((result) => { localStorage.setItem('token', result.access_token); return this.getUserInfo(); }); }); } sendResetPasswordCode(email) { return this._apiClient.post({ url: urlPrefix + 'sendResetPasswordCode/', data: { email: email } }); } sendConfirmPhoneNumberCode(){ return this._apiClient.post({ url: urlPrefix + 'sendConfirmPhoneNumberCode/' }); } confirmPhoneNumber(token){ return this._apiClient.post({ url: urlPrefix + 'confirmPhoneNumber/', data: { token: token } }); } getRoleAccesses() { return this._apiClient.get({ url: urlPrefix + 'roleAccesses/' }) .then(response => response.json()) .then(result => { this.roleAccesses = result; //console.info('this.roleAccesses', this.roleAccesses); return result; }); } hasAccess(groupId, sectionName, accessType) { if (!this.userInfo || !this.userInfo.userGroups) return false; let userGroup = null; for (let i = 0; i < this.userInfo.userGroups.length; i++) { if (this.userInfo.userGroups[i].group && this.userInfo.userGroups[i].group.id === groupId) { userGroup = this.userInfo.userGroups[i]; break; } } if (!userGroup) return false; let result = false; for (let i = 0; i < this.roleAccesses.length; i++) { if (userGroup.role && userGroup.role.id === this.roleAccesses[i].osRoleId && this.roleAccesses[i].osAccess && this.roleAccesses[i].osAccess.osSection && this.roleAccesses[i].osAccess.type.toLowerCase() === accessType.toLowerCase() && this.roleAccesses[i].osAccess.osSection.name.toLowerCase() === sectionName.toLowerCase()) { result = true; break; } } return result; } _userInfoHasChanged() { this._eventAggregator.publish(new UserInfoHasChanged(this.userInfo)); } } export class UserInfoHasChanged { constructor(userInfo) { this.userInfo = userInfo; } }