-rw-r--r-- | backend/node/src/clipperz.js | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/backend/node/src/clipperz.js b/backend/node/src/clipperz.js index 6c13f16..6bf56bb 100644 --- a/backend/node/src/clipperz.js +++ b/backend/node/src/clipperz.js | |||
@@ -21,97 +21,97 @@ var CLIPPERZ = module.exports = function(CONFIG) { | |||
21 | 21 | ||
22 | var LOGGER = CONFIG.logger||{trace:function(){}}; | 22 | var LOGGER = CONFIG.logger||{trace:function(){}}; |
23 | 23 | ||
24 | var PG = { | 24 | var PG = { |
25 | url: CONFIG.psql, | 25 | url: CONFIG.psql, |
26 | PG: require('pg').native, | 26 | PG: require('pg').native, |
27 | Q: function(q,a,cb) { | 27 | Q: function(q,a,cb) { |
28 | if('function'===typeof a) cb=a,a=[]; | 28 | if('function'===typeof a) cb=a,a=[]; |
29 | LOGGER.trace({query:q,args:a},'SQL: %s',q); | 29 | LOGGER.trace({query:q,args:a},'SQL: %s',q); |
30 | PG.PG.connect(PG.url,function(e,C,D) { | 30 | PG.PG.connect(PG.url,function(e,C,D) { |
31 | if(e) return cb(e); | 31 | if(e) return cb(e); |
32 | var t0=new Date(); | 32 | var t0=new Date(); |
33 | C.query(q,a,function(e,r) { | 33 | C.query(q,a,function(e,r) { |
34 | var t1=new Date(), dt=t1-t0; | 34 | var t1=new Date(), dt=t1-t0; |
35 | D(); | 35 | D(); |
36 | LOGGER.trace({query:q,args:a,ms:dt,rows:r&&r.rowCount},"SQL query '%s' took %dms",q,dt); | 36 | LOGGER.trace({query:q,args:a,ms:dt,rows:r&&r.rowCount},"SQL query '%s' took %dms",q,dt); |
37 | cb(e,r); | 37 | cb(e,r); |
38 | }); | 38 | }); |
39 | }); | 39 | }); |
40 | }, | 40 | }, |
41 | T: function(cb) { | 41 | T: function(cb) { |
42 | PG.PG.connect(PG.url,function(e,C,D) { | 42 | PG.PG.connect(PG.url,function(e,C,D) { |
43 | if(e) return cb(e); | 43 | if(e) return cb(e); |
44 | C.query('BEGIN',function(e){ | 44 | C.query('BEGIN',function(e){ |
45 | if(e) return D(),cb(e); | 45 | if(e) return D(),cb(e); |
46 | cb(null,{ | 46 | cb(null,{ |
47 | Q: function(q,a,cb) { | 47 | Q: function(q,a,cb) { |
48 | LOGGER.trace({query:q,args:a},'SQL: %s',q); | 48 | LOGGER.trace({query:q,args:a},'SQL: %s',q); |
49 | if(this.over) return cb(new Error('game over')); | 49 | if(this.over) return cb(new Error('game over')); |
50 | if('function'===typeof a) cb=a,a=[]; | 50 | if('function'===typeof a) cb=a,a=[]; |
51 | var t0=new Date(); | 51 | var t0=new Date(); |
52 | C.query(q,a,function(e,r) { | 52 | C.query(q,a,function(e,r) { |
53 | var t1=new Date(), dt=t1-t0; | 53 | var t1=new Date(), dt=t1-t0; |
54 | LOGGER.trace({query:q,args:a,ms:dt,rows:r&&r.rowCount},"SQL query '%s' took %dms",q,dt); | 54 | LOGGER.trace({query:q,args:a,ms:dt,rows:r&&r.rowCount},"SQL query '%s' took %dms",q,dt); |
55 | cb(e,r); | 55 | cb(e,r); |
56 | }); | 56 | }); |
57 | }, | 57 | }, |
58 | commit: function(cb) { | 58 | commit: function(cb) { |
59 | LOGGER.trace('SQL: commit'); | 59 | LOGGER.trace('SQL: commit'); |
60 | if(this.over) return cb(new Error('game over')); | 60 | if(this.over) return cb(new Error('game over')); |
61 | return (this.over=true),C.query('COMMIT',function(e){D();cb&&cb(e)}); | 61 | return (this.over=true),C.query('COMMIT',function(e){D();cb&&cb(e)}); |
62 | }, | 62 | }, |
63 | rollback: function(cb) { | 63 | rollback: function(cb) { |
64 | LOGGER.trace('SQL: rollback'); | 64 | LOGGER.trace('SQL: rollback'); |
65 | if(this.over) return cb(new Error('game over')); | 65 | if(this.over) return cb(new Error('game over')); |
66 | return (this.over=true),C.query('ROLLBACK',function(e){D();cb&&cb(e)}); | 66 | return (this.over=true),C.query('ROLLBACK',function(e){D();cb&&cb(e)}); |
67 | }, | 67 | }, |
68 | end: function(e,cb) { | 68 | end: function(e,cb) { |
69 | if(e) LOGGER.trace(e,"rolling back transaction due to an error"),this.rollback(cb); | 69 | if(e) return LOGGER.trace(e,"rolling back transaction due to an error"),this.rollback(cb); |
70 | this.commit(cb); | 70 | this.commit(cb); |
71 | } | 71 | } |
72 | }); | 72 | }); |
73 | }); | 73 | }); |
74 | }); | 74 | }); |
75 | } | 75 | } |
76 | }; | 76 | }; |
77 | 77 | ||
78 | 78 | ||
79 | return { | 79 | return { |
80 | 80 | ||
81 | json: function clipperz_json(req,res,cb) { | 81 | json: function clipperz_json(req,res,cb) { |
82 | var method = req.body.method, pp = JSON.parse(req.body.parameters).parameters; | 82 | var method = req.body.method, pp = JSON.parse(req.body.parameters).parameters; |
83 | var message = pp.message; | 83 | var message = pp.message; |
84 | var ppp = pp.parameters; | 84 | var ppp = pp.parameters; |
85 | res.res = function(o) { return res.json({result:o}) }; | 85 | res.res = function(o) { return res.json({result:o}) }; |
86 | LOGGER.trace({method:method,parameters:pp},"JSON request"); | 86 | LOGGER.trace({method:method,parameters:pp},"JSON request"); |
87 | 87 | ||
88 | switch(method) { | 88 | switch(method) { |
89 | case 'registration': | 89 | case 'registration': |
90 | switch(message) { | 90 | switch(message) { |
91 | case 'completeRegistration': return PG.Q( | 91 | case 'completeRegistration': return PG.Q( |
92 | "INSERT INTO clipperz.theuser" | 92 | "INSERT INTO clipperz.theuser" |
93 | +" (u_name, u_srp_s,u_srp_v, u_authversion,u_header,u_statistics,u_version,u_lock)" | 93 | +" (u_name, u_srp_s,u_srp_v, u_authversion,u_header,u_statistics,u_version,u_lock)" |
94 | +" VALUES ($1, $2,$3, $4,$5,$6,$7,$8)", | 94 | +" VALUES ($1, $2,$3, $4,$5,$6,$7,$8)", |
95 | [pp.credentials.C, pp.credentials.s, pp.credentials.v, | 95 | [pp.credentials.C, pp.credentials.s, pp.credentials.v, |
96 | pp.credentials.version,pp.user.header, pp.user.statistics, | 96 | pp.credentials.version,pp.user.header, pp.user.statistics, |
97 | pp.user.version, pp.user.lock], function(e,r) { | 97 | pp.user.version, pp.user.lock], function(e,r) { |
98 | if(e) return cb(e); | 98 | if(e) return cb(e); |
99 | res.res({lock:pp.user.lock,result:'done'}); | 99 | res.res({lock:pp.user.lock,result:'done'}); |
100 | }); | 100 | }); |
101 | } | 101 | } |
102 | break; | 102 | break; |
103 | 103 | ||
104 | case 'handshake': | 104 | case 'handshake': |
105 | switch(message) { | 105 | switch(message) { |
106 | case 'connect': return ASYNC.auto({ | 106 | case 'connect': return ASYNC.auto({ |
107 | u: function(cb) { PG.Q( | 107 | u: function(cb) { PG.Q( |
108 | "SELECT u_id, u_srp_s, u_srp_v FROM clipperz.theuser WHERE u_name=$1", | 108 | "SELECT u_id, u_srp_s, u_srp_v FROM clipperz.theuser WHERE u_name=$1", |
109 | [ppp.C], function(e,r) { | 109 | [ppp.C], function(e,r) { |
110 | if(e) return cb(e); | 110 | if(e) return cb(e); |
111 | if(!r.rowCount) return cb(null,{u_id:null,u_srp_s:n123,u_srp_v:n123}); | 111 | if(!r.rowCount) return cb(null,{u_id:null,u_srp_s:n123,u_srp_v:n123}); |
112 | cb(null,r.rows[0]); | 112 | cb(null,r.rows[0]); |
113 | }) }, | 113 | }) }, |
114 | otp: ['u',function(cb,r) { | 114 | otp: ['u',function(cb,r) { |
115 | if(!req.session.otp) return cb(); | 115 | if(!req.session.otp) return cb(); |
116 | if(req.session.u!=r.u.u_id) return cb(new Error('user/OTP mismatch')); | 116 | if(req.session.u!=r.u.u_id) return cb(new Error('user/OTP mismatch')); |
117 | PG.Q( | 117 | PG.Q( |