osmos
Version:
OSMOS - Symbiosys
210 lines (179 loc) • 5.33 kB
JavaScript
import { ApiClient } from './apiClient';
import { inject } from 'aurelia-framework';
import { EventAggregator } from 'aurelia-event-aggregator';
let urlPrefix = 'api/identity/';
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;
}
}