ns2-front-module-common
Version:
NS2 common module
602 lines • 23.6 kB
JavaScript
import { Inject, Injectable, Injector } from "@angular/core";
import { URLSearchParams } from "@angular/http";
import { UUID } from "angular2-uuid";
// Services
import { CookieService } from "ngx-cookie-service";
import { HttpService } from "./http.service";
// Urls
import { CurrentUserUrls } from '../urls/current-user-urls.model';
import { Observable } from 'rxjs/Observable';
import "rxjs/operator/map";
// RxMq
import Rxmq from "rxmq";
// Имя ключа в хранилище (localStorage или sessionStorage)
export var STORAGE_TOKEN_KEY = 'token';
var CurrentUserService = (function () {
function CurrentUserService(injector, persistStorage, tempStorage, cookiesService) {
this.injector = injector;
this.persistStorage = persistStorage;
this.tempStorage = tempStorage;
this.cookiesService = cookiesService;
this.token = '';
this.usersEndPoint = '';
this.temporaryDeviceUUID = '';
this.ESBChannel = Rxmq.channel(CurrentUserService.ESB_CHANNEL_NAME);
}
// Получение соц сетей
CurrentUserService.prototype.getSocials = function () {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'self/socials';
_this.injector.get(HttpService).get(url)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (data) {
resolve(data);
}, function (err) {
reject(err);
});
});
};
/**
* Предзагрузка
*
* @returns {Promise<string[]>}
*/
CurrentUserService.prototype.load = function () {
var _this = this;
return new Promise(function (resolve, reject) {
_this.restoreToken()
.then(function (token) {
var tokenResolve = function () {
resolve(token);
};
_this.loadInfoRemote().then(tokenResolve)
.catch(function (err) {
(err.statusCode == 401) ? tokenResolve() : reject(err);
});
})
.catch(resolve);
});
};
/**
* Установка URL до сервиса users
*
* @param usersEndPoint
*/
CurrentUserService.prototype.setUsersEndPoint = function (usersEndPoint) {
this.usersEndPoint = usersEndPoint;
};
/**
* Проверка текущей сессии пользователя
*
* @returns {Promise<T>}
*/
CurrentUserService.prototype.isAuth = function () {
return !!this.getToken();
};
/**
* Авторизация в системе
*
* @param email
* @param password
* @param rememberMe
*/
CurrentUserService.prototype.login = function (email, password, rememberMe) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'users/login';
var body = { email: email, password: password };
_this.injector.get(HttpService).post(url, body)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (token) {
_this.storeToken(token, rememberMe)
.then(function (token) {
_this.token = token;
_this.loadInfoRemote()
.then(function () {
resolve();
})
.catch(function (err) {
reject(err);
});
})
.catch(function () {
_this.token = '';
reject();
});
}, function (err) {
reject(err);
});
});
};
/**
* Регистрация нового пользователя
*
* @param email
* @param password
* @param password_repeat
* @param firstname
* @param lastname
* @param geo_guid
* @param phone
*/
CurrentUserService.prototype.register = function (email, password, password_repeat, firstname, lastname, geo_guid, phone) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'users/register';
var body = { email: email, password: password, password_repeat: password_repeat, firstname: firstname, lastname: lastname, geo_guid: geo_guid, phone: phone };
_this.injector.get(HttpService).post(url, body)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (data) {
resolve(data);
}, function (err) {
reject(err);
});
});
};
/**
* Проверка email адреса на первом этапе регистрации
*
* @param email
* @returns {Promise<T>}
*/
CurrentUserService.prototype.registerCheckEmail = function (email) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'users/register-check-email';
var params = new URLSearchParams();
params.set('email', email);
_this.injector.get(HttpService).get(url, {
search: params
})
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (correctEmail) {
resolve(correctEmail);
}, function (err) {
reject(err);
});
});
};
/**
* Замена номера телефона при переходе с третьего шага на второй
*
* @param user_guid
* @param phone
* @returns {Promise<T>}
*/
CurrentUserService.prototype.registerChangePhone = function (user_guid, phone) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'users/register-change-phone';
var body = { user_guid: user_guid, phone: phone };
_this.injector.get(HttpService).put(url, body)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (newPhone) {
resolve(newPhone);
}, function (err) {
reject(err);
});
});
};
/**
* Проверка кода подтверждения из СМС
*
* @param user_guid
* @param code
* @returns {Promise<T>}
*/
CurrentUserService.prototype.confirm = function (user_guid, code) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'users/confirm';
var body = { user_guid: user_guid, code: code };
_this.injector.get(HttpService).post(url, body)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (data) {
resolve(data);
}, function (err) {
reject(err);
});
});
};
// Загрузка информации о текущем пользователе
CurrentUserService.prototype.loadInfoRemote = function () {
var _this = this;
return new Promise(function (resolve, reject) {
var url = CurrentUserUrls.self;
_this.injector.get(HttpService).get(url)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (info) {
_this.info = info;
_this.ESBChannel.subject(CurrentUserService.ESB_USER_LOGIN).next(info);
resolve(info);
}, function (err) {
reject(err);
});
});
};
/**
* Запрос ссылки сброса пароля на почту
*
* @param email
* @returns {Promise<T>}
*/
CurrentUserService.prototype.reminderPassword = function (email) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'users/reminder-password';
var body = { email: email };
_this.injector.get(HttpService).post(url, body)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (result) {
resolve(result);
}, function (err) {
reject(err);
});
});
};
/**
* Проверка токена восстановления пароля. Используется при открытии страницы восстановления, токен передается
* в параметре урла
*
* @param token
* @returns {Promise<T>}
*/
CurrentUserService.prototype.restorePasswordCheck = function (token) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'users/restore-password-check';
var params = new URLSearchParams();
params.set('token', token);
_this.injector.get(HttpService).get(url, { search: params })
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (result) {
resolve(result);
}, function (err) {
reject(err);
});
});
};
/**
* Восстановление пароля
*
* @param token
* @param password
* @param password_repeat
* @returns {Promise<T>}
*/
CurrentUserService.prototype.restorePassword = function (token, password, password_repeat) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'users/restore-password';
var body = { token: token, password: password, password_repeat: password_repeat };
_this.injector.get(HttpService).put(url, body)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (result) {
resolve(result);
}, function (err) {
reject(err);
});
});
};
/**
* Установка города
*
* @param geo_guid
* @returns {Promise<T>}
*/
CurrentUserService.prototype.setGeo = function (geo_guid) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'self/geo';
var body = { geo_guid: geo_guid };
_this.injector.get(HttpService).put(url, body)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (result) {
_this.info.session.geo_guid = result.geo_guid;
_this.ESBChannel.subject(CurrentUserService.ESB_SESSION_CHANGE_CITY).next({
oldGeoGuid: _this.info.session.geo_guid,
newGeoGuid: result.geo_guid
});
resolve(result);
}, function (err) {
reject(err);
});
});
};
/**
* Добавляет подписчика на смену текущего города
* @param {Function} then Функция-подписчик
* @returns {Subscription}
*/
CurrentUserService.prototype.onGeoChange = function (then) {
return this.ESBChannel.observe(CurrentUserService.ESB_SESSION_CHANGE_CITY).subscribe(then);
};
/**
* Добавляет подписчика на авторизацию пользователя
* @param {Function} then Функция-подписчик
* @returns {Subscription}
*/
CurrentUserService.prototype.onLogin = function (then) {
return this.ESBChannel.observe(CurrentUserService.ESB_USER_LOGIN).subscribe(then);
};
/**
* Добавляет подписчика на выход пользователя из системы
* @param {Function} then Функция-подписчик
* @returns {Subscription}
*/
CurrentUserService.prototype.onLogout = function (then) {
return this.ESBChannel.observe(CurrentUserService.ESB_USER_LOGOUT).subscribe(then);
};
/**
* Выход из аккаунта
*
* @returns {Promise<T>}
*/
CurrentUserService.prototype.logout = function () {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'self/logout';
var handler = function () {
_this.ESBChannel.subject(CurrentUserService.ESB_USER_LOGOUT).next();
_this.localLogout().then(resolve).catch(reject);
};
_this.injector.get(HttpService).delete(url).subscribe(handler, handler);
});
};
CurrentUserService.prototype.localLogout = function () {
this.token = '';
this.cookiesService.delete(CurrentUserService.USER_TOKEN_NAME);
return Promise.race([
this.persistStorage.remove(STORAGE_TOKEN_KEY),
this.persistStorage.removeByTag(STORAGE_TOKEN_KEY),
this.tempStorage.remove(STORAGE_TOKEN_KEY),
this.tempStorage.removeByTag(STORAGE_TOKEN_KEY)
]);
};
/**
* Обновить профиль текущего пользователя
* @param newUserData Новые данные пользователя
*/
CurrentUserService.prototype.saveProfile = function (newUserData) {
var _this = this;
return new Observable(function (observer) {
_this.injector.get(HttpService)
.post(CurrentUserUrls.self, newUserData)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (response) {
_this.info = response;
observer.next(response);
observer.complete();
}, function (error) {
observer.error(error);
observer.complete();
});
});
};
/**
* Отправить данные пользователя на модерацию
* @param userData Данные пользователя
*/
CurrentUserService.prototype.sendOnModeration = function (userData) {
var _this = this;
return new Observable(function (observer) {
_this.injector.get(HttpService)
.post(CurrentUserUrls.moderation, userData)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function (response) {
_this.info = response;
observer.next(response);
observer.complete();
}, function (error) {
observer.error(error);
observer.complete();
});
});
};
/**
* Сохранить токен в локал сторадж
*
* @param token
* @param rememberMe
*/
CurrentUserService.prototype.storeToken = function (token, rememberMe) {
if (rememberMe) {
return this.persistStorage.set(STORAGE_TOKEN_KEY, token);
}
else {
return this.tempStorage.set(STORAGE_TOKEN_KEY, token);
}
};
/**
* Восстанавливает значение токена из хранилища
*/
CurrentUserService.prototype.restoreToken = function () {
var _this = this;
return new Promise(function (resolve, reject) {
var cookieToken = _this.cookiesService.get(CurrentUserService.USER_TOKEN_NAME);
if (cookieToken) {
_this.token = cookieToken;
_this.storeToken(_this.token, true)
.then(function () {
resolve(cookieToken);
_this.cookiesService.delete(CurrentUserService.USER_TOKEN_NAME);
});
}
else {
_this.persistStorage.get(STORAGE_TOKEN_KEY)
.then(function (token) {
_this.token = token;
resolve(token);
})
.catch(function () {
_this.tempStorage.get(STORAGE_TOKEN_KEY)
.then(function (token) {
_this.token = token;
resolve(token);
})
.catch(function () {
reject();
});
});
}
});
};
// Установить причину отказа модерации
CurrentUserService.prototype.setRejectionReason = function (reason) {
this.info.reject_reason = reason;
};
/**
* Получить токен текущего пользователя
*
* @returns {string}
*/
CurrentUserService.prototype.getToken = function () {
return this.token;
};
/**
* Установить токен пользователю
*
* @param token
*/
CurrentUserService.prototype.setToken = function (token) {
this.token = token;
};
/**
* Получить информацию о текущем пользователе
*
* @returns {CurrentUserInfoInterface}
*/
CurrentUserService.prototype.getInfo = function () {
return this.info;
};
/**
* Метод отправки приглашения пользователю
* @param {string} email E-mail пользователя которого необходимо пригласить
* @returns {Promise<T>}
*/
CurrentUserService.prototype.invite = function (email) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'self/invite';
_this.injector.get(HttpService).post(url, { email: email })
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(function () {
resolve();
}, function (err) {
reject(err);
});
});
};
/**
* Получить всех партнеров текущего пользователя
*
* @returns {Promise<T>}
*/
CurrentUserService.prototype.getPartners = function () {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'self/partners';
_this.injector.get(HttpService).get(url)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(resolve, reject);
});
};
/**
* Добавить избранных партнеров текущему пользователю
*
* @returns {Promise<T>}
*/
CurrentUserService.prototype.addPartners = function (partnersGuid) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'self/partners';
_this.injector.get(HttpService).put(url, partnersGuid)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(resolve, reject);
});
};
/**
* Установить избранных партнеров текущему пользователю
*
* @returns {Promise<T>}
*/
CurrentUserService.prototype.setPartners = function (partnersGuid) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'self/partners';
_this.injector.get(HttpService).post(url, partnersGuid)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(resolve, reject);
});
};
/**
* Удалить избранного пользователя
*
* @returns {Promise<T>}
*/
CurrentUserService.prototype.deletePartner = function (partnerGuid) {
var _this = this;
return new Promise(function (resolve, reject) {
var url = _this.usersEndPoint + 'self/partner/' + partnerGuid;
_this.injector.get(HttpService).delete(url)
.map(function (response) { return response.json(); })
.map(function (response) { return response.data; })
.subscribe(resolve, reject);
});
};
/**
* Возвращает временный уникальный идентификатор устройства
* @returns {string}
*/
CurrentUserService.prototype.getTemporaryDeviceUUID = function () {
if (!this.temporaryDeviceUUID) {
this.temporaryDeviceUUID = UUID.UUID();
}
return this.temporaryDeviceUUID;
};
Object.defineProperty(CurrentUserService.prototype, "isCandidate", {
// Пользователь является кандидатом
get: function () {
return this.info.rank === 'candidate';
},
enumerable: true,
configurable: true
});
return CurrentUserService;
}());
export { CurrentUserService };
CurrentUserService.ESB_CHANNEL_NAME = 'current-user';
CurrentUserService.ESB_SESSION_CHANGE_CITY = 'session.change-city';
CurrentUserService.ESB_INFO_UPDATE = 'info.update';
CurrentUserService.ESB_USER_LOGIN = 'user.login';
CurrentUserService.ESB_USER_LOGOUT = 'user.logout';
CurrentUserService.USER_TOKEN_NAME = 'X-User-Token';
CurrentUserService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
CurrentUserService.ctorParameters = function () { return [
{ type: Injector, },
{ type: undefined, decorators: [{ type: Inject, args: ['StorageInterface',] },] },
{ type: undefined, decorators: [{ type: Inject, args: ['StorageInterface',] },] },
{ type: CookieService, },
]; };
//# sourceMappingURL=current-user.service.js.map