106 lines
3.2 KiB
JavaScript
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;
|