Compare commits

...

4 Commits

Author SHA1 Message Date
Matjaz
802f95f503 Cleanup. 2022-01-08 21:51:20 +01:00
Matjaz
978d433f8a Fix url parameters decoding. 2022-01-08 21:50:58 +01:00
Matjaz
73a91b4f48 Cleanup some unneeded debugging related comments. 2022-01-08 21:50:03 +01:00
Matjaz
f759902272 Popravek sloga. 2022-01-08 18:31:55 +01:00
6 changed files with 2 additions and 220 deletions

View File

@ -11,5 +11,4 @@ gemini.router.use('/', index);
gemini.router.use('/articles/', articles);
gemini.router.use('/articles/:item', articles_item);
gemini.listen();

View File

@ -24,7 +24,7 @@ ${contents}
}
function articles_item(request, response) {
var article = fs.readFileSync('./articles/' + decodeURIComponent(request.params.item));
var article = fs.readFileSync('./articles/' + request.params.item);
response.send(`20 text/gemini\r\n
${article}

View File

@ -42,7 +42,7 @@ module.exports = class Request {
this.protocol = geminiUrl.protocol;
this.hostname = geminiUrl.hostname;
if (geminiUrl.port) this.port = geminiUrl.port;
this.path = geminiUrl.pathname;
this.path = decodeURIComponent(geminiUrl.pathname);
this.search = geminiUrl.search.substring(1); //remove '?' from string
if(this.protocol === 'titan:') {
this.content = this.rawRequest.slice(this.rawRequest.indexOf('\r\n') + 3);

View File

@ -3,26 +3,20 @@
function selectRoute(path, routes) {
result = -1;
// console.log(path);
var mPathComponents = path.split('/');
routes.forEach((item, index) => {
// console.log(item);
var mitem = item.split('/');
if((mitem.length == mPathComponents.length)) {
if((item.indexOf(':') > 0) && (path.endsWith('/') == false)) {
// console.log('we need parameters');
var mmitem = item.substring(item.indexOf(':'));
var mmpath = path.substring(item.indexOf(':'));
var mmitemList = mmitem.split('/');
var mmpathList = mmpath.split('/');
if(mmitemList.length == mmpathList.length) {
// console.log('winner is here');
if(result == -1) result = index;
}
} else {
// console.log('we do not need parameters');
if(item == path) {
// console.log('winnere here');
if(result == -1) result = index;
}
}
@ -48,13 +42,6 @@ module.exports = class Router {
this.request = request;
this.response = response;
/////////////////////////////////////
// console.log(selectRoute(path, this.routes));
/////////////////////////////////////
var pathComponents = path.split('/');
for (var i = 0; i < pathComponents.length; i++) {
pathComponents[i] = '/' + pathComponents[i];

View File

@ -1,102 +0,0 @@
// Uplink Gemini Server
// Router Class
function selectRoute(path, routes) {
result = -1;
// console.log(path);
var mPathComponents = path.split('/');
routes.forEach((item, index) => {
// console.log(item);
var mitem = item.split('/');
if((mitem.length == mPathComponents.length)) {
if((item.indexOf(':') > 0) && (path.endsWith('/') == false)) {
// console.log('we need parameters');
var mmitem = item.substring(item.indexOf(':'));
var mmpath = path.substring(item.indexOf(':'));
var mmitemList = mmitem.split('/');
var mmpathList = mmpath.split('/');
if(mmitemList.length == mmpathList.length) {
// console.log('winner is here');
if(result == -1) result = index;
}
} else {
// console.log('we do not need parameters');
if(item == path) {
// console.log('winnere here');
if(result == -1) result = index;
}
}
}
});
return result;
}
module.exports = class Router {
constructor() {
this.routes = [];
this.handlers = [];
}
use(route, handler) {
this.routes[this.routes.length] = route;
this.handlers[this.handlers.length] = handler;
this.request = undefined;
this.response = undefined;
}
set(path, request, response) {
this.request = request;
this.response = response;
/////////////////////////////////////
// console.log(selectRoute(path, this.routes));
/////////////////////////////////////
var pathComponents = path.split('/');
for (var i = 0; i < pathComponents.length; i++) {
pathComponents[i] = '/' + pathComponents[i];
}
var routes = this.routes;
var paths = [];
var params = [];
var mindex = selectRoute(path, this.routes);
var routeComponents = routes[mindex].split('/');
paths = [];
params = [];
if (routeComponents.length == pathComponents.length) {
for (var k = 0; k < routeComponents.length; k++) {
routeComponents[k] = '/' + routeComponents[k];
if (routeComponents[k].startsWith('/:')) {
params.push(routeComponents[k]);
} else {
paths.push(routeComponents[k]);
}
}
}
var finalParams = pathComponents.slice(paths.length);
for (var l = 0; l < finalParams.length; l++) {
finalParams[l] = finalParams[l].substring(1);
}
var myParams = {};
for (var m = 0; m < params.length; m++) {
eval('myParams.' + params[m].substring(2) + ' = "' + JSON.stringify(finalParams[m]).slice(1, -1) + '"');
}
this.request.params = myParams;
var mm = typeof this.handlers[mindex];
if (mm !== 'undefined') {
this.handlers[mindex](this.request, this.response);
} else {
this.response.error(51);
}
}
};

View File

@ -1,102 +0,0 @@
// Uplink Gemini Server
// Router Class
function selectRoute(path, routes) {
result = -1;
console.log(path);
var mPathComponents = path.split('/');
routes.forEach((item, index) => {
console.log(item);
var mitem = item.split('/');
if((mitem.length == mPathComponents.length)) {
if((item.indexOf(':') > 0) && (path.endsWith('/') == false)) {
console.log('we need parameters');
var mmitem = item.substring(item.indexOf(':'));
var mmpath = path.substring(item.indexOf(':'));
var mmitemList = mmitem.split('/');
var mmpathList = mmpath.split('/');
if(mmitemList.length == mmpathList.length) {
console.log('winner is here');
if(result == -1) result = index;
}
} else {
console.log('we do not need parameters');
if(item == path) {
console.log('winnere here');
if(result == -1) result = index;
}
}
}
});
return result;
}
module.exports = class Router {
constructor() {
this.routes = [];
this.handlers = [];
}
use(route, handler) {
this.routes[this.routes.length] = route;
this.handlers[this.handlers.length] = handler;
this.request = undefined;
this.response = undefined;
}
set(path, request, response) {
this.request = request;
this.response = response;
/////////////////////////////////////
console.log(selectRoute(path, this.routes));
/////////////////////////////////////
var pathComponents = path.split('/');
for (var i = 0; i < pathComponents.length; i++) {
pathComponents[i] = '/' + pathComponents[i];
}
var routes = this.routes;
var paths = [];
var params = [];
var mindex = selectRoute(path, this.routes);
var routeComponents = routes[mindex].split('/');
paths = [];
params = [];
if (routeComponents.length == pathComponents.length) {
for (var k = 0; k < routeComponents.length; k++) {
routeComponents[k] = '/' + routeComponents[k];
if (routeComponents[k].startsWith('/:')) {
params.push(routeComponents[k]);
} else {
paths.push(routeComponents[k]);
}
}
}
var finalParams = pathComponents.slice(paths.length);
for (var l = 0; l < finalParams.length; l++) {
finalParams[l] = finalParams[l].substring(1);
}
var myParams = {};
for (var m = 0; m < params.length; m++) {
eval('myParams.' + params[m].substring(2) + ' = "' + JSON.stringify(finalParams[m]).slice(1, -1) + '"');
}
this.request.params = myParams;
var mm = typeof this.handlers[mindex];
if (mm !== 'undefined') {
this.handlers[mindex](this.request, this.response);
} else {
this.response.error(51);
}
}
};