lfapi

annotate lfapi.js @ 2:cfdb8f15c388

Added issue order by state_time_left
author bsw
date Thu Oct 20 13:54:07 2011 +0200 (2011-10-20)
parents ce6f95d23e1c
children a5a5de8dbac2
rev   line source
bsw@0 1 #!/usr/bin/env node
bsw@0 2
bsw@0 3 // --------------------------------------------------------------------------
bsw@0 4 // end of configuration
bsw@0 5 // ==========================================================================
bsw@0 6
bsw@0 7 var main = require('./lfapi/main.js');
bsw@0 8
bsw@0 9 var config = main.config;
bsw@0 10 var db = main.db;
bsw@0 11
bsw@0 12 //var config = require('./config.js');
bsw@0 13
bsw@0 14 var http = require('http');
bsw@0 15 var url = require('url');
bsw@0 16 var qs = require('querystring');
bsw@0 17
bsw@0 18 // Add includes method to Arrays
bsw@0 19 Array.prototype.includes = function (val) {
bsw@0 20 for (var i=0; i < this.length; i++) if (this[i] === val) return true;
bsw@0 21 return false;
bsw@0 22 };
bsw@0 23
bsw@0 24 // Member sessions, stored value is member_id
bsw@0 25 var sessions = { };
bsw@0 26
bsw@0 27 // create http server
bsw@0 28 var server = http.createServer(function (req, res, params) {
bsw@0 29 req.setEncoding('utf8');
bsw@0 30
bsw@0 31 // parse get params
bsw@0 32 var url_info = url.parse(req.url, true);
bsw@0 33 var params = url_info.query;
bsw@0 34 req.params = params;
bsw@0 35
bsw@0 36 req.current_access_level = config.public_access_level;
bsw@0 37 req.current_member_id;
bsw@0 38
bsw@0 39 req.sessions = sessions;
bsw@0 40
bsw@0 41 // session handling
bsw@0 42 if (params.session_key) {
bsw@0 43 if (sessions[params.session_key]) {
bsw@0 44 req.current_member_id = sessions[params.session_key];
bsw@0 45 req.current_access_level = 'member'
bsw@0 46 } else {
bsw@0 47 main.respond('json', null, req, res, 'forbidden', 'Invalid session key');
bsw@0 48 }
bsw@0 49 }
bsw@0 50
bsw@0 51 // pick cookies from http headers
bsw@0 52 var cookies = {};
bsw@0 53 if (req.headers.cookie) {
bsw@0 54 req.headers.cookie.split(';').forEach(function (cookie) {
bsw@0 55 var parts = cookie.split('=');
bsw@0 56 cookies[parts[0].trim()] = (parts[1] || '' ).trim();
bsw@0 57 });
bsw@0 58 };
bsw@0 59
bsw@0 60 console.log(req.socket._idleStart, req.socket.remoteAddress, req.current_member_id, req.current_access_level, url_info.pathname, url_info.query);
bsw@0 61
bsw@0 62 var body = '';
bsw@0 63 req.on('data', function (data) {
bsw@0 64 body += data;
bsw@0 65 });
bsw@0 66 req.on('end', function () {
bsw@0 67 var post_params = qs.parse(body);
bsw@0 68 for (key in post_params) {
bsw@0 69 params[key] = post_params[key];
bsw@0 70 };
bsw@0 71
bsw@0 72 if (['POST', 'DELETE'].includes(params.http_method)) {
bsw@0 73 req.method = params.http_method;
bsw@0 74 }
bsw@0 75
bsw@0 76 var routes;
bsw@0 77
bsw@0 78 switch(req.method) {
bsw@0 79 case 'GET':
bsw@0 80 routes = main.get;
bsw@0 81 break;
bsw@0 82
bsw@0 83 case 'DELETE':
bsw@0 84 // delete requests are handled like post request with parameter delete=1
bsw@0 85 params.delete = '1';
bsw@0 86
bsw@0 87 case 'POST':
bsw@0 88 routes = main.post;
bsw@0 89 break;
bsw@0 90
bsw@0 91 default:
bsw@0 92 main.respond('json', null, req, res, 'not found');
bsw@0 93 break;
bsw@0 94
bsw@0 95 };
bsw@0 96
bsw@0 97 // dispatch request based on method and url
bsw@0 98
bsw@0 99 var routing_target = routes[url_info.pathname]
bsw@0 100 if (routing_target) {
bsw@0 101 db.query(config.connectionString, req, res, 'START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE', function (result, conn) {
bsw@0 102 routing_target.apply(this, [conn, req, res, params]);
bsw@0 103 });
bsw@0 104 } else {
bsw@0 105 main.respond('json', null, req, res, 'not found');
bsw@0 106 };
bsw@0 107
bsw@0 108 });
bsw@0 109
bsw@0 110 // actually connect the http server to a network interface
bsw@0 111 }).listen(config.bind_port, config.bind_address);
bsw@0 112
bsw@0 113 console.log('LiquidFeedback API server started with ' + config.public_access_level + ' public access at ' + config.bind_address + ':' + config.bind_port);
bsw@0 114
bsw@0 115
bsw@0 116

Impressum / About Us