mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-31 04:09:43 +02:00
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import { type Token, decodeToken } from '@hcengineering/server-token'
|
|
import { type IncomingHttpHeaders } from 'http'
|
|
|
|
const extractCookieToken = (cookie?: string): string | null => {
|
|
if (cookie === undefined || cookie === null) {
|
|
return null
|
|
}
|
|
|
|
const cookies = cookie.split(';')
|
|
const tokenCookie = cookies.find((cookie) => cookie.toLocaleLowerCase().includes('token'))
|
|
if (tokenCookie === undefined) {
|
|
return null
|
|
}
|
|
|
|
const encodedToken = tokenCookie.split('=')[1]
|
|
if (encodedToken === undefined) {
|
|
return null
|
|
}
|
|
|
|
return encodedToken
|
|
}
|
|
|
|
const extractAuthorizationToken = (authorization?: string): string | null => {
|
|
if (authorization === undefined || authorization === null) {
|
|
return null
|
|
}
|
|
const encodedToken = authorization.split(' ')[1]
|
|
|
|
if (encodedToken === undefined) {
|
|
return null
|
|
}
|
|
|
|
return encodedToken
|
|
}
|
|
|
|
export function readToken (headers: IncomingHttpHeaders): string | undefined {
|
|
try {
|
|
return extractAuthorizationToken(headers.authorization) ?? extractCookieToken(headers.cookie) ?? undefined
|
|
} catch {
|
|
return undefined
|
|
}
|
|
}
|
|
|
|
export function extractToken (headers: IncomingHttpHeaders): Token | undefined {
|
|
try {
|
|
const tokenStr = readToken(headers)
|
|
|
|
return tokenStr !== undefined ? decodeToken(tokenStr) : undefined
|
|
} catch {
|
|
return undefined
|
|
}
|
|
}
|