mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-05 19:20:12 +08:00
refactor: clean up unused code
This commit is contained in:
1 parent
21ff710f83
commit
156abc044a
3 files changed
+8
-91
No files matched your search
@@ -2,7 +2,7 @@ import { Server } from 'socket.io'
|
|||||||
import type { Socket } from 'socket.io'
|
import type { Socket } from 'socket.io'
|
||||||
import validator from 'validator'
|
import validator from 'validator'
|
||||||
import type { Server as HttpServer } from 'http'
|
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 SessionMiddleware from '../middleware/session.js'
|
||||||
import logger from '../utils/logger.js'
|
import logger from '../utils/logger.js'
|
||||||
|
|
||||||
@@ -34,11 +34,11 @@ export function pushToSession(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
async function onConnect(socket: Socket) {
|
||||||
async function connectContainer(socket: Socket, next: (err?: Error) => void) {
|
|
||||||
const user = (socket.request as any).session?.passport?.user
|
const user = (socket.request as any).session?.passport?.user
|
||||||
if (!user) {
|
if (!user) {
|
||||||
next(new Error('User not found.'))
|
socket.emit('error', 'User not found.')
|
||||||
|
socket.disconnect()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const { sessionId } = socket.handshake.query
|
const { sessionId } = socket.handshake.query
|
||||||
@@ -48,27 +48,18 @@ async function connectContainer(socket: Socket, next: (err?: Error) => void) {
|
|||||||
!validator.isMongoId(sessionId)
|
!validator.isMongoId(sessionId)
|
||||||
) {
|
) {
|
||||||
logger.warn('Invalid Session ID.', user.username, sessionId)
|
logger.warn('Invalid Session ID.', user.username, sessionId)
|
||||||
next(new Error('Invalid Session ID.'))
|
socket.emit('error', 'Invalid Session ID.')
|
||||||
|
socket.disconnect()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const session = await Session.findById(sessionId)
|
const session = await Session.findById(sessionId)
|
||||||
if (!session) {
|
if (!session) {
|
||||||
next(new Error('Session not found.'))
|
socket.emit('error', 'Session not found.')
|
||||||
|
socket.disconnect()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.data.context = {
|
|
||||||
session,
|
|
||||||
}
|
|
||||||
next()
|
|
||||||
}
|
|
||||||
|
|
||||||
function onConnect(socket: Socket) {
|
|
||||||
const { session } = socket.data.context as {
|
|
||||||
session: ISession
|
|
||||||
}
|
|
||||||
|
|
||||||
const socketCallback = (event: string, ...data: any[]) => {
|
const socketCallback = (event: string, ...data: any[]) => {
|
||||||
socket.emit(event, ...data)
|
socket.emit(event, ...data)
|
||||||
}
|
}
|
||||||
@@ -84,7 +75,6 @@ export default (server: HttpServer) => {
|
|||||||
const io = new Server(server)
|
const io = new Server(server)
|
||||||
|
|
||||||
io.engine.use(SessionMiddleware)
|
io.engine.use(SessionMiddleware)
|
||||||
io.use(connectContainer)
|
|
||||||
|
|
||||||
io.on('connection', onConnect)
|
io.on('connection', onConnect)
|
||||||
io.on('connect_error', (err) => {
|
io.on('connect_error', (err) => {
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import fs from 'fs/promises'
|
import fs from 'fs/promises'
|
||||||
import { Duplex } from 'stream'
|
|
||||||
import Docker from 'dockerode'
|
import Docker from 'dockerode'
|
||||||
import config, { getQuestImage } from '../config.js'
|
import config, { getQuestImage } from '../config.js'
|
||||||
import logger from '../utils/logger.js'
|
import logger from '../utils/logger.js'
|
||||||
import { connectToSSH } from './ssh.js'
|
|
||||||
|
|
||||||
const engine = new Docker()
|
const engine = new Docker()
|
||||||
|
|
||||||
@@ -100,32 +98,6 @@ export async function getAndStartContainer(
|
|||||||
return container
|
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) {
|
export async function deleteContainer(id: string) {
|
||||||
const container = engine.getContainer(id)
|
const container = engine.getContainer(id)
|
||||||
if (!container) {
|
if (!container) {
|
||||||
|
|||||||
@@ -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,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user