diff --git a/src/assets/scss/options.scss b/src/assets/scss/options.scss index ff7c44c..dc3109b 100644 --- a/src/assets/scss/options.scss +++ b/src/assets/scss/options.scss @@ -8,19 +8,17 @@ width: 16px; z-index: 20; - a { - .toggler { - color: variables.$lgrey; - display: inline-block; - font-size: 16px; - position: absolute; - right: 1em; - top: 0; - z-index: 20; + .toggler { + color: variables.$lgrey; + display: inline-block; + font-size: 16px; + position: absolute; + right: 1em; + top: 0; + z-index: 20; - :hover { - color: variables.$white; - } + :hover { + color: variables.$white; } } @@ -38,18 +36,17 @@ top: 1em; width: 100%; } +} + +#options.opened { + height: 50%; + width: 50%; .editor { - .error { - color: red; - } + display: flex; } - .opened { - height: 50%; - width: 50%; - .editor { - display: flex; - } + .error { + color: red; } } diff --git a/src/client/wetty/term/confiruragtion.ts b/src/client/wetty/term/confiruragtion.ts index 72fb85a..9c0c6e2 100644 --- a/src/client/wetty/term/confiruragtion.ts +++ b/src/client/wetty/term/confiruragtion.ts @@ -1,8 +1,8 @@ import _ from 'lodash'; -import JSON5 from 'json5'; import type { Term } from '../shared/type'; import { copySelected, copyShortcut } from './confiruragtion/clipboard'; +import { onInput } from './confiruragtion/editor'; import { editor } from '../../shared/elements'; import { loadOptions } from './confiruragtion/load'; @@ -14,23 +14,7 @@ export function configureTerm(term: Term): void { const config = JSON.stringify(options, null, 2); if (!_.isNull(editor)) { editor.value = config; - editor.addEventListener('keyup', () => { - try { - const updated = JSON5.parse(editor.value); - const updatedConf = JSON.stringify(updated, null, 2); - editor.value = updatedConf; - editor.classList.remove('error'); - localStorage.options = updatedConf; - Object.keys(updated).forEach(key => { - const value = updated[key]; - term.setOption(key, value); - }); - term.resizeTerm(); - } catch { - // skip - editor.classList.add('error'); - } - }); + editor.addEventListener('keyup', onInput(term)); const toggle = document.querySelector('#options .toggler'); const optionsElem = document.getElementById('options'); if (!_.isNull(toggle) && !_.isNull(optionsElem)) { diff --git a/src/client/wetty/term/confiruragtion/editor.ts b/src/client/wetty/term/confiruragtion/editor.ts new file mode 100644 index 0000000..95ce885 --- /dev/null +++ b/src/client/wetty/term/confiruragtion/editor.ts @@ -0,0 +1,23 @@ +import JSON5 from 'json5'; + +import type { Term } from '../../shared/type'; +import { editor } from '../../../shared/elements'; + +export const onInput = (term: Term) => (): void => { + try { + const updated = JSON5.parse(editor.value); + const updatedConf = JSON.stringify(updated, null, 2); + if (localStorage.options === updatedConf) return; + Object.keys(updated).forEach(key => { + const value = updated[key]; + term.setOption(key, value); + }); + term.resizeTerm(); + editor.value = updatedConf; + editor.classList.remove('error'); + localStorage.options = updatedConf; + } catch { + // skip + editor.classList.add('error'); + } +}; diff --git a/src/server.ts b/src/server.ts index 4fcdc8e..3efe3ce 100644 --- a/src/server.ts +++ b/src/server.ts @@ -64,7 +64,7 @@ export async function startServer( }); spawn(socket, args); } catch (error) { - logger.info('Disconnect signal sent'); + logger.info('Disconnect signal sent', { err: error }); } } }); diff --git a/src/server/command/ssh.ts b/src/server/command/ssh.ts index 6e3a2a6..1652643 100644 --- a/src/server/command/ssh.ts +++ b/src/server/command/ssh.ts @@ -2,19 +2,11 @@ import isUndefined from 'lodash/isUndefined.js'; import { logger } from '../../shared/logger.js'; export function sshOptions( - { - pass, - path, - command, - host, - port, - auth, - knownhosts, - }: { [s: string]: string }, + { pass, path, command, host, port, auth, knownHosts }: Record, key?: string, ): string[] { const cmd = parseCommand(command, path); - const hostChecking = knownhosts !== '/dev/null' ? 'yes' : 'no'; + const hostChecking = knownHosts !== '/dev/null' ? 'yes' : 'no'; const sshRemoteOptsBase = [ 'ssh', host, @@ -24,7 +16,7 @@ export function sshOptions( '-o', `PreferredAuthentications=${auth}`, '-o', - `UserKnownHostsFile=${knownhosts}`, + `UserKnownHostsFile=${knownHosts}`, '-o', `StrictHostKeyChecking=${hostChecking}`, ]; diff --git a/src/server/login.ts b/src/server/login.ts index 6cc035b..54671d6 100644 --- a/src/server/login.ts +++ b/src/server/login.ts @@ -1,6 +1,10 @@ import pty from 'node-pty'; +import { dirname, resolve } from 'path'; +import { fileURLToPath } from 'url'; import { xterm } from './shared/xterm.js'; +const __dirname = resolve(dirname(fileURLToPath(import.meta.url)), '..'); + export function login(socket: SocketIO.Socket): Promise { // Check request-header for username const remoteUser = socket.request.headers['remote-user']; diff --git a/src/server/socketServer/ssl.ts b/src/server/socketServer/ssl.ts index 690dd7d..ccb35ec 100644 --- a/src/server/socketServer/ssl.ts +++ b/src/server/socketServer/ssl.ts @@ -1,14 +1,14 @@ import fs from 'fs-extra'; -import path from 'path'; import isUndefined from 'lodash/isUndefined.js'; +import { resolve } from 'path'; import type { SSL, SSLBuffer } from '../../shared/interfaces'; export async function loadSSL(ssl?: SSL): Promise { if (isUndefined(ssl) || isUndefined(ssl.key) || isUndefined(ssl.cert)) return {}; const [key, cert]: Buffer[] = await Promise.all([ - fs.readFile(path.resolve(ssl.key)), - fs.readFile(path.resolve(ssl.cert)), + fs.readFile(resolve(ssl.key)), + fs.readFile(resolve(ssl.cert)), ]); return { key, cert }; }