OSDN Git Service

プロフィール用の管理モードを追加した
[webchat/WebChat.git] / profile.js
1 $db_user = "user";\r
2 $db_password = "user";\r
3 $db_limit = 50;\r
4 \r
5 $unmatch_password = "パスワードが一致しません";\r
6 $invaild_parameter = "パラメーターが正しくありません";\r
7 $success_registor = "登録に成功しました";\r
8 $success_remove = "削除に成功しました";\r
9 $success_edit = "編集に成功しました";\r
10 $notfound_name = "該当名が存在しません";\r
11 \r
12 var util = require("util");\r
13 var async = require("async");\r
14 var security = require("./security.js");\r
15 var ejs = require("ejs");\r
16 require("date-utils");\r
17 \r
18 var collection = new ProfileCollection();\r
19 \r
20 module.exports = function(app){\r
21         app.get("/profile",list_proc);\r
22         app.get("/profile/admin",admin_proc);\r
23         app.post("/profile/admin",admin_postproc);\r
24         app.get("/profile/detail",detail_proc);\r
25         app.post("/profile/detail",detail_postproc);\r
26         app.post("/profile/edit",edit_postproc); \r
27         app.get("/profile/registor",registor_proc); \r
28         app.post("/profile/registor",registor_postproc); \r
29 };\r
30 \r
31 function admin_proc(req, res)\r
32 {\r
33         var info = new security.SessionInfomation(true);\r
34         req.session.items = info;\r
35         async.waterfall([\r
36                 function(callback){\r
37                         PrepaerListAsync(req,callback);\r
38                 }\r
39         ],function(err,result){\r
40                 if(err != null)\r
41                         RenderMessage(res,err,info);\r
42                 else{\r
43                         result.token = info.token;\r
44                         res.render("profile\\admin",result);\r
45                 }\r
46         });\r
47 }\r
48 \r
49 function admin_postproc(req,res)\r
50 {\r
51         if(req.session.items.token != req.body.token){\r
52                 RenderMessage(res,$invaild_parameter,req.session.items);\r
53                 return;\r
54         }\r
55         async.waterfall([\r
56                 function(cb){\r
57                         if(typeof(req.body.removeall) != "undefined")\r
58                                 collection.ClearAsync(cb);\r
59                         if(typeof(req.body.remove) != "undefined")\r
60                                 collection.RemoveRangeAsync(req.body.names,cb);\r
61                 }\r
62         ],function(err,result){\r
63                 if(err != null)\r
64                         RenderMessage(res,err,req.session.items);\r
65                 else\r
66                         RenderMessage(res,$success_remove,req.session.items);\r
67         });\r
68 }\r
69 \r
70 function list_proc(req, res)\r
71 {\r
72         if(typeof(req.session.items) != "undefined")\r
73                 req.session.items.admin = false;\r
74         async.waterfall([\r
75                 function(cb){\r
76                         PrepaerListAsync(req,cb);\r
77                 }\r
78         ],function(err,result){\r
79                 if(err != null)\r
80                         RenderMessage(res,err,req.session.items);\r
81                 else\r
82                         res.render("profile\\list",result);\r
83         });\r
84 }\r
85 \r
86 function PrepaerListAsync(req,callback)\r
87 {\r
88         var limit = $db_limit;\r
89         var start = 0;\r
90         var parttern = "";\r
91         if(typeof(req.query.start) != "undefined")\r
92                 start = parseInt(req.query.start);\r
93         if(typeof(req.query.limit) != "undefined")\r
94                 limit = parseInt(req.query.limit);\r
95 \r
96         async.waterfall([\r
97                 function(cb){\r
98                         if(typeof(req.query.search) != "undefined")\r
99                         {\r
100                                 parttern = req.query.search;\r
101                                 collection.FindByNameAsync(parttern,start,limit,cb);\r
102                         }else{\r
103                                 collection.ToArrayAsync(start,limit,cb);\r
104                         }\r
105                 }\r
106         ],function(err,result){\r
107                 if(err != null){\r
108                         cb(err,null);\r
109                 }else{\r
110                         var next = start + limit;\r
111                         var prev = start - limit;\r
112                         if(prev < 0)\r
113                                 prev = 0;\r
114                         for(var i = 0; i < result.length; i++)\r
115                                 result[i].lastmodified = result[i].lastmodified.toFormat("YYYY/MM/DD HH:MI:SS");\r
116                         callback(null,{list:result,search:parttern,next:next,prev:prev,limit:limit});\r
117                 }\r
118         });\r
119 }\r
120 \r
121 function detail_proc(req, res)\r
122 {\r
123         if(typeof(req.query.name) == "undefined")\r
124         {\r
125                 RenderMessage(res,$invaild_parameter,req.session.items);\r
126                 return;\r
127         }\r
128 \r
129         if(typeof(req.session.items) == "undefined")\r
130                 req.session.items = new security.SessionInfomation(false);\r
131 \r
132         async.waterfall([\r
133                 function(cb){\r
134                         collection.GetAsync(req.query.name,cb);\r
135                 },\r
136         ],function(err,result){\r
137                 if(err != null)\r
138                         RenderMessage(res,err,req.session.items);\r
139                 else if(result.length == 0)\r
140                         RenderMessage(res,$notfound_name,req.session.items);\r
141                 else{\r
142                         res.render("profile\\detail",{list:result,token:req.session.items.token});\r
143                 }\r
144         });\r
145 }\r
146 \r
147 function detail_postproc(req, res)\r
148 {\r
149         if(req.session.items.token != req.body.token){\r
150                 RenderMessage(res,$invaild_parameter,req.session.items);\r
151                 return;\r
152         }\r
153         if(typeof(req.body.remove) != "undefined"){\r
154                 async.waterfall([\r
155                         function(cb){\r
156                                 collection.AuthAsync(req.body.name,req.body.password,cb);\r
157                         },\r
158                         function(result,cb){\r
159                                 if(result)\r
160                                         collection.RemoveAsync(req.body.name,cb);\r
161                                 else\r
162                                         cb(null,null);\r
163                         }\r
164                 ],function(err,result){\r
165                         if(err != null)\r
166                                 RenderMessage(res,err,req.session.items);\r
167                         else if(result == null)\r
168                                 RenderMessage(res,$unmatch_password,req.session.items);\r
169                         else\r
170                                 RenderMessage(res,$success_remove,req.session.items);\r
171                 });\r
172         }else if(typeof(req.body.edit) != "undefined"){\r
173                 async.waterfall([\r
174                         function(cb){\r
175                                 collection.AuthAsync(req.body.name,req.body.password,cb);\r
176                         },\r
177                         function(result,cb){\r
178                                 if(result)\r
179                                         collection.GetAsync(req.body.name,cb);\r
180                                 else\r
181                                         cb(null,null);\r
182                         }\r
183                 ],function(err,result){\r
184                         if(err != null){\r
185                                 RenderMessage(res,err,req.session.items);\r
186                         }else if(result != null){\r
187                                 res.render("profile\\edit",{list:result,token:req.body.token});\r
188                         }else{\r
189                                 RenderMessage(res,$unmatch_password,req.session.items);\r
190                         }\r
191                 });\r
192         }else{\r
193                 RenderMessage(res,$invaild_parameter,req.session.items);\r
194         }\r
195 }\r
196 \r
197 function edit_postproc(req, res)\r
198 {\r
199         if(req.session.items.token != req.body.token){\r
200                 RenderMessage(res,$invaild_parameter,req.session.items);\r
201                 return;\r
202         }\r
203         if(typeof(req.body.name) == "undefined")\r
204         {\r
205                 RenderMessage(res,$invaild_parameter,req.session.items);\r
206                 return;\r
207         }else if(typeof(req.body.edit) != "undefined"){\r
208                 async.waterfall([\r
209                         function(cb){\r
210                                 collection.UpdatAsync(req.body.name,req.body,cb);\r
211                         }\r
212                 ],function(err,result){\r
213                         if(err != null)\r
214                                 RenderMessage(res,err,req.session.items);\r
215                         else\r
216                                 RenderMessage(res,$success_edit,req.session.items);\r
217                 });\r
218         }else{\r
219                 RenderMessage(res,$invaild_parameter,req.session.items);\r
220         }\r
221 }\r
222 \r
223 function registor_postproc(req, res)\r
224 {\r
225         if(req.session.items.token != req.body.token){\r
226                 RenderMessage(res,$invaild_parameter,req.session.items);\r
227                 return;\r
228         }\r
229         if(typeof(req.body.registor) != "undefined"){\r
230                 async.waterfall([\r
231                         function(cb){\r
232                                 collection.AddAsync(req.body,cb);\r
233                         }\r
234                 ],function(err,result){\r
235                         if(err != null)\r
236                                 RenderMessage(res,err,req.session.items);\r
237                         else\r
238                                 RenderMessage(res,$success_registor,req.session.items);\r
239                 });\r
240         }else{\r
241                 RenderMessage($invaild_parameter,req.session.items);\r
242         }\r
243 }\r
244 \r
245 function registor_proc(req, res)\r
246 {\r
247         if(typeof(req.session.items) == "undefined")\r
248                 req.session.items = new security.SessionInfomation(false);\r
249 \r
250         res.render("profile\\registor",{token:req.session.items.token});\r
251 }\r
252 \r
253 function RenderMessage(res,msg,info)\r
254 {\r
255         if(typeof(info) == "undefined")\r
256                 res.render("profile\\message",{message:msg});\r
257         else\r
258                 res.render("profile\\message",{message:msg,admin:info.admin});\r
259 }\r
260 \r
261 //\r
262 // ProfileCollectionクラス\r
263 //\r
264 function ProfileCollection()\r
265 {\r
266         var pool = new MySQLPool();\r
267         this.AuthAsync = function(name,password,cb){\r
268                 async.waterfall([\r
269                         function(callback){\r
270                                 pool.acquire(callback);\r
271                         },\r
272                         function(client,callback){\r
273                                 client.query("SELECT * FROM list WHERE name = ?",[name],function(err,result){\r
274                                         callback(err,result,client);\r
275                                 });\r
276                         },\r
277                         function(result,client,callback){\r
278                                 pool.release(client);\r
279                                 if(result[0].password == password)\r
280                                         callback(null,true);\r
281                                 else\r
282                                         callback(null,false);\r
283                         }\r
284                 ],cb);\r
285         }\r
286         this.GetAsync = function(name,cb){\r
287                 async.waterfall([\r
288                         function(callback){\r
289                                 pool.acquire(callback);\r
290                         },\r
291                         function(client,callback){\r
292                                 client.query("SELECT * FROM list WHERE name = ?",[name],function(err,result){\r
293                                         callback(err,result,client);\r
294                                 });\r
295                         },\r
296                         function(result,client,callback){\r
297                                 pool.release(client);\r
298                                 callback(null,result);\r
299                         }\r
300                 ],cb);\r
301         }\r
302         this.AddAsync = function(data,cb){\r
303                 var item = {\r
304                         name:data.name,\r
305                         age:data.age,\r
306                         gender:data.gender,\r
307                         height:data.height,\r
308                         weight:data.weight,\r
309                         race:data.race,\r
310                         password:data.password,\r
311                         lastmodified:new Date(),\r
312                         etc:data.etc\r
313                 };\r
314                 async.waterfall([\r
315                         function(callback){\r
316                                 pool.acquire(callback);\r
317                         },\r
318                         function(client,callback){\r
319                                 client.query("INSERT INTO list SET ?",[item],function(err,result){\r
320                                         callback(err,result,client);\r
321                                 });\r
322                         },\r
323                         function(result,client,callback){\r
324                                 pool.release(client);\r
325                                 callback(null,result);\r
326                         }\r
327                 ],cb);\r
328         }\r
329         this.UpdatAsync = function(name,data,cb){\r
330                 var item = {\r
331                         name:data.name,\r
332                         age:data.age,\r
333                         gender:data.gender,\r
334                         height:data.height,\r
335                         weight:data.weight,\r
336                         race:data.race,\r
337                         password:data.password,\r
338                         lastmodified:new Date(),\r
339                         etc:data.etc\r
340                 };\r
341                 async.waterfall([\r
342                         function(callback){\r
343                                 pool.acquire(callback);\r
344                         },\r
345                         function(client,callback){\r
346                                 client.query("UPDATE list SET ? WHERE name = ?",[item,name],function(err,result){\r
347                                         callback(err,result,client);\r
348                                 });\r
349                         },\r
350                         function(result,client,callback){\r
351                                 pool.release(client);\r
352                                 callback(null,result);\r
353                         }\r
354                 ],cb);\r
355         }\r
356         this.ClearAsync = function(cb){\r
357                 async.waterfall([\r
358                         function(callback){\r
359                                 pool.acquire(callback);\r
360                         },\r
361                         function(client,callback){\r
362                                 client.query("TRUNCATE TABLE list",function(err,result){\r
363                                         callback(err,result,client);\r
364                                 });\r
365                         },\r
366                         function(result,client,callback){\r
367                                 pool.release(client);\r
368                                 callback(null,result);\r
369                         }\r
370                 ],cb);\r
371         }\r
372         this.RemoveRangeAsync = function(names,cb){\r
373                 async.waterfall([\r
374                         function(callback){\r
375                                 pool.acquire(callback);\r
376                         },\r
377                         function(client,callback){\r
378                                 var query = client.query("DELETE FROM list WHERE name IN (?)",[names],function(err,result){\r
379                                         callback(err,result,client);\r
380                                 });\r
381                         },\r
382                         function(result,client,callback){\r
383                                 pool.release(client);\r
384                                 callback(null,result);\r
385                         }\r
386                 ],cb);\r
387         }\r
388         this.RemoveAsync = function(name,cb){\r
389                 async.waterfall([\r
390                         function(callback){\r
391                                 pool.acquire(callback);\r
392                         },\r
393                         function(client,callback){\r
394                                 var query = client.query("DELETE FROM list WHERE name = ?",[name],function(err,result){\r
395                                         callback(err,result,client);\r
396                                 });\r
397                         },\r
398                         function(result,client,callback){\r
399                                 pool.release(client);\r
400                                 callback(null,result);\r
401                         }\r
402                 ],cb);\r
403         }\r
404         this.FindByNameAsync = function(pattern,start,count,cb){\r
405                 async.waterfall([\r
406                         function(callback){\r
407                                 pool.acquire(callback);\r
408                         },\r
409                         function(client,callback){\r
410                                 client.query("SELECT * FROM list WHERE name LIKE ? LIMIT ?,?",[pattern+"%",start,count],function(err,result){\r
411                                         callback(err,result,client);\r
412                                 });\r
413                         },\r
414                         function(result,client,callback){\r
415                                 pool.release(client);\r
416                                 callback(null,result);\r
417                         }\r
418                 ],cb);\r
419         }\r
420         this.ToArrayAsync = function(start,count,cb){\r
421                 async.waterfall([\r
422                         function(callback){\r
423                                 pool.acquire(callback);\r
424                         },\r
425                         function(client,callback){\r
426                                 client.query("SELECT * FROM list LIMIT ?,?",[start,count],function(err,result){\r
427                                         callback(err,result,client);\r
428                                 });\r
429                         },\r
430                         function(result,client,callback){\r
431                                 pool.release(client);\r
432                                 callback(null,result);\r
433                         }\r
434                 ],cb);\r
435         }\r
436 }\r
437 \r
438 function MySQLPool()\r
439 {\r
440         var generic_pool = require("generic-pool");\r
441         var mysql      = require("mysql");\r
442         return generic_pool.Pool({\r
443                 name : "mysql",\r
444                 max : 10,\r
445                 create : function(cb){\r
446                         var connection = mysql.createConnection({\r
447                                 host     : "localhost",\r
448                                 user     : $db_user,\r
449                                 password : $db_password,\r
450                                 database : "profile",\r
451                         });\r
452                         connection.connect();\r
453                         cb(null,connection);\r
454                 },\r
455                 destroy : function(db){\r
456                         db.end();\r
457                 }\r
458         });\r
459 }\r