You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mohemm_srca/Mohem/src/app/authentication/confirm-login/confirm-login.component.ts

522 lines
18 KiB
TypeScript

import { Component, OnInit, Input } from '@angular/core';
import { ButtonSettings } from 'src/app/hmg-common/ui/button/models/button-settingsl';
import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { LoginRequest } from 'src/app/hmg-common/services/authentication/models/login.request';
import { AuthenticationService } from 'src/app/hmg-common/services/authentication/authentication.service';
import { SharedDataService } from 'src/app/hmg-common/services/shared-data-service/shared-data.service';
import { SendActivationByType } from '../models/sendActivationByType';
import { FingerprintAIO } from '@ionic-native/fingerprint-aio/ngx';
import { GetLoginInfoRequest } from '../../hmg-common/services/authentication/models/get-login-info.request';
import { GetLoginInfoResponse } from '../../hmg-common/services/authentication/models/get-login-info.response';
import { SMSCheckRequest } from 'src/app/hmg-common/services/authentication/models/smscheck.request';
import { SMSCheckResponse } from 'src/app/hmg-common/services/authentication/models/smscheck.response';
import { PushService } from 'src/app/hmg-common/services/push/push.service';
import { ModalController, Platform } from '@ionic/angular';
import { CheckUserAuthenticationResponse } from 'src/app/hmg-common/services/authentication/models/check-user-auth.response';
import { LoginModel } from '../models/LoginModel';
import * as moment from 'moment';
import { CheckAppVersionResponse } from 'src/app/hmg-common/services/authentication/models/check-app-version.response';
import { NFC } from "@ionic-native/nfc/ngx";
import { DigitalIdComponent } from '../digital-id/digital-id.component';
import { AppUpdateComponent } from '../app-update/app-update.component';
@Component({
selector: 'app-confirm-login',
templateUrl: './confirm-login.component.html',
styleUrls: ['./confirm-login.component.scss'],
})
export class ConfirmLoginComponent implements OnInit {
public logo = 'assets/icon/login/password.png';
public buttons: any = [];
isFaceorFinger: any;
onlySMSBox: any = true;
public loginData = new LoginModel();
selectedOption: any;
lastLogin: any;
loginTokenID: any;
deviceToken: any;
@Input() accessFromOutSide = false;
@Input() visible = true;
username: any;
password: any;
loginType: any;
empname: string;
lastLoginDate: string;
// tslint:disable-next-line: variable-name
user_name: string;
FFloginType: any;
public isPostNoLoad = true;
private iosLink: string;
private androidLink: string;
public isNFCAvailable = false;
direction: string;
userInfo: any;
constructor(
public ts: TranslatorService,
public cs: CommonService,
public authService: AuthenticationService,
public sharedData: SharedDataService,
private faio: FingerprintAIO,
public pushService: PushService,
public platform: Platform,
public modalController: ModalController,
private nfc: NFC
) {
this.loginData = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
this.deviceToken = this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false);
// if device token undefind
// tslint:disable-next-line: triple-equals
if (this.deviceToken == undefined) {
this.deviceToken = localStorage.getItem('deviceToken');
}
this.lastLogin = this.cs.sharedService.getSharedData(AuthenticationService.LAST_LOGIN, false);
this.username = localStorage.getItem('user');
this.password = localStorage.getItem('password');
this.empname = localStorage.getItem('emp-name');
}
ngOnInit() {
this.direction = TranslatorService.getCurrentLanguageName();
this.userInfo = JSON.parse(localStorage.getItem('digitalIDUser'));
this.checkNFCStatus();
// **checkIfAvailable FAIO **//
this.checkIfAvailable();
// **getSharedData of IMEI_USER_DATA and REGISTER_DATA_FOR_LOGIIN to set defult value **//
this.username = localStorage.getItem('user');
this.password = localStorage.getItem('password');
this.empname = localStorage.getItem('emp-name');
this.button();
}
checkIfAvailable() {
this.faio.isAvailable().then(
options => {
this.isFaceorFinger = options;
this.button();
}, () => {
this.isFaceorFinger = null;
this.button();
}
);
}
button() {
this.buttons = [
[{
title: 'login,verify-with-fingerprint',
url: null,
icon: 'assets/icon/login/102.png',
settings: new ButtonSettings(true, true, true, true),
value: 2,
disabled: this.isFaceorFinger === 'finger' || this.isFaceorFinger === 'biometric' ? false : true,
visible: this.onlySMSBox,
buttonClass: 'buttonClassWhite',
pClass: 'pClassMyFileIconBlack',
class: 'nationalIdIcon',
},
{
title: 'login,verify-with-faceid',
url: null,
icon: 'assets/icon/login/101.png',
settings: new ButtonSettings(true, true, true, true),
value: 3,
disabled: this.isFaceorFinger === 'face' ? false : true,
visible: this.onlySMSBox,
buttonClass: 'buttonClassWhite',
pClass: 'pClassMyFileIconBlack',
class: 'nationalIdIcon',
},
{
title: 'login,verify-with-whatsapp',
url: null,
icon: 'assets/icon/login/104.png',
settings: new ButtonSettings(true, true, true, true),
value: 4,
visible: true,
buttonClass: 'buttonClassWhite',
pClass: 'pClassMyFileIconBlack',
class: 'nationalIdIcon',
},
{
title: 'login,verify-with-sms',
url: null,
icon: 'assets/icon/login/103.png',
settings: new ButtonSettings(true, true, true, true),
value: 1,
visible: true,
buttonClass: 'buttonClassWhite',
pClass: 'pClassMyFileIconBlack',
class: 'nationalIdIcon'
}]
];
}
confirm(el: any) {
this.selectedOption = this.selectedOption && !this.onlySMSBox ? this.selectedOption : el.value;
switch (el.value) {
case 1:
console.log(el.value);
localStorage.setItem("login-type", el.value);
console.log("login-type: " + localStorage.getItem("login-type"))
if (this.FFloginType == 3 || this.FFloginType == 2) {
this.cs.setActiveTypeLogin(el.value);
} else {
this.cs.setActiveTypeLogin(0);
}
this.loginWithSMS(el);
break;
case 2:
localStorage.setItem('login-type', el.value);
this.loginWithFingurePrint(el);
break;
case 3:
localStorage.setItem('login-type', el.value);
this.faceReconization(el);
break;
case 4:
console.log(el.value);
localStorage.setItem("login-type", el.value);
if (this.FFloginType == 3 || this.FFloginType == 2) {
this.cs.setActiveTypeLogin(el.value);
} else {
this.cs.setActiveTypeLogin(0);
}
this.loginWithWhatsapp(el);
break;
default:
break;
}
this.cs.sharedService.setSharedData(this.selectedOption, AuthenticationService.LAST_LOGIN);
}
loginWithSMS(el) {
if (!el.disabled) {
if (this.loginData.LogInTokenID) {
this.sendActivationCode(1);
} else {
// this.checkUserAuthentication(1);
// this.checkUserAuthentication();**
}
}
}
loginWithWhatsapp(el) {
if (!el.disabled) {
if (this.loginData.LogInTokenID) {
this.sendActivationCode(2);
} else {
// this.checkUserAuthentication(2);
}
}
}
public sendActivationCode(type: number) {
const request = new SendActivationByType();
this.authService.setPublicFields(request);
request.OTP_SendType = type;
request.MobileNumber = this.loginData.MobileNumber;
request.IsMobileFingerPrint = 0;
request.P_USER_NAME = this.loginData.P_USER_NAME;
request.LogInTokenID = this.loginData.LogInTokenID;
request.P_LEGISLATION_CODE = this.loginData.P_LEGISLATION_CODE;//"SA";
// request.VersionID ="2.0";
// request.LanguageID = imeiData && imeiData.PreferredLanguage || request.LanguageID;
this.authService
.sendActivationCodeByType(
request,
() => { },
this.ts.trPK("general", "ok")
)
.subscribe((result: any) => {
if (result.isSMSSent) {
// tslint:disable-next-line: max-line-length
this.cs.sharedService.setSharedData({ MobileNumber: this.loginData.MobileNumber, loginType: this.selectedOption }, SMSCheckRequest.SHARED_DATA);
this.cs.openSMSPage();
}
});
}
loginWithFingurePrint(el: any) {
if (!el.disabled) {
this.FFloginType = el.value;
this.startBiometricLoginIfAvailable();
}
}
faceReconization(el: any) {
if (!el.disabled) {
this.FFloginType = el.value;
this.startBiometricLoginIfAvailable();
}
}
private startBiometricLoginIfAvailable() {
this.faio.isAvailable().then(
options => {
this.presentBiometricDialog();
}, () => {
alert('not avaliable ');
}
);
}
private presentBiometricDialog() {
this.faio.show({
title: 'Biometric Authetnciation', // (Android Only) | optional | Default: "<APP_NAME> Biometric Sign On"
subtitle: 'Coolest Plugin ever', // (Android Only) | optional | Default: null
description: this.ts.trPK('general', 'auth-please'), // optional | Default: null
fallbackButtonTitle: this.ts.trPK('general', 'use-pin'), // optional | When disableBackup is false defaults to "Use Pin".
disableBackup: true, // optional | default: false
// clientId: "Fingerprint Authetnciation",
// clientSecret: "Ate343_9347lajF", // Only necessary for Android
// disableBackup: true, // Only for Android(optional)
// localizedFallbackTitle: this.ts.trPK("general", "use-pin"), // Only for iOS
// localizedReason: this.ts.trPK("general", "auth-please") // Only for iOS
}).then((result: any) => {
const request = {
DeviceType: this.cs.getDeviceType(),
DeviceToken: this.deviceToken
};
// this.authService.setPublicFields(request);
// request.MobileNumber = this.loginData.MobileNumber;
// request.P_USER_NAME=this.loginData.P_USER_NAME;
// request.UserName=this.loginData.P_USER_NAME;
// request.LogInTokenID =this.loginData.LogInTokenID;
// request.CompanyID =1;//cs=1 , HMG=2
this.getMobileInfo(request);
}).catch((error: any) => {
console.log(error);
});
}
private getMobileInfo(request: any) {
this.authService.getLoginInfo(request, () => { }, this.ts.trPK('general', 'ok')).subscribe((result: GetLoginInfoResponse) => {
if (result.Mohemm_GetMobileLoginInfoList.length > 0) {
// tslint:disable-next-line: triple-equals
if (result.Mohemm_GetMobileLoginInfoList[0].LoginType == 2 || result.Mohemm_GetMobileLoginInfoList[0].LoginType == 3) {
this.loginTokenID = result.LogInTokenID;
this.checkSMS();
} else {
this.onlySMSBox = false;
this.button();
}
} else {
this.onlySMSBox = false;
this.button();
}
});
}
async checkNFCStatus() {
try {
let nfcStatus = await this.nfc.enabled();
console.log("nfc status >>>>>>>>>>" + nfcStatus);
this.isNFCAvailable = true;
} catch (err) {
console.log("Error reading tag", err);
if (err === "NO_NFC") {
this.isNFCAvailable = false;
} else if (err === "NFC_DISABLED") {
this.isNFCAvailable = true;
} else {
this.isNFCAvailable = false;
}
}
}
public checkSMS() {
const data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
const request = new SMSCheckRequest();
request.LogInTokenID = data.LogInTokenID;
request.activationCode = '';
request.P_USER_NAME = data.P_USER_NAME;
request.MobileNumber = data.MobileNumber;
request.IsDeviceNFC = this.isNFCAvailable;
this.authService.checkSMS(request, () => { }, this.ts.trPK('general', 'ok'))
.subscribe((result: SMSCheckResponse) => {
if (this.cs.validResponse(result)) {
// Wifi Credientials
CommonService.MOHEMM_WIFI_SSID = result.Mohemm_Wifi_SSID;
CommonService.MOHEMM_WIFI_PASSWORD = result.Mohemm_Wifi_Password;
AuthenticationService.servicePrivilage = result.Privilege_List;
this.authService.setAuthenticatedUser(result).subscribe(() => {
localStorage.setItem('emp-name', result.MemberInformationList[0].EMPLOYEE_NAME);
this.user_name = result.MemberInformationList[0].EMPLOYEE_NAME;
const currDateTime = moment().format('MMM DD , YYYY HH:mm');
localStorage.setItem('login-at', currDateTime);
if (this.platform.is('cordova')) {
this.insertMobileLogin();
}
this.cs.openHome();
});
}
});
}
public insertMobileLogin() {
const request = new GetLoginInfoRequest();
this.authService.setPublicFields(request);
request.MobileNumber = this.loginData.MobileNumber;
request.P_USER_NAME = this.loginData.P_USER_NAME;
request.UserName = this.loginData.P_USER_NAME;
request.LogInTokenID = this.loginData.LogInTokenID;
request.CompanyID = 1; // CompanyID
request.DeviceType = this.cs.getDeviceType();
request.DeviceToken = this.deviceToken; // "5ca8a69cf1804db55264c349edffb99b9d63acd9fa9b6b18956bcb2ad3f2ba36";//this.deviceToken;
// request.TokenID=
request.LoginType = this.selectedOption;
request.EmployeeName = this.user_name;
this.authService.insertMobileLoginInfo(request, () => { }, this.ts.trPK('general', 'ok'), this.isPostNoLoad)
.subscribe((result: any) => {
console.log('successful insertMobileLoginInfo');
});
}
// do silent login
private checkUserAuthentication() {
this.cs.startLoading();
const request = new LoginRequest();
request.P_USER_NAME = this.username;
request.P_LANGUAGE = 'US'; // this.language;
request.P_PASSWORD = this.password;
this.authService
.login(request, () => {
console.log('error here');
}, this.ts.trPK('general', 'ok'))
.subscribe((result: CheckUserAuthenticationResponse) => {
console.log('success');
this.cs.stopLoading();
if (this.cs.validResponse(result)) {
this.loginData = new LoginModel();
this.loginData.LogInTokenID = result.LogInTokenID;
this.loginData.MobileNumber = result.MemberLoginList.P_MOBILE_NUMBER;
this.loginData.P_USER_NAME = this.username;
this.loginData.EmployeeName = this.user_name;
this.sharedData.setSharedData(this.loginData, AuthenticationService.LOGIN_DATA);
this.cs.sharedService.setSharedData(this.loginData.P_USER_NAME, LoginRequest.SHARED_DATA);
this.confirm(this.loginType);
} else {
if (result.IsPasswordExpired) {
// alert("dont forget to handelpresentPasswordExpiredDialog() ");
// this.presentPasswordExpiredDialog(); *****
}
}
});
}
private handleAppUpdate(result) {
this.iosLink = result.IOSLink;
this.androidLink = result.AndroidLink;
if (this.platform.is('android')) {
if (this.androidLink) {
window.open(this.androidLink, '_system');
}
} else if (this.platform.is('ios')) {
if (this.iosLink) {
window.open(this.iosLink, '_system');
}
}
}
public checkAppUpdated() {
this.authService.checkApplicationVersion(() => { }).subscribe((result: CheckAppVersionResponse) => {
// tslint:disable-next-line: triple-equals
if (result.MessageStatus == 2 && result.ErrorType == 4) {
this.appUpdate(result.ErrorEndUserMessage, result);
} else if (result.MessageStatus == 1) {
this.checkUserAuthentication();
}
});
}
async appUpdate(msg, result) {
const modal = await this.modalController.create({
component: AppUpdateComponent,
cssClass: 'app-update-modal-css',
componentProps: {'msg':msg}
});
modal.onDidDismiss().then((data) => {
this.handleAppUpdate(result);
});
return await modal.present();
}
checkAccess(el: any, isDigitalID = false, buttonType?, isBusinessID = false,) {
const data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
if (isDigitalID || isBusinessID) {
const sourceType = isDigitalID === true ? 'digitalID' : 'businessID';
this.button();
this.checkButtonType(buttonType, sourceType);
}
else {
console.log(data);
this.loginType = el;
if (this.accessFromOutSide) {
this.checkAppUpdated();
} else {
// tslint:disable-next-line: triple-equals
if (!data == undefined) {
this.confirm(this.loginType);
} else {
this.checkAppUpdated();
}
}
}
}
checkButtonType(typeNumber, sourceType) {
let buttonSelected;
this.buttons.forEach(element => {
element.forEach(elementValue => {
if(typeNumber === elementValue.value){
buttonSelected = elementValue;
}else{
elementValue.visible = false;
}
});
});
if (sourceType === 'digitalID') {
this.sharedData.setSharedData(true, "loginWithDigitalIDButton");
} else {
this.sharedData.setSharedData(true, "loginWithBusinessIDButton");
}
this.loginType = buttonSelected;
this.checkAppUpdated();
}
}