import { Socket } from 'socket.io'; import { SSH } from './interfaces'; const localhost = (host: string): boolean => process.getuid() === 0 && (host === 'localhost' || host === '0.0.0.0' || host === '127.0.0.1'); export default ( { request: { headers }, client: { conn } }: Socket, { user, host, port, auth }: SSH ): { args: string[]; user: boolean } => ({ args: localhost(host) ? ['login', '-h', conn.remoteAddress.split(':')[3]] : [ 'ssh', address(headers.referer, user, host), '-p', `${port}`, '-o', `PreferredAuthentications=${auth}`, ], user: localhost(host) || user !== '' || user.includes('@') || address(headers.referer, user, host).includes('@'), }); function address(referer: string, user: string, host: string): string { const match = referer.match('.+/ssh/([^/]+)$'); const fallback = user ? `${user}@${host}` : host; return match ? `${match[1]}@${host}` : fallback; }