lfapi

view lfapi.js @ 32:be8ca05d0315

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

Impressum / About Us