mirror of
https://github.com/hcengineering/platform.git
synced 2024-11-29 09:09:15 +03:00
Make a sessionId a really uniq and remove checks (#5762)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
9f9fcd9963
commit
395b6da51b
@ -87,7 +87,7 @@ class Connection implements ClientConnection {
|
|||||||
|
|
||||||
private openAction: any
|
private openAction: any
|
||||||
|
|
||||||
private sessionId: string | undefined
|
private readonly sessionId: string | undefined
|
||||||
private closed = false
|
private closed = false
|
||||||
|
|
||||||
private upgrading: boolean = false
|
private upgrading: boolean = false
|
||||||
@ -103,6 +103,25 @@ class Connection implements ClientConnection {
|
|||||||
private readonly onUnauthorized?: () => void,
|
private readonly onUnauthorized?: () => void,
|
||||||
readonly onConnect?: (event: ClientConnectEvent, data?: any) => Promise<void>
|
readonly onConnect?: (event: ClientConnectEvent, data?: any) => Promise<void>
|
||||||
) {
|
) {
|
||||||
|
if (typeof sessionStorage !== 'undefined') {
|
||||||
|
// Find local session id in session storage only if user refresh a page.
|
||||||
|
const sKey = 'session.id.' + this.url
|
||||||
|
let sessionId = sessionStorage.getItem(sKey) ?? undefined
|
||||||
|
if (sessionId === undefined) {
|
||||||
|
sessionId = generateId()
|
||||||
|
console.log('Generate new SessionId', sessionId)
|
||||||
|
this.sessionId = sessionId
|
||||||
|
} else {
|
||||||
|
this.sessionId = sessionId
|
||||||
|
sessionStorage.removeItem(sKey)
|
||||||
|
}
|
||||||
|
window.addEventListener('beforeunload', () => {
|
||||||
|
sessionStorage.setItem(sKey, sessionId as string)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.sessionId = generateId()
|
||||||
|
}
|
||||||
|
|
||||||
this.scheduleOpen(false)
|
this.scheduleOpen(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,16 +249,6 @@ class Connection implements ClientConnection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.upgrading = false
|
this.upgrading = false
|
||||||
if ((resp as HelloResponse).alreadyConnected === true) {
|
|
||||||
this.sessionId = generateId()
|
|
||||||
if (typeof sessionStorage !== 'undefined') {
|
|
||||||
sessionStorage.setItem('session.id.' + this.url, this.sessionId)
|
|
||||||
}
|
|
||||||
console.log('Connection: alreadyConnected, reconnect with new Id')
|
|
||||||
clearTimeout(dialTimeout)
|
|
||||||
this.scheduleOpen(true)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if ((resp as HelloResponse).binary) {
|
if ((resp as HelloResponse).binary) {
|
||||||
this.binaryMode = true
|
this.binaryMode = true
|
||||||
}
|
}
|
||||||
@ -378,17 +387,6 @@ class Connection implements ClientConnection {
|
|||||||
return s as ClientSocket
|
return s as ClientSocket
|
||||||
})
|
})
|
||||||
|
|
||||||
if (this.sessionId === undefined) {
|
|
||||||
// Find local session id in session storage.
|
|
||||||
this.sessionId =
|
|
||||||
typeof sessionStorage !== 'undefined'
|
|
||||||
? sessionStorage.getItem('session.id.' + this.url) ?? undefined
|
|
||||||
: undefined
|
|
||||||
this.sessionId = this.sessionId ?? generateId()
|
|
||||||
if (typeof sessionStorage !== 'undefined') {
|
|
||||||
sessionStorage.setItem('session.id.' + this.url, this.sessionId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (socketId !== this.sockets) {
|
if (socketId !== this.sockets) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,6 @@ export interface HelloRequest extends Request<any[]> {
|
|||||||
export interface HelloResponse extends Response<any> {
|
export interface HelloResponse extends Response<any> {
|
||||||
binary: boolean
|
binary: boolean
|
||||||
reconnect?: boolean
|
reconnect?: boolean
|
||||||
alreadyConnected?: boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -291,16 +291,10 @@ class TSessionManager implements SessionManager {
|
|||||||
await workspace?.closing
|
await workspace?.closing
|
||||||
}
|
}
|
||||||
workspace = this.workspaces.get(wsString)
|
workspace = this.workspaces.get(wsString)
|
||||||
if (sessionId !== undefined && workspace?.sessions?.has(sessionId) === true) {
|
const oldSession = sessionId !== undefined ? workspace?.sessions?.get(sessionId) : undefined
|
||||||
const helloResponse: HelloResponse = {
|
if (oldSession !== undefined) {
|
||||||
id: -1,
|
// Just close old socket for old session id.
|
||||||
result: 'hello',
|
await this.close(ctx, oldSession.socket, wsString)
|
||||||
binary: false,
|
|
||||||
reconnect: false,
|
|
||||||
alreadyConnected: true
|
|
||||||
}
|
|
||||||
await ws.send(ctx, helloResponse, false, false)
|
|
||||||
return { error: new Error('Session already exists') }
|
|
||||||
}
|
}
|
||||||
const workspaceName = workspaceInfo.workspaceName ?? workspaceInfo.workspaceUrl ?? workspaceInfo.workspaceId
|
const workspaceName = workspaceInfo.workspaceName ?? workspaceInfo.workspaceUrl ?? workspaceInfo.workspaceId
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user