로그인시 로컬 IP, MAC 정보 송신하도록 수정 :: 세션 로그아웃시 해당 정보 내려주기로 함.

This commit is contained in:
leejinho 2019-12-24 14:56:15 +09:00
parent a9342ac745
commit ec2c822405
7 changed files with 79 additions and 28 deletions

View File

@ -2,6 +2,7 @@ import { app, ipcMain, IpcMainEvent, Tray, Menu, shell } from 'electron';
import path from 'path';
import fse from 'fs-extra';
import semver from 'semver';
import os from 'os';
import AutoLaunch from 'auto-launch';
@ -350,6 +351,27 @@ ipcMain.on(UpdaterChannel.Check, (event: IpcMainEvent, ...args: any[]) => {
}
});
ipcMain.on(
MessengerChannel.GetNetworkInfo,
(event: IpcMainEvent, ...args: any[]) => {
const interfaces = os.networkInterfaces();
const addresses: { ip: string; mac: string }[] = [];
// tslint:disable-next-line: forin
for (const k in interfaces) {
// tslint:disable-next-line: forin
for (const k2 in interfaces[k]) {
const address = interfaces[k][k2];
if (address.family === 'IPv4' && !address.internal) {
addresses.push({ ip: address.address, mac: address.mac });
}
}
}
event.returnValue = addresses;
}
);
ipcMain.on(
MessengerChannel.ChangeAutoLaunch,
(event: IpcMainEvent, ...args: any[]) => {

View File

@ -1,4 +1,4 @@
import { Injectable } from '@angular/core';
import { Injectable, Inject } from '@angular/core';
import {
Resolve,
ActivatedRouteSnapshot,
@ -62,10 +62,12 @@ import {
} from '@ucap-webmessenger/api-external';
import { DeviceType } from '@ucap-webmessenger/core';
import { StatusCode } from '@ucap-webmessenger/api';
import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native';
@Injectable()
export class AppMessengerResolver implements Resolve<void> {
constructor(
@Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService,
private store: Store<any>,
private sessionStorageService: SessionStorageService,
private publicApiService: PublicApiService,
@ -84,7 +86,7 @@ export class AppMessengerResolver implements Resolve<void> {
activatedRouteSnapshot: ActivatedRouteSnapshot,
routerStateSnapshot: RouterStateSnapshot
): void | Observable<void> | Promise<void> {
return new Promise<void>((resolve, reject) => {
return new Promise<void>(async (resolve, reject) => {
let loginRes: LoginResponse;
const loginInfo = this.sessionStorageService.get<LoginInfo>(
@ -94,6 +96,24 @@ export class AppMessengerResolver implements Resolve<void> {
KEY_ENVIRONMENTS_INFO
);
let localIp = '';
let localMac = '';
// get network info
await this.nativeService
.getNetworkInfo()
.then(result => {
if (!!result && result.length > 0) {
if (!!result[0].ip) {
localIp = result[0].ip;
}
if (!!result[0].mac) {
localMac = result[0].mac;
}
}
})
.catch(reason => {});
this.publicApiService
.versionInfo2({
deviceType: environmentsInfo.deviceType,
@ -146,19 +166,18 @@ export class AppMessengerResolver implements Resolve<void> {
passwordEncodingType: 1,
clientVersion: '',
reconnect: false,
ip: 'localhost',
hostName: '',
ip: localIp,
hostName: localMac,
ssoMode: SSOMode.AUTH,
userSpecificInformation: 'PRO_000482',
productId: environment.productConfig.productId,
productName: environment.productConfig.productName
andId: '',
andPushRefreshYn: ''
})
.pipe(
catchError(err => {
switch (err as ServerErrorCode) {
case ServerErrorCode.ERRCD_IDPW:
break;
default:
break;
}

View File

@ -66,6 +66,12 @@ export class BrowserNativeService extends NativeService {
});
}
getNetworkInfo(): Promise<any> {
return new Promise<any>((resolve, reject) => {
resolve(null);
});
}
changeAutoLaunch(autoLaunch: boolean): Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
resolve(true);

View File

@ -72,6 +72,16 @@ export class ElectronNativeService implements NativeService {
return this.logout$;
}
getNetworkInfo(): Promise<any> {
return new Promise<string>((resolve, reject) => {
try {
resolve(this.ipcRenderer.sendSync(MessengerChannel.GetNetworkInfo));
} catch (error) {
reject(error);
}
});
}
changeStatus(): Observable<StatusCode> {
if (!this.changeStatusSubject) {
this.changeStatusSubject = new Subject<StatusCode>();

View File

@ -3,7 +3,8 @@ export enum MessengerChannel {
ChangeStatus = 'UCAP::messenger::changeStatus',
ShowSetting = 'UCAP::messenger::showSetting',
ChangeAutoLaunch = 'UCAP::messenger::changeAutoLaunch',
ChangeStartupHideWindow = 'UCAP::messenger::changeStartupHideWindow'
ChangeStartupHideWindow = 'UCAP::messenger::changeStartupHideWindow',
GetNetworkInfo = 'UCAP::messenger::getNetworkInfo'
}
export enum ChatChannel {

View File

@ -14,6 +14,8 @@ export abstract class NativeService {
abstract changeStatus(): Observable<StatusCode>;
abstract showSetting(): Observable<void>;
abstract getNetworkInfo(): Promise<any>;
abstract changeAutoLaunch(autoLaunch: boolean): Promise<boolean>;
abstract changeStartupHideWindow(
startupHideWindow: boolean

View File

@ -46,14 +46,10 @@ export interface LoginRequest extends ProtocolRequest {
ssoMode: SSOMode;
// 14. 사용자고유정보(s)
userSpecificInformation: string;
// 15. 제품 ID(s)
productId: string;
// 16. 제품명(s)
productName: string;
// 17. EncData(s)
encriptionData?: string;
// 18. AccessToken(s)
accessToken?: string;
// 15. 안드로이드 ID(s)
andId: string;
// 16. push_ID 갱신여부(s)
andPushRefreshYn: string;
}
export interface LoginResponse extends ProtocolResponse {
@ -135,25 +131,20 @@ export const encodeLogin: ProtocolEncoder<LoginRequest> = (
{ 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.pushId }, // 6
{ 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 }
);
{ type: PacketBodyValue.String, value: '' }, // 13
if (req.encriptionData) {
bodyList.push(
{ type: PacketBodyValue.String, value: req.encriptionData },
{ type: PacketBodyValue.String, value: req.accessToken }
{ type: PacketBodyValue.String, value: req.userSpecificInformation },
{ type: PacketBodyValue.String, value: req.andId },
{ type: PacketBodyValue.String, value: req.andPushRefreshYn }
);
}
return bodyList;
};