import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { ProtocolService, PacketBody, PacketBodyValue } from '@ucap-webmessenger/protocol'; import { LoginRequest, LoginResponse } from '../models/login'; import { SVC_TYPE_LOGIN, SSVC_TYPE_LOGIN_REQ, SVC_TYPE_LOGOUT, SSVC_TYPE_LOGOUT_REQ } from '../types/service'; import { RoleCode } from '../types/role-code'; import { LogoutRequest, LogoutResponse } from '../models/logout'; @Injectable({ providedIn: 'root' }) export class AuthenticationProtocolService { constructor(private protocolService: ProtocolService) {} public login(req: LoginRequest): Observable { const bodyList: PacketBody[] = []; bodyList.push( { type: PacketBodyValue.String, value: req.loginId }, { type: PacketBodyValue.String, value: req.loginPw }, { type: PacketBodyValue.String, value: req.deviceType }, { type: PacketBodyValue.String, value: req.deviceId }, { type: PacketBodyValue.String, value: req.token }, { type: PacketBodyValue.String, value: req.localeCode }, { type: PacketBodyValue.String, value: req.pushId }, { type: PacketBodyValue.String, value: req.companyCode }, { type: PacketBodyValue.Integer, value: req.passwordEncodingType }, { type: PacketBodyValue.String, value: req.clientVersion }, { type: PacketBodyValue.String, value: req.reconnect ? 'Y' : 'N' }, { type: PacketBodyValue.String, value: req.ip }, { type: PacketBodyValue.String, value: req.hostName }, { type: PacketBodyValue.Integer, value: req.encriptionData ? 2 : 1 }, { type: PacketBodyValue.String, value: req.userSpecificInformation }, { type: PacketBodyValue.String, value: req.productId }, { type: PacketBodyValue.String, value: req.productName } ); if (req.encriptionData) { bodyList.push( { type: PacketBodyValue.String, value: req.encriptionData }, { type: PacketBodyValue.String, value: req.accessToken } ); } return this.protocolService .call(SVC_TYPE_LOGIN, SSVC_TYPE_LOGIN_REQ, ...bodyList) .pipe( map(res => { return { loginId: res.bodyList[0], userSeq: res.bodyList[1], userInfo: res.bodyList[2], token: res.bodyList[3], companyCode: res.bodyList[4], departmentCode: res.bodyList[5], userId: res.bodyList[6], passwordEncodingType: res.bodyList[7], encriptionKey: res.bodyList[8], existingPid: res.bodyList[9] === 'Y' ? true : false, roleCode: res.bodyList[10] as RoleCode, statusMessage1: res.bodyList[11], statusMessage2: res.bodyList[12], statusMessage3: res.bodyList[13], fileDownloadAllow: res.bodyList[14] === 'Y' ? true : false, fileRetentionPeriod: res.bodyList[15], passwordValidityPeriod: res.bodyList[16], privateInformationAgree: res.bodyList[17] === 'Y' ? true : false, madn: res.bodyList[18], hardPhoneSadn: res.bodyList[19], fmcSadn: res.bodyList[20], pbxIndex: res.bodyList[21], passwordExpired: res.bodyList[22] === 'Y' ? true : false, validAccount: res.bodyList[23] === 'Y' ? true : false, validDevice: res.bodyList[24] === 'Y' ? true : false, useableDevice: res.bodyList[25] === 'Y' ? true : false, deviceScreenForcedLock: res.bodyList[26] === 'Y' ? true : false, tokenString: res.bodyList[27], havePermissionsForIntegratedMessageBox: res.bodyList[28] === 'Y' ? true : false, talkWithMeBotSeq: res.bodyList[29], pinCode: res.bodyList[30], permissionsForViewSchedule: res.bodyList[31], havePermissionsForDevice: res.bodyList[32] === 'Y' ? true : false } as LoginResponse; }) ); } public logout(req: LogoutRequest): Observable { return this.protocolService .call(SVC_TYPE_LOGOUT, SSVC_TYPE_LOGOUT_REQ) .pipe( map(res => { return {} as LogoutResponse; }) ); } }