107 lines
3.0 KiB
TypeScript

/** @file
* @author Edouard DUPIN
* @copyright 2018, Edouard DUPIN, all right reserved
* @license PROPRIETARY (see license file)
*/
import { Injectable } from '@angular/core';
import { environment } from 'environments/environment';
import { getApplicationLocation, isInArray, isNullOrUndefined } from 'common/utils';
import { HTTPMimeType, HTTPRequestModel, HttpWrapperService, ModelResponseHttp } from 'common/service';
@Injectable()
export class SSOService {
signUpEnable: boolean = undefined;
constructor(
private http: HttpWrapperService,
) {
console.log('Start SSOService');
}
utf8_to_b64( str:string ): string {
// remove unneeded "=" padding
return window.btoa(encodeURIComponent( str )).replace("=", "");
}
b64_to_utf8( str:string ): string {
return decodeURIComponent(window.atob( str ));
}
/**
* Request SSO connection
*/
hashLocalData(data?: string): string {
if (!isNullOrUndefined(data) && !isInArray(data, ["", "null", "NULL", "undefined", "---", "unregistered", "unregistered/", "forbidden", "forbidden/"])) {
return this.utf8_to_b64(data);
}
let pathName = getApplicationLocation();
if (isInArray(pathName, ["sso", "/sso", "/sso/"])) {
return this.utf8_to_b64('home');
}
if (!isNullOrUndefined(pathName) && !isInArray(pathName, ["", "null", "NULL", "undefined", "---", "unregistered", "unregistered/", "forbidden", "forbidden/"])) {
return this.utf8_to_b64(pathName);
}
return this.utf8_to_b64('home');
}
/**
* Request SSO connection
*/
unHashLocalData(data: string): string | undefined {
if (isNullOrUndefined(data) || isInArray(data, ["", "null", "NULL", "undefined", "---"])) {
return undefined;
}
try {
return this.b64_to_utf8(data);
}
catch (ex) {
console.error(`Can not convert the data: ${data}`);
}
return undefined;
}
/**
* Request SSO connection
*/
requestSignIn(name?: string): void {
window.location.href = environment.ssoSignIn + this.hashLocalData(name);
}
/**
* Request SSO Disconnect
*/
requestSignOut(name?: string): void {
window.location.href = environment.ssoSignOut + this.hashLocalData(name);
}
/**
* Request SSO signUp
*/
requestSignUp(name?: string): void {
window.location.href = environment.ssoSignUp + this.hashLocalData(name);
}
/**
* Checo if the signUp is authorized (generate by te SSO)
* @returns a promise of the State for sign-up
*/
checkSignUpEnable(): Promise<boolean> {
let self = this;
return new Promise((resolve, reject) => {
if (isNullOrUndefined(self.signUpEnable)) {
this.http.requestJson({
server: 'karso',
endPoint: 'system_config/is_sign_up_availlable',
requestType: HTTPRequestModel.GET,
accept: HTTPMimeType.JSON,
contentType: HTTPMimeType.JSON,
}).then((response: ModelResponseHttp) =>{
self.signUpEnable = response.data.signup;
resolve(self.signUpEnable);
}).catch((error:any) => {
reject(`return ERROR ${ JSON.stringify(error, null, 2)}`);
});
return;
}
resolve(self.signUpEnable);
});
}
}