refactor: clean up unused code

This commit is contained in:
Justin Lin committed 2025-05-05 19:55:40 +08:00
1 parent 21ff710f83
commit 156abc044a
3 files changed
+8 -91

No files matched your search

+8 -18
View File
@@ -2,7 +2,7 @@ import { Server } from 'socket.io'
import type { Socket } from 'socket.io'
import validator from 'validator'
import type { Server as HttpServer } from 'http'
import { ISession, Session } from '../../../packages/models'
import { Session } from '../../../packages/models'
import SessionMiddleware from '../middleware/session.js'
import logger from '../utils/logger.js'
@@ -34,11 +34,11 @@ export function pushToSession(
}
}
// eslint-disable-next-line no-unused-vars
async function connectContainer(socket: Socket, next: (err?: Error) => void) {
async function onConnect(socket: Socket) {
const user = (socket.request as any).session?.passport?.user
if (!user) {
next(new Error('User not found.'))
socket.emit('error', 'User not found.')
socket.disconnect()
return
}
const { sessionId } = socket.handshake.query
@@ -48,27 +48,18 @@ async function connectContainer(socket: Socket, next: (err?: Error) => void) {
!validator.isMongoId(sessionId)
) {
logger.warn('Invalid Session ID.', user.username, sessionId)
next(new Error('Invalid Session ID.'))
socket.emit('error', 'Invalid Session ID.')
socket.disconnect()
return
}
const session = await Session.findById(sessionId)
if (!session) {
next(new Error('Session not found.'))
socket.emit('error', 'Session not found.')
socket.disconnect()
return
}
socket.data.context = {
session,
}
next()
}
function onConnect(socket: Socket) {
const { session } = socket.data.context as {
session: ISession
}
const socketCallback = (event: string, ...data: any[]) => {
socket.emit(event, ...data)
}
@@ -84,7 +75,6 @@ export default (server: HttpServer) => {
const io = new Server(server)
io.engine.use(SessionMiddleware)
io.use(connectContainer)
io.on('connection', onConnect)
io.on('connect_error', (err) => {
-28
View File
@@ -1,9 +1,7 @@
import fs from 'fs/promises'
import { Duplex } from 'stream'
import Docker from 'dockerode'
import config, { getQuestImage } from '../config.js'
import logger from '../utils/logger.js'
import { connectToSSH } from './ssh.js'
const engine = new Docker()
@@ -100,32 +98,6 @@ export async function getAndStartContainer(
return container
}
export async function attachContainer(
container: Docker.Container,
{ token }: { token: string }
): Promise<Duplex> {
const containerIp = (await container.inspect()).NetworkSettings.Networks[
config.docker.network
].IPAddress
console.log('containerIp', containerIp)
let error: Error | null = null
for (let i = 0; i < 10; i++) {
try {
// eslint-disable-next-line no-await-in-loop
const stream = await connectToSSH(containerIp, { token })
return stream
} catch (err) {
error = err as Error
// eslint-disable-next-line no-await-in-loop
await new Promise((resolve) => {
setTimeout(resolve, 1000)
})
}
}
throw new Error('Failed to connect to SSH', { cause: error })
}
export async function deleteContainer(id: string) {
const container = engine.getContainer(id)
if (!container) {
-45
View File
@@ -1,45 +0,0 @@
import { Client } from 'ssh2'
import { Duplex } from 'stream'
import config from '../config.js'
export async function connectToSSH(
containerIp: string,
{ token }: { token: string }
): Promise<Duplex> {
const conn = new Client()
return new Promise((resolve, reject) => {
conn
.on('ready', () => {
conn.shell(
{
env: {
TOKEN: token,
API_ENDPOINT: config.backendUrl,
ZDOTDIR: '/etc/zsh',
NODE_PATH: '/usr/src/node_modules',
},
},
(err, stream) => {
if (err) {
reject(err)
}
stream.on('close', () => {
conn.end()
})
resolve(stream)
}
)
})
.on('error', (err) => {
reject(err)
})
.connect({
host: containerIp,
port: 22,
username: 'commander',
privateKey: config.docker.keypair.privateKey,
timeout: 5000,
})
})
}