OSDN Git Service

2960b83dd012bd892b34cfbf972b6b134f57a75a
[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,admin:req.session.items.admin});\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                                 if(typeof(req.session.items) != "undefined" && req.session.items.admin)\r
157                                         cb(null,true);\r
158                                 else\r
159                                         collection.AuthAsync(req.body.name,req.body.password,cb);\r
160                         },\r
161                         function(result,cb){\r
162                                 if(result)\r
163                                         collection.RemoveAsync(req.body.name,cb);\r
164                                 else\r
165                                         cb(null,null);\r
166                         }\r
167                 ],function(err,result){\r
168                         if(err != null)\r
169                                 RenderMessage(res,err,req.session.items);\r
170                         else if(result == null)\r
171                                 RenderMessage(res,$unmatch_password,req.session.items);\r
172                         else\r
173                                 RenderMessage(res,$success_remove,req.session.items);\r
174                 });\r
175         }else if(typeof(req.body.edit) != "undefined"){\r
176                 async.waterfall([\r
177                         function(cb){\r
178                                 if(typeof(req.session.items) != "undefined" && req.session.items.admin)\r
179                                         cb(null,true);\r
180                                 else\r
181                                         collection.AuthAsync(req.body.name,req.body.password,cb);\r
182                         },\r
183                         function(result,cb){\r
184                                 if(result)\r
185                                         collection.GetAsync(req.body.name,cb);\r
186                                 else\r
187                                         cb(null,null);\r
188                         }\r
189                 ],function(err,result){\r
190                         if(err != null){\r
191                                 RenderMessage(res,err,req.session.items);\r
192                         }else if(result != null){\r
193                                 res.render("profile\\edit",{list:result,token:req.body.token});\r
194                         }else{\r
195                                 RenderMessage(res,$unmatch_password,req.session.items);\r
196                         }\r
197                 });\r
198         }else{\r
199                 RenderMessage(res,$invaild_parameter,req.session.items);\r
200         }\r
201 }\r
202 \r
203 function edit_postproc(req, res)\r
204 {\r
205         if(req.session.items.token != req.body.token){\r
206                 RenderMessage(res,$invaild_parameter,req.session.items);\r
207                 return;\r
208         }\r
209         if(typeof(req.body.name) == "undefined")\r
210         {\r
211                 RenderMessage(res,$invaild_parameter,req.session.items);\r
212                 return;\r
213         }else if(typeof(req.body.edit) != "undefined"){\r
214                 async.waterfall([\r
215                         function(cb){\r
216                                 collection.UpdatAsync(req.body.name,req.body,cb);\r
217                         }\r
218                 ],function(err,result){\r
219                         if(err != null)\r
220                                 RenderMessage(res,err,req.session.items);\r
221                         else\r
222                                 RenderMessage(res,$success_edit,req.session.items);\r
223                 });\r
224         }else{\r
225                 RenderMessage(res,$invaild_parameter,req.session.items);\r
226         }\r
227 }\r
228 \r
229 function registor_postproc(req, res)\r
230 {\r
231         if(req.session.items.token != req.body.token){\r
232                 RenderMessage(res,$invaild_parameter,req.session.items);\r
233                 return;\r
234         }\r
235         if(typeof(req.body.registor) != "undefined"){\r
236                 async.waterfall([\r
237                         function(cb){\r
238                                 collection.AddAsync(req.body,cb);\r
239                         }\r
240                 ],function(err,result){\r
241                         if(err != null)\r
242                                 RenderMessage(res,err,req.session.items);\r
243                         else\r
244                                 RenderMessage(res,$success_registor,req.session.items);\r
245                 });\r
246         }else{\r
247                 RenderMessage($invaild_parameter,req.session.items);\r
248         }\r
249 }\r
250 \r
251 function registor_proc(req, res)\r
252 {\r
253         if(typeof(req.session.items) == "undefined")\r
254                 req.session.items = new security.SessionInfomation(false);\r
255 \r
256         res.render("profile\\registor",{token:req.session.items.token});\r
257 }\r
258 \r
259 function RenderMessage(res,msg,info)\r
260 {\r
261         if(typeof(info) == "undefined")\r
262                 res.render("profile\\message",{message:msg});\r
263         else\r
264                 res.render("profile\\message",{message:msg,admin:info.admin});\r
265 }\r
266 \r
267 //\r
268 // ProfileCollectionクラス\r
269 //\r
270 function ProfileCollection()\r
271 {\r
272         var MySQLPool = new require("./mysql_pool.js");\r
273         var pool = new MySQLPool({\r
274                                 host     : "localhost",\r
275                                 user     : $db_user,\r
276                                 password : $db_password,\r
277                                 database : "profile",\r
278                         });\r
279         this.AuthAsync = function(name,password,cb){\r
280                 async.waterfall([\r
281                         function(next){\r
282                                 pool.query("SELECT * FROM list WHERE name = ?",[name],next);\r
283                         },\r
284                         function(result,next){\r
285                                 if(result[0].password == password)\r
286                                         next(null,true);\r
287                                 else\r
288                                         next(null,false);\r
289                         }\r
290                 ],cb);\r
291         }\r
292         this.GetAsync = function(name,cb){\r
293                 pool.query("SELECT * FROM list WHERE name = ?",[name],cb);\r
294         }\r
295         this.AddAsync = function(data,cb){\r
296                 var item = {\r
297                         name:data.name,\r
298                         age:data.age,\r
299                         gender:data.gender,\r
300                         height:data.height,\r
301                         weight:data.weight,\r
302                         race:data.race,\r
303                         password:data.password,\r
304                         lastmodified:new Date(),\r
305                         etc:data.etc\r
306                 };\r
307                 pool.query("INSERT INTO list SET ?",[item],cb);\r
308         }\r
309         this.UpdatAsync = function(name,data,cb){\r
310                 var item = {\r
311                         name:data.name,\r
312                         age:data.age,\r
313                         gender:data.gender,\r
314                         height:data.height,\r
315                         weight:data.weight,\r
316                         race:data.race,\r
317                         password:data.password,\r
318                         lastmodified:new Date(),\r
319                         etc:data.etc\r
320                 };\r
321                 pool.query("UPDATE list SET ? WHERE name = ?",[item,name],cb);\r
322         }\r
323         this.ClearAsync = function(cb){\r
324                 pool.query("TRUNCATE TABLE list",null,cb);\r
325         }\r
326         this.RemoveRangeAsync = function(names,cb){\r
327                 pool.query("DELETE FROM list WHERE name IN (?)",[names],cb);\r
328         }\r
329         this.RemoveAsync = function(name,cb){\r
330                 pool.query("DELETE FROM list WHERE name = ?",[name],cb);\r
331         }\r
332         this.FindByNameAsync = function(pattern,start,count,cb){\r
333                 pool.query("SELECT * FROM list WHERE name LIKE ? LIMIT ?,?",[pattern+"%",start,count],cb);\r
334         }\r
335         this.ToArrayAsync = function(start,count,cb){\r
336                 pool.query("SELECT * FROM list LIMIT ?,?",[start,count],cb);\r
337         }\r
338 }\r
339 \r