다른디바이스에서 로그인했을때 처리 로직 구현.

This commit is contained in:
leejinho 2020-01-03 17:39:44 +09:00
parent 69bb77e92c
commit f7b797192d
17 changed files with 101 additions and 28 deletions

View File

@ -445,8 +445,6 @@ ipcMain.on(
const downloadPath = args[0] as string;
if (!!downloadPath && downloadPath.length > 0) {
console.log('in electron', downloadPath);
appStorage.downloadPath = downloadPath;
log.info('downloadPath is changed to ', appStorage.downloadPath);

View File

@ -16,6 +16,7 @@ import {
import { AppUserInfo, KEY_APP_USER_INFO } from '@app/types/app-user-info.type';
import { environment } from '../../environments/environment';
import * as AuthenticationStore from '@app/store/account/authentication';
import { KEY_LOGOUT_INFO, LogoutInfo } from '@app/types';
@Injectable({
providedIn: 'root'
@ -42,14 +43,14 @@ export class AppAutoLoginGuard implements CanActivate {
environment.customConfig.appKey
);
const personLogout: boolean = this.sessionStorageService.get(
'PERSON_LOGOUT'
const personLogout: LogoutInfo = this.sessionStorageService.get(
KEY_LOGOUT_INFO
);
if (
!!appUserInfo &&
appUserInfo.settings.general.autoLogin &&
!personLogout
!personLogout.personLogout
) {
this.store.dispatch(
AuthenticationStore.webLogin({

View File

@ -857,7 +857,6 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
this.nativeService
.selectSaveFilePath(value.fileInfo.fileName)
.then(result => {
console.log(result);
if (!!result && result.length > 0) {
this.saveFile(value, result);
} else {

View File

@ -104,8 +104,6 @@ export class ProfileDialogComponent implements OnInit, OnDestroy {
this.editableProfileImage =
environment.productConfig.CommonSetting.editableProfileImage;
console.log(data.openProfileOptions);
}
ngOnInit() {

View File

@ -3,6 +3,7 @@ import { Component, OnInit, OnDestroy } from '@angular/core';
import { Store, select } from '@ngrx/store';
import { Company } from '@ucap-webmessenger/api-external';
import { ServerErrorCode } from '@ucap-webmessenger/protocol';
import * as AppStore from '@app/store';
import * as AuthenticationStore from '@app/store/account/authentication';
@ -24,8 +25,12 @@ import {
} from '@app/layouts/messenger/dialogs/account/notice.dialog.component';
import { environment } from '../../../../environments/environment';
import { LocalStorageService } from '@ucap-webmessenger/web-storage';
import {
LocalStorageService,
SessionStorageService
} from '@ucap-webmessenger/web-storage';
import { AppUserInfo, KEY_APP_USER_INFO } from '@app/types/app-user-info.type';
import { LogoutInfo, KEY_LOGOUT_INFO } from '@app/types';
@Component({
selector: 'app-page-account-login',
@ -79,7 +84,8 @@ export class LoginPageComponent implements OnInit, OnDestroy {
private store: Store<any>,
private router: Router,
private dialogService: DialogService,
private localStorageService: LocalStorageService
private localStorageService: LocalStorageService,
private sessionStorageService: SessionStorageService
) {
this.useRememberMe =
environment.productConfig.authentication.rememberMe.use;
@ -163,7 +169,33 @@ export class LoginPageComponent implements OnInit, OnDestroy {
this.customInitilize();
}
customInitilize() {
async customInitilize() {
const personLogout: LogoutInfo = this.sessionStorageService.get(
KEY_LOGOUT_INFO
);
if (
!!personLogout &&
!!personLogout.reasonCode &&
personLogout.reasonCode === ServerErrorCode.ERRCD_DUPLICATE
) {
const result = await this.dialogService.open<
AlertDialogComponent,
AlertDialogData,
AlertDialogResult
>(AlertDialogComponent, {
width: '360px',
data: {
title: '',
html: `다른 디바이스에서 로그인하였습니다.<br/> * Ip : ${personLogout.ip}<br/> * Mac : ${personLogout.mac}`
}
});
this.sessionStorageService.set<LogoutInfo>(KEY_LOGOUT_INFO, {
personLogout: true
} as LogoutInfo);
}
// Daesang..
this.fixedCompany = environment.companyConfig.fixedCompanyCode;
this.fixedNotiBtnText = '이용 주의사항';

View File

@ -307,7 +307,7 @@ export class MainPageComponent implements OnInit, OnDestroy {
.pipe(
take(1),
map(res => {
console.log(res);
this.logger.debug(res);
}),
catchError(error => of(this.logger.debug(error)))
)

View File

@ -10,7 +10,9 @@ import {
KEY_LOGIN_INFO,
KEY_LOGIN_RES_INFO,
KEY_VER_INFO,
KEY_URL_INFO
KEY_URL_INFO,
KEY_LOGOUT_INFO,
LogoutInfo
} from '../types';
import { PasswordUtil } from '@ucap-webmessenger/pi';
@ -96,7 +98,7 @@ export class AppAuthenticationService {
environment.customConfig.appKey
);
this.sessionStorageService.remove('PERSON_LOGOUT');
this.sessionStorageService.remove(KEY_LOGOUT_INFO);
}
logout() {
@ -104,7 +106,5 @@ export class AppAuthenticationService {
this.sessionStorageService.remove(KEY_VER_INFO);
this.sessionStorageService.remove(KEY_LOGIN_INFO);
this.sessionStorageService.remove(KEY_URL_INFO);
this.sessionStorageService.set<boolean>('PERSON_LOGOUT', true);
}
}

View File

@ -10,7 +10,8 @@ import {
SSVC_TYPE_LOGOUT_REMOTE_NOTI,
AuthenticationProtocolService,
LogoutResponse,
LogoutRemoteNotification
LogoutRemoteNotification,
LogoutNotification
} from '@ucap-webmessenger/protocol-authentication';
import { NGXLogger } from 'ngx-logger';
@ -97,13 +98,17 @@ import {
SSVC_TYPE_UMG_NOTI,
UmgNotiNotification
} from '@ucap-webmessenger/protocol-umg';
import { LocalStorageService } from '@ucap-webmessenger/web-storage';
import {
LocalStorageService,
SessionStorageService
} from '@ucap-webmessenger/web-storage';
import { AppUserInfo, KEY_APP_USER_INFO } from '@app/types/app-user-info.type';
import { environment } from '../../environments/environment';
import { NotificationMethod } from '@ucap-webmessenger/core';
import { Dictionary } from '@ngrx/entity';
import { MessageType } from '@ucap-webmessenger/api-message';
import { LogoutInfo, KEY_LOGOUT_INFO } from '@app/types';
@Injectable()
export class AppNotificationService {
@ -117,6 +122,7 @@ export class AppNotificationService {
private statusProtocolService: StatusProtocolService,
private umgProtocolService: UmgProtocolService,
private localStorageService: LocalStorageService,
private sessionStorageService: SessionStorageService,
@Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService,
private store: Store<any>,
private logger: NGXLogger
@ -129,11 +135,18 @@ export class AppNotificationService {
switch (notiOrRes.SSVC_TYPE) {
case SSVC_TYPE_LOGOUT_RES:
{
const res = notiOrRes as LogoutResponse;
const res = notiOrRes as LogoutNotification;
this.logger.debug(
'Notification::authenticationProtocolService::LogoutResponse',
res
);
this.sessionStorageService.set<LogoutInfo>(KEY_LOGOUT_INFO, {
personLogout: true,
reasonCode: res.reasonCode,
ip: res.ip,
mac: res.mac
} as LogoutInfo);
}
break;
case SSVC_TYPE_LOGOUT_REMOTE_NOTI:

View File

@ -48,7 +48,9 @@ import {
KEY_LOGIN_INFO,
EnvironmentsInfo,
KEY_ENVIRONMENTS_INFO,
KEY_URL_INFO
KEY_URL_INFO,
LogoutInfo,
KEY_LOGOUT_INFO
} from '@app/types';
import { AppAuthenticationService } from '@app/services/authentication.service';
import { NGXLogger } from 'ngx-logger';
@ -174,6 +176,10 @@ export class Effects {
switchMap(action => {
return this.authenticationProtocolService.logout({}).pipe(
map(res => {
this.sessionStorageService.set<LogoutInfo>(KEY_LOGOUT_INFO, {
personLogout: true
} as LogoutInfo);
this.store.dispatch(loginRedirect());
}),
catchError(error => of(error))

View File

@ -1,5 +1,6 @@
export * from './environment.type';
export * from './login-info.type';
export * from './logout-info.type';
export * from './userselect.dialog.type';
export * from './right-drawer.type';
export * from './sticker-info.type';

View File

@ -0,0 +1,8 @@
export const KEY_LOGOUT_INFO = 'ucap::LOGOUT_INFO';
export interface LogoutInfo {
personLogout: boolean;
reasonCode?: number;
ip?: string;
mac?: string;
}

View File

@ -74,7 +74,7 @@ export class BrowserNativeService extends NativeService {
getNetworkInfo(): Promise<any> {
return new Promise<any>((resolve, reject) => {
resolve(null);
resolve([{ ip: 'Browser', mac: 'browser' }]);
});
}

View File

@ -5,7 +5,8 @@ import {
ProtocolDecoder,
ProtocolMessage,
PacketBody,
decodeProtocolMessage
decodeProtocolMessage,
ProtocolNotification
} from '@ucap-webmessenger/protocol';
// tslint:disable-next-line: no-empty-interface
@ -15,6 +16,12 @@ export interface LogoutResponse extends ProtocolResponse {
reasonCode?: number;
}
export interface LogoutNotification extends ProtocolNotification {
reasonCode?: number;
ip?: string;
mac?: string;
}
export const encodeLogout: ProtocolEncoder<LogoutRequest> = (
req: LogoutRequest
) => {
@ -27,6 +34,16 @@ export const decodeLogout: ProtocolDecoder<LogoutResponse> = (
message: ProtocolMessage
) => {
return decodeProtocolMessage(message, {
reasonCode: message.bodyList[0]
reasonCode: Number(message.bodyList[0])
} as LogoutResponse);
};
export const decodeLogoutNotification: ProtocolDecoder<LogoutNotification> = (
message: ProtocolMessage
) => {
return decodeProtocolMessage(message, {
reasonCode: Number(message.bodyList[0]),
ip: !!message.bodyList[1] ? message.bodyList[1] : '',
mac: !!message.bodyList[2] ? message.bodyList[2] : ''
} as LogoutNotification);
};

View File

@ -23,7 +23,8 @@ import {
LogoutRequest,
LogoutResponse,
encodeLogout,
decodeLogout
decodeLogout,
decodeLogoutNotification
} from '../protocols/logout';
import {
encodeLogoutRemote,
@ -56,7 +57,9 @@ export class AuthenticationProtocolService {
switch (message.subServiceType) {
case SSVC_TYPE_LOGOUT_RES:
{
this.logoutNotificationSubject.next(decodeLogout(message));
this.logoutNotificationSubject.next(
decodeLogoutNotification(message)
);
}
break;
case SSVC_TYPE_LOGOUT_REMOTE_NOTI:

View File

@ -61,7 +61,6 @@ export class SoundViewerComponent implements OnInit {
}
onChangeTimeSlider(e: MatSliderChange): void {
console.log('onChangeTimeSlider', e.value);
this.audioPlayer.nativeElement.currentTime = e.value;
}

View File

@ -61,7 +61,6 @@ export class VideoViewerComponent implements OnInit {
}
onChangeTimeSlider(e: MatSliderChange): void {
console.log('onChangeTimeSlider', e.value);
this.audioPlayer.nativeElement.currentTime = e.value;
}

View File

@ -115,7 +115,6 @@ export class VirtualScrollTreeFlatDataSource<T, F> extends DataSource<F> {
}
disconnect() {
console.log('VirtualScrollTreeFlatDataSource disconnect');
if (!!this.connectSubject) {
this.connectSubject.next();
this.connectSubject.unsubscribe();