Matjaz Mesnjak 844259458e Initial commit.
2022-01-07 16:09:50 +01:00

106 lines
3.2 KiB
JavaScript

var express = require('express');
var router = express.Router();
var tls = require('tls');
var url = require('url');
var options = {
rejectUnauthorized: false
};
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.get('/data', function(req, res, next) {
var pageData = '';
var host = '';
var protocol = '';
var path = '/';
var port = 1965;
var myUrl;
var temp;
var preformated = 0;
temp = decodeURIComponent(req.query.url);
myUrl = url.parse(temp);
host = myUrl.host;
protocol = myUrl.protocol;
if(myUrl.path) path = myUrl.path;
if(myUrl.port) port = myUrl.port;
console.log(protocol + host + port + path);
var client = tls.connect(port, host, options, function() {
if(client.authorized) {
console.log("Connection authorized by a Certificate Authority.");
} else {
console.log("Connection not authorized: " + client.authorizationError);
}
client.write("gemini://" + host + path + "\r\n");
});
client.on('data', function(data) {
//console.log('Received: %s [it is %d bytes long]',
// data.toString().replace(/(\n)/gm,""),
// data.length);
//console.log(data.toString());
pageData += data.toString();
});
client.on('close', function() {
console.log("Connection closed");
console.log(pageData);
var result = pageData.split('\n');
console.log(result);
var dataRaw = '';
result.forEach(element => {
if(element.trim().startsWith('# ') && preformated == 0) {
dataRaw += '<h1>' + element.trimEnd().replace('# ', '') + '</h1>';
} else if(element.trim().startsWith('## ') && preformated == 0) {
dataRaw += '<h2>' + element.trimEnd().replace('## ', '') + '</h2>';
} else if(element.trim().startsWith('### ') && preformated == 0) {
dataRaw += '<h3>' + element.trimEnd().replace('### ', '') + '</h3>';
} else if(element.trim().startsWith('* ') && preformated == 0) {
dataRaw += '<li>' + element.trimEnd().replace('* ', '') + '</li>';
} else if(element.trim().startsWith("```")) {
if(preformated == 0) {
preformated = 1;
dataRaw += '<pre>';
} else {
dataRaw += '</pre>';
preformated = 0;
}
} else if(element.trim().startsWith('=>')) {
var link = element.replace('=>', '').trimStart();
link = link.replace(/\t/g, ' ');
var linkUrl = link.substring(0, link.indexOf(' '));
var linkA = link.substring(link.indexOf(' ') + 1);
if(linkUrl.startsWith('gemini://')) {
dataRaw += '<p><a href="/data?url=' + linkUrl + '">' + linkA + '</a></p>';
} else if(linkUrl.startsWith('/')) {
var temp = encodeURIComponent(host + linkUrl);
dataRaw += '<p><a href="/data?url=gemini://' + temp + '">' + linkA + '</a></p>';
}
}
else {
if(preformated == 1) {
dataRaw += element.trimEnd() + '<br>';
} else {
dataRaw += '<p>' + element.trimEnd() + '</p>';
}
}
});
res.render('index', { title: 'Gemini', dataRaw:dataRaw });
});
client.on('error', function(err) {
console.error(err);
client.destroy();
});
});
module.exports = router;