UNPKG

lavva.exalushome

Version:

Library implementing communication and abstraction layers for ExalusHome system

303 lines 14.3 kB
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