lavva.exalushome
Version:
Library implementing communication and abstraction layers for ExalusHome system
303 lines • 14.3 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { AccessLevel, Gender } from './IUser';
import { Api } from '../../Api';
import { ExalusConnectionService } from '../ExalusConnectionService';
import { DataFrame, Method, Status } from '../../DataFrame';
import { SessionService } from '../Session/SessionService';
import { User } from './User';
import { DependencyContainer } from '../../DependencyContainer';
import { ResponseResult } from '../FieldChangeResult';
import { Picture } from '../Pictures/Picture';
import { PicturesService } from '../Pictures/PicturesService';
import { ImageType } from '../Pictures/IPicture';
import { WebApiCacheService } from '../WebApi/WebApiCacheService';
export class UsersService {
constructor() {
this._connection = null;
this._connection = Api.Get(ExalusConnectionService.ServiceName);
this._pictureService = Api.Get(PicturesService.ServiceName);
this._sessionService = Api.Get(SessionService.ServiceName);
}
CanEditUser(user) {
const us = this._sessionService.User;
if (user.Guid === (us === null || us === void 0 ? void 0 : us.Guid))
return true;
return this.CanEditUsersOfAccessLevel(user.AccessLevel);
}
CanEditUsersOfAccessLevel(level) {
var _a;
const currentlyLoggedUserLevel = (_a = this._sessionService.User) === null || _a === void 0 ? void 0 : _a.AccessLevel;
if (currentlyLoggedUserLevel === undefined)
return false;
switch (level) {
case AccessLevel.Support:
return currentlyLoggedUserLevel === AccessLevel.Support;
case AccessLevel.Installator:
return currentlyLoggedUserLevel >= AccessLevel.Installator;
case AccessLevel.Admin:
return currentlyLoggedUserLevel >= AccessLevel.Admin;
default:
return currentlyLoggedUserLevel >= AccessLevel.Admin;
}
}
GetServiceName() {
return UsersService.ServiceName;
}
GetUsersAsync() {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b;
const result = yield ((_a = this._connection) === null || _a === void 0 ? void 0 : _a.SendAndWaitForResponseAsync(new GetUsersListRequest(), 20000, false));
if (result === null || result === undefined)
return Promise.resolve([]);
if ((result === null || result === void 0 ? void 0 : result.Status) == Status.OK) {
if (result.Data != null) {
const users = [];
result.Data.forEach(element => {
var user = new User();
user.AccessLevel = element.AccessLevel;
user.Email = element.Email;
user.Gender = element.Gender;
user.Guid = element.Guid;
user.IsAccountOnline = element.IsAccountOnline;
user.Name = element.Name;
user.IsActive = element.IsActive;
user.IsBanned = element.IsBanned;
user.Phone = element.Phone;
user.Surname = element.Surname;
users.push(user);
});
return users;
}
else
return Promise.resolve([]);
}
else if ((result === null || result === void 0 ? void 0 : result.Status) == Status.NoData)
return Promise.resolve([]);
else {
(_b = DependencyContainer.Log) === null || _b === void 0 ? void 0 : _b.Debug(UsersService.ServiceName, `Failed to retrieve users, error: ${result.Status}`);
throw new Error(`Failed to retrieve users, error: ${result.Status}`);
}
});
}
GetUserAsync(id) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b;
if (id === "")
return Promise.resolve(null);
else if (id == null)
id = "";
const result = yield ((_a = this._connection) === null || _a === void 0 ? void 0 : _a.SendAndWaitForResponseAsync(new GetUserRequest(id), 20000, false));
if (result == null || result.Data == null)
return Promise.resolve(null);
if (result.Status != Status.OK) {
(_b = DependencyContainer.Log) === null || _b === void 0 ? void 0 : _b.Debug(UsersService.ServiceName, `Failed to retrieve user, error: ${result.Status}`);
return Promise.resolve(null);
}
const user = new User();
user.AccessLevel = result.Data.AccessLevel;
user.Email = result.Data.Email;
user.Gender = result.Data.Gender;
user.Guid = result.Data.Guid;
user.IsAccountOnline = result.Data.IsAccountOnline;
user.Name = result.Data.Name;
user.IsActive = result.Data.IsActive;
user.IsBanned = result.Data.IsBanned;
user.Phone = result.Data.Phone;
user.Surname = result.Data.Surname;
return user;
});
}
CreateUserAsync(user, password) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
if (user.Guid != null && user.Guid != "")
return new ResponseResult(Status.WrongData, "GuidMustBeEmpty");
const userRequest = new UserDataFrame();
userRequest.Name = user.Name.trim();
userRequest.Surname = user.Surname.trim();
userRequest.Email = user.Email.trim();
userRequest.Password = password.trim();
userRequest.Phone = user.Phone.trim();
userRequest.Gender = user.Gender;
userRequest.AccessLevel = user.AccessLevel;
const result = yield ((_a = this._connection) === null || _a === void 0 ? void 0 : _a.SendAndWaitForResponseAsync(new SetUserRequest(userRequest), 20000, false));
Api.Get(WebApiCacheService.ServiceName).ClearCache();
if (result == null || result.Status == null)
return new ResponseResult(Status.FatalError, "UnknownError");
if (result.Data == null)
result.Data = "";
return new ResponseResult(result.Status, result.Data);
});
}
UpdateUserAsync(user) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
if (user.Guid == null || user.Guid == "")
return new ResponseResult(Status.WrongData, "GuidCannotBeEmpty");
const userRequest = new UserDataFrame();
userRequest.Guid = user.Guid;
userRequest.Name = user.Name.trim();
userRequest.Surname = user.Surname.trim();
userRequest.Email = user.Email.trim();
userRequest.Phone = user.Phone.trim();
userRequest.Gender = user.Gender;
userRequest.AccessLevel = user.AccessLevel;
const result = yield ((_a = this._connection) === null || _a === void 0 ? void 0 : _a.SendAndWaitForResponseAsync(new SetUserRequest(userRequest), 20000, false));
Api.Get(WebApiCacheService.ServiceName).ClearCache();
if (result == null || result.Status == null)
return new ResponseResult(Status.FatalError, "UnknownError");
if (result.Data == null)
result.Data = "";
return new ResponseResult(result.Status, result.Data);
});
}
ChangePasswordAsync(user, password) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
if (user.Guid == null || user.Guid == "")
return new ResponseResult(Status.WrongData, "GuidCannotBeEmpty");
const currentUser = yield this.GetUserAsync(user.Guid);
if (currentUser == null)
return new ResponseResult(Status.ResourceIsNotAvailable, "CannotGetUser");
const passRequest = new UserDataFrame();
passRequest.Guid = user.Guid;
passRequest.Password = password;
passRequest.AccessLevel = currentUser.AccessLevel;
passRequest.Email = currentUser.Email;
const result = yield ((_a = this._connection) === null || _a === void 0 ? void 0 : _a.SendAndWaitForResponseAsync(new SetUserRequest(passRequest), 20000, false));
if (result == null || result.Status == null)
return new ResponseResult(Status.FatalError, "UnknownError");
if (result.Data == null)
result.Data = "";
return new ResponseResult(result.Status, result.Data);
});
}
DeleteUserAsync(id) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b;
if (id === "")
return Status.WrongData;
else if (id == null)
id = "";
const result = yield ((_a = this._connection) === null || _a === void 0 ? void 0 : _a.SendAndWaitForResponseAsync(new DeleteUserRequest(id), 20000, false));
Api.Get(WebApiCacheService.ServiceName).ClearCache();
if (result == null || result.Status == null)
return Status.FatalError;
if (result.Status != Status.OK)
(_b = DependencyContainer.Log) === null || _b === void 0 ? void 0 : _b.Debug(UsersService.ServiceName, `Failed to delete user, error: ${result.Status}`);
return result.Status;
});
}
GetUserProfilePictureAsync(user) {
return __awaiter(this, void 0, void 0, function* () {
if (user.Guid == null || user.Guid == "")
return new ResponseResult(Status.WrongData, "GuidCannotBeEmpty");
const picturesInfo = yield this._pictureService.GetPicturesInfoAsync();
if (picturesInfo.Type != null)
return picturesInfo;
const pictureToGet = picturesInfo.find(pInfo => pInfo.OwnerIdentity == "profilePicture" && pInfo.OwnerGuid == user.Guid);
if (pictureToGet != null) {
const profilePicture = yield this._pictureService.GetPictureAsync(pictureToGet.Guid);
Api.Get(WebApiCacheService.ServiceName).ClearCache();
if (profilePicture.Type != null)
return picturesInfo;
else
return profilePicture;
}
else {
return new ResponseResult(Status.ResourceDoesNotExists, "PictureNotFound");
}
});
}
SetUserProfilePictureAsync(user, base64PictureString) {
return __awaiter(this, void 0, void 0, function* () {
if (user.Guid == null || user.Guid == "")
return new ResponseResult(Status.WrongData, "GuidCannotBeEmpty");
let picture = new Picture();
picture.ImageType = ImageType.Person;
picture.OwnerGuid = user.Guid;
picture.OwnerIdentity = "profilePicture";
picture.Base64Image = base64PictureString;
const currentPicture = yield this.GetUserProfilePictureAsync(user);
Api.Get(WebApiCacheService.ServiceName).ClearCache();
//trying to add when not exists
if (currentPicture.Type == Status.ResourceDoesNotExists) {
const result = yield this._pictureService.AddPictureAsync(picture);
switch (result) {
case Status.OK:
return new ResponseResult(Status.OK, "PictureSet");
default:
return new ResponseResult(result, 'PictureServiceError');
}
}
else if (currentPicture.Type != null) {
return new ResponseResult(Status.Error, "ErrorWhenTryingToCheckIfCurrentProfilePictureExists");
}
//trying to edit
else {
picture.Guid = currentPicture.Guid;
picture.OwnerGuid = currentPicture.OwnerGuid;
const result = yield this._pictureService.EditPictureAsync(picture);
switch (result) {
case Status.OK:
return new ResponseResult(Status.OK, "PictureSet");
default:
return new ResponseResult(result, 'PictureServiceError');
}
}
});
}
}
UsersService.ServiceName = "UsersService";
class GetUserRequest extends DataFrame {
constructor(userGuid) {
super();
this.Resource = "/users/user";
this.Method = Method.Get;
this.Data = userGuid;
}
}
class UserDataFrame {
constructor() {
this.Guid = "";
this.Name = "";
this.Surname = "";
this.Email = "";
this.Password = "";
this.Phone = "";
this.Gender = Gender.Unknown;
this.AccessLevel = AccessLevel.Any;
}
}
class SetUserRequest extends DataFrame {
constructor(user) {
super();
this.Resource = "/users/user";
this.Method = Method.Put;
this.Data = user;
}
}
class GetUsersListRequest extends DataFrame {
constructor() {
super();
this.Resource = "/users/list";
this.Method = Method.Get;
}
}
class DeleteUserRequest extends DataFrame {
constructor(userGuid) {
super();
this.Resource = "/users/user";
this.Method = Method.Delete;
this.Data = userGuid;
}
}
//# sourceMappingURL=UsersService.js.map