Download packages/server/src/middleware/socketIdentity.ts from QSLY/ghp: direct link, hf CLI and curl.
- Browser
- Download file 1.13 kB
-
https://huggingface.co/spaces/QSLY/ghp/resolve/main/packages/server/src/middleware/socketIdentity.ts
- Command line
-
hf download hf://spaces/QSLY/ghp/packages/server/src/middleware/socketIdentity.ts
-
curl -L -o socketIdentity.ts https://huggingface.co/spaces/QSLY/ghp/resolve/main/packages/server/src/middleware/socketIdentity.ts
1.13 kB
| import type { TypedServer, TypedSocket } from './types.js' | |
| import { getIdentityFromCookieHeader } from '../services/identityService.js' | |
| import { logger } from '../utils/logger.js' | |
| import { userRepo } from '../repositories/userRepository.js' | |
| /** | |
| * Socket identity guard: every websocket connection must carry a valid | |
| * mt_identity cookie signed by the server. | |
| */ | |
| export function attachSocketIdentity(io: TypedServer): void { | |
| io.use((socket, next) => { | |
| const cookieHeader = socket.handshake.headers.cookie | |
| const identity = getIdentityFromCookieHeader(typeof cookieHeader === 'string' ? cookieHeader : undefined) | |
| if (!identity) { | |
| logger.warn('Socket identity verification failed', { | |
| socketId: socket.id, | |
| hasCookieHeader: Boolean(cookieHeader), | |
| origin: socket.handshake.headers.origin ?? null, | |
| }) | |
| next(new Error('UNAUTHENTICATED')) | |
| return | |
| } | |
| userRepo.touch(identity.userId) | |
| socket.data.identityUserId = identity.userId | |
| logger.debug('实时连接身份验证通过', { | |
| socketId: socket.id, | |
| userId: identity.userId, | |
| }) | |
| next() | |
| }) | |
| } | |