From 58d2e4c5e17b3306e35e7a8e28cce5cc4eb74f26 Mon Sep 17 00:00:00 2001 From: Jannis R Date: Sat, 2 May 2020 15:41:32 +0200 Subject: basic client --- connect.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 connect.js (limited to 'connect.js') diff --git a/connect.js b/connect.js new file mode 100644 index 0000000..35e2297 --- /dev/null +++ b/connect.js @@ -0,0 +1,50 @@ +'use strict' + +const {connect: connectTls} = require('tls') +const { + DEFAULT_PORT, + ALPN_ID, + MIN_TLS_VERSION, +} = require('./lib/util') + +const connectToGeminiServer = (opt, cb) => { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + const { + host, + port, + tlsOpt, + } = { + host: '127.0.0.1', + port: DEFAULT_PORT, + tlsOpt: {}, + // todo: TOFU via isTrustedCertificate() + ...opt, + } + + const socket = connectTls({ + ALPNProtocols: [ALPN_ID], + minVersion: MIN_TLS_VERSION, + host, port, + // todo: cert, key, passphrase + ...tlsOpt, + }) + + let cbCalled = false + socket.once('error', (err) => { + if (cbCalled) return; + cbCalled = true + cb(err) + }) + socket.once('secureConnect', () => { + if (cbCalled) return; + cbCalled = true + cb(null, socket) + }) + + return socket +} + +module.exports = connectToGeminiServer -- cgit v1.3