@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
101 lines • 15 kB
JavaScript
import { Injectable } from '@angular/core';
import { switchMap } from 'rxjs/operators';
import { SignUpModule } from '../sign-up.module';
import { processMessageResponse } from '../../../utility/process-message-response';
import * as i0 from "@angular/core";
import * as i1 from "../../../configuration/configuration.service";
import * as i2 from "@angular/common/http";
import * as i3 from "../../../logger/services/logger.service";
export class SignUpService {
_config;
_http;
_log;
_signUpUrl;
_verifyUrl;
_inviteUrl;
_resetUrl;
_recoverUrl;
constructor(_config, _http, _log) {
this._config = _config;
this._http = _http;
this._log = _log;
const authAddress = _config.get().providers.auth.address;
if (!authAddress) {
throw new Error('Authentication provider address is not set!');
}
this._signUpUrl = this.resolveEndpoint('signup', authAddress);
this._verifyUrl = this.resolveEndpoint('verify', authAddress);
this._inviteUrl = this.resolveEndpoint('invite', authAddress);
this._resetUrl = this.resolveEndpoint('reset', authAddress);
this._recoverUrl = this.resolveEndpoint('recover', authAddress);
}
signup(newUser) {
if (!this._signUpUrl) {
throw new Error('SingUp URL is not set in authentication provider endpoints!');
}
newUser.password = btoa(newUser.password);
return this._http.post(this._signUpUrl, newUser).pipe(switchMap(processMessageResponse));
}
invite(invitation) {
if (!this._inviteUrl) {
throw new Error('Invite URL is not set in authentication provider endpoints!');
}
if (!invitation.groups) {
invitation.groups = [];
}
if (!invitation.processRoles) {
invitation.processRoles = [];
}
return this._http.post(this._inviteUrl, invitation).pipe(switchMap(processMessageResponse));
}
resetPassword(email) {
if (!this._resetUrl) {
throw new Error('Reset URL is not set in authentication provider endpoints!');
}
return this._http.post(this._resetUrl, email).pipe(switchMap(processMessageResponse));
}
recoverPassword(token, password) {
if (!this._recoverUrl) {
throw new Error('Recover URL is not set in authentication provider endpoints!');
}
const request = {
token,
password: btoa(password),
email: '',
name: '',
surname: ''
};
return this._http.post(this._recoverUrl, request).pipe(switchMap(processMessageResponse));
}
verify(token) {
if (!this._verifyUrl) {
throw new Error('Verify URL is not set in authentication provider endpoints!');
}
return this._http.post(this._verifyUrl, token).pipe(switchMap(processMessageResponse));
}
/**
* @param endpointKey the attribute name of the endpoint address in `nae.json`
* @param baseUrl the base of the endpoint URL. Content resolved by key from `nae.json` is appended to the URL provided by this argument
* @returns the endpoint address or `undefined` if such endpoint is not defined in `nae.json`
*/
resolveEndpoint(endpointKey, baseUrl) {
const config = this._config.get();
if (!config
|| !config.providers
|| !config.providers.auth
|| !config.providers.auth.endpoints
|| !config.providers.auth.endpoints[endpointKey]) {
return undefined;
}
return baseUrl + config.providers.auth.endpoints[endpointKey];
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpService, deps: [{ token: i1.ConfigurationService }, { token: i2.HttpClient }, { token: i3.LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpService, providedIn: SignUpModule });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpService, decorators: [{
type: Injectable,
args: [{
providedIn: SignUpModule
}]
}], ctorParameters: () => [{ type: i1.ConfigurationService }, { type: i2.HttpClient }, { type: i3.LoggerService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi11cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9hdXRoZW50aWNhdGlvbi9zaWduLXVwL3NlcnZpY2VzL3NpZ24tdXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBT3pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7Ozs7O0FBS2pGLE1BQU0sT0FBTyxhQUFhO0lBUUE7SUFBeUM7SUFBNkI7SUFOekUsVUFBVSxDQUFTO0lBQ25CLFVBQVUsQ0FBUztJQUNuQixVQUFVLENBQVM7SUFDbkIsU0FBUyxDQUFTO0lBQ2xCLFdBQVcsQ0FBUztJQUV2QyxZQUFzQixPQUE2QixFQUFZLEtBQWlCLEVBQVksSUFBbUI7UUFBekYsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFBWSxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVksU0FBSSxHQUFKLElBQUksQ0FBZTtRQUMzRyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUNsRTtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxXQUFXLENB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QW1CLEVBQUUsT0FBZTtRQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNO2VBQ0osQ0FBQyxNQUFNLENBQUMsU0FBUztlQUNqQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSTtlQUN0QixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVM7ZUFDaEMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbEQsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxPQUFPLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEUsQ0FBQzt3R0E5RlEsYUFBYTs0R0FBYixhQUFhLGNBRlYsWUFBWTs7NEZBRWYsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsWUFBWTtpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtVc2VyUmVnaXN0cmF0aW9uUmVxdWVzdH0gZnJvbSAnLi4vbW9kZWxzL3VzZXItcmVnaXN0cmF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtNZXNzYWdlUmVzb3VyY2V9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvbWVzc2FnZS1yZXNvdXJjZSc7XG5pbXBvcnQge3N3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtVc2VySW52aXRhdGlvblJlcXVlc3R9IGZyb20gJy4uL21vZGVscy91c2VyLWludml0YXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1NpZ25VcE1vZHVsZX0gZnJvbSAnLi4vc2lnbi11cC5tb2R1bGUnO1xuaW1wb3J0IHtwcm9jZXNzTWVzc2FnZVJlc3BvbnNlfSBmcm9tICcuLi8uLi8uLi91dGlsaXR5L3Byb2Nlc3MtbWVzc2FnZS1yZXNwb25zZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBTaWduVXBNb2R1bGVcbn0pXG5leHBvcnQgY2xhc3MgU2lnblVwU2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3NpZ25VcFVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfdmVyaWZ5VXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbnZpdGVVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Jlc2V0VXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9yZWNvdmVyVXJsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbmZpZzogQ29uZmlndXJhdGlvblNlcnZpY2UsIHByb3RlY3RlZCBfaHR0cDogSHR0cENsaWVudCwgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UpIHtcbiAgICAgICAgY29uc3QgYXV0aEFkZHJlc3MgPSBfY29uZmlnLmdldCgpLnByb3ZpZGVycy5hdXRoLmFkZHJlc3M7XG4gICAgICAgIGlmICghYXV0aEFkZHJlc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gcHJvdmlkZXIgYWRkcmVzcyBpcyBub3Qgc2V0IScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NpZ25VcFVybCA9IHRoaXMucmVzb2x2ZUVuZHBvaW50KCdzaWdudXAnLCBhdXRoQWRkcmVzcyk7XG4gICAgICAgIHRoaXMuX3ZlcmlmeVVybCA9IHRoaXMucmVzb2x2ZUVuZHBvaW50KCd2ZXJpZnknLCBhdXRoQWRkcmVzcyk7XG4gICAgICAgIHRoaXMuX2ludml0ZVVybCA9IHRoaXMucmVzb2x2ZUVuZHBvaW50KCdpbnZpdGUnLCBhdXRoQWRkcmVzcyk7XG4gICAgICAgIHRoaXMuX3Jlc2V0VXJsID0gdGhpcy5yZXNvbHZlRW5kcG9pbnQoJ3Jlc2V0JywgYXV0aEFkZHJlc3MpO1xuICAgICAgICB0aGlzLl9yZWNvdmVyVXJsID0gdGhpcy5yZXNvbHZlRW5kcG9pbnQoJ3JlY292ZXInLCBhdXRoQWRkcmVzcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNpZ251cChuZXdVc2VyOiBVc2VyUmVnaXN0cmF0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8TWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIGlmICghdGhpcy5fc2lnblVwVXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpbmdVcCBVUkwgaXMgbm90IHNldCBpbiBhdXRoZW50aWNhdGlvbiBwcm92aWRlciBlbmRwb2ludHMhJyk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3VXNlci5wYXNzd29yZCA9IGJ0b2EobmV3VXNlci5wYXNzd29yZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8TWVzc2FnZVJlc291cmNlPih0aGlzLl9zaWduVXBVcmwsIG5ld1VzZXIpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocHJvY2Vzc01lc3NhZ2VSZXNwb25zZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW52aXRlKGludml0YXRpb246IFVzZXJJbnZpdGF0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8TWVzc2FnZVJlc291cmNlPiB7XG4gICAgICAgIGlmICghdGhpcy5faW52aXRlVXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludml0ZSBVUkwgaXMgbm90IHNldCBpbiBhdXRoZW50aWNhdGlvbiBwcm92aWRlciBlbmRwb2ludHMhJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnZpdGF0aW9uLmdyb3Vwcykge1xuICAgICAgICAgICAgaW52aXRhdGlvbi5ncm91cHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludml0YXRpb24ucHJvY2Vzc1JvbGVzKSB7XG4gICAgICAgICAgICBpbnZpdGF0aW9uLnByb2Nlc3NSb2xlcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8TWVzc2FnZVJlc291cmNlPih0aGlzLl9pbnZpdGVVcmwsIGludml0YXRpb24pLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocHJvY2Vzc01lc3NhZ2VSZXNwb25zZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRQYXNzd29yZChlbWFpbDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNldFVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNldCBVUkwgaXMgbm90IHNldCBpbiBhdXRoZW50aWNhdGlvbiBwcm92aWRlciBlbmRwb2ludHMhJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxNZXNzYWdlUmVzb3VyY2U+KHRoaXMuX3Jlc2V0VXJsLCBlbWFpbCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChwcm9jZXNzTWVzc2FnZVJlc3BvbnNlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWNvdmVyUGFzc3dvcmQodG9rZW4sIHBhc3N3b3JkKTogT2JzZXJ2YWJsZTxNZXNzYWdlUmVzb3VyY2U+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZWNvdmVyVXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlY292ZXIgVVJMIGlzIG5vdCBzZXQgaW4gYXV0aGVudGljYXRpb24gcHJvdmlkZXIgZW5kcG9pbnRzIScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHBhc3N3b3JkOiBidG9hKHBhc3N3b3JkKSxcbiAgICAgICAgICAgIGVtYWlsOiAnJyxcbiAgICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgICAgc3VybmFtZTogJydcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxNZXNzYWdlUmVzb3VyY2U+KHRoaXMuX3JlY292ZXJVcmwsIHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocHJvY2Vzc01lc3NhZ2VSZXNwb25zZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmVyaWZ5KHRva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1lc3NhZ2VSZXNvdXJjZT4ge1xuICAgICAgICBpZiAoIXRoaXMuX3ZlcmlmeVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWZXJpZnkgVVJMIGlzIG5vdCBzZXQgaW4gYXV0aGVudGljYXRpb24gcHJvdmlkZXIgZW5kcG9pbnRzIScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8TWVzc2FnZVJlc291cmNlPih0aGlzLl92ZXJpZnlVcmwsIHRva2VuKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHByb2Nlc3NNZXNzYWdlUmVzcG9uc2UpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGVuZHBvaW50S2V5IHRoZSBhdHRyaWJ1dGUgbmFtZSBvZiB0aGUgZW5kcG9pbnQgYWRkcmVzcyBpbiBgbmFlLmpzb25gXG4gICAgICogQHBhcmFtIGJhc2VVcmwgdGhlIGJhc2Ugb2YgdGhlIGVuZHBvaW50IFVSTC4gQ29udGVudCByZXNvbHZlZCBieSBrZXkgZnJvbSBgbmFlLmpzb25gIGlzIGFwcGVuZGVkIHRvIHRoZSBVUkwgcHJvdmlkZWQgYnkgdGhpcyBhcmd1bWVudFxuICAgICAqIEByZXR1cm5zIHRoZSBlbmRwb2ludCBhZGRyZXNzIG9yIGB1bmRlZmluZWRgIGlmIHN1Y2ggZW5kcG9pbnQgaXMgbm90IGRlZmluZWQgaW4gYG5hZS5qc29uYFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNvbHZlRW5kcG9pbnQoZW5kcG9pbnRLZXk6IHN0cmluZywgYmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fY29uZmlnLmdldCgpO1xuICAgICAgICBpZiAoIWNvbmZpZ1xuICAgICAgICAgICAgfHwgIWNvbmZpZy5wcm92aWRlcnNcbiAgICAgICAgICAgIHx8ICFjb25maWcucHJvdmlkZXJzLmF1dGhcbiAgICAgICAgICAgIHx8ICFjb25maWcucHJvdmlkZXJzLmF1dGguZW5kcG9pbnRzXG4gICAgICAgICAgICB8fCAhY29uZmlnLnByb3ZpZGVycy5hdXRoLmVuZHBvaW50c1tlbmRwb2ludEtleV0pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2VVcmwgKyBjb25maWcucHJvdmlkZXJzLmF1dGguZW5kcG9pbnRzW2VuZHBvaW50S2V5XTtcbiAgICB9XG59XG4iXX0=