OSDN Git Service

346bf5f9f73147f1a94453a3f0b4d10a4484fdb1
[webchat/WebChat.git] / profile.js
1 var config = require("./configure.js");\r
2 var resource = require("./resources.js");\r
3 var util = require("util");\r
4 var async = require("async");\r
5 var security = require("./security.js");\r
6 var ejs = require("ejs");\r
7 require("date-utils");\r
8 \r
9 var collection = new ProfileCollection();\r
10 \r
11 module.exports = function(app){\r
12         app.get("/profile",list_proc);\r
13         app.get("/profile/admin",admin_proc);\r
14         app.post("/profile/admin",admin_postproc);\r
15         app.get("/profile/detail",detail_proc);\r
16         app.post("/profile/detail",detail_postproc);\r
17         app.post("/profile/edit",edit_postproc); \r
18         app.get("/profile/registor",registor_proc); \r
19         app.post("/profile/registor",registor_postproc); \r
20 };\r
21 \r
22 function admin_proc(req, res)\r
23 {\r
24         var info = new security.SessionInfomation(true);\r
25         req.session.items = info;\r
26         async.waterfall([\r
27                 function(callback){\r
28                         PrepaerListAsync(req,callback);\r
29                 }\r
30         ],function(err,result){\r
31                 if(err != null)\r
32                         RenderMessage(res,err,info);\r
33                 else{\r
34                         result.token = info.token;\r
35                         res.render("profile/admin",result);\r
36                 }\r
37         });\r
38 }\r
39 \r
40 function admin_postproc(req,res)\r
41 {\r
42         if(req.session.items.token != req.body.token){\r
43                 RenderMessage(res,resource.invaild_parameter,req.session.items);\r
44                 return;\r
45         }\r
46         async.waterfall([\r
47                 function(cb){\r
48                         if(typeof(req.body.removeall) != "undefined")\r
49                                 collection.ClearAsync(cb);\r
50                         if(typeof(req.body.remove) != "undefined")\r
51                                 collection.RemoveRangeAsync(req.body.names,cb);\r
52                 }\r
53         ],function(err,result){\r
54                 if(err != null)\r
55                         RenderMessage(res,err,req.session.items);\r
56                 else\r
57                         RenderMessage(res,resource.success_remove,req.session.items);\r
58         });\r
59 }\r
60 \r
61 function list_proc(req, res)\r
62 {\r
63         if(typeof(req.session.items) != "undefined")\r
64                 req.session.items.admin = false;\r
65         async.waterfall([\r
66                 function(cb){\r
67                         PrepaerListAsync(req,cb);\r
68                 }\r
69         ],function(err,result){\r
70                 if(err != null)\r
71                         RenderMessage(res,err,req.session.items);\r
72                 else\r
73                         res.render("profile/list",result);\r
74         });\r
75 }\r
76 \r
77 function PrepaerListAsync(req,callback)\r
78 {\r
79         var limit = config.db_limit;\r
80         var start = 0;\r
81         var parttern = "";\r
82         if(typeof(req.query.start) != "undefined")\r
83                 start = parseInt(req.query.start);\r
84         if(typeof(req.query.limit) != "undefined")\r
85                 limit = parseInt(req.query.limit);\r
86 \r
87         async.waterfall([\r
88                 function(cb){\r
89                         if(typeof(req.query.search) != "undefined")\r
90                         {\r
91                                 parttern = req.query.search;\r
92                                 collection.FindByNameAsync(parttern,start,limit,cb);\r
93                         }else{\r
94                                 collection.ToArrayAsync(start,limit,cb);\r
95                         }\r
96                 }\r
97         ],function(err,result){\r
98                 if(err != null){\r
99                         callback(err,null);\r
100                 }else{\r
101                         var next = start + limit;\r
102                         var prev = start - limit;\r
103                         if(prev < 0)\r
104                                 prev = 0;\r
105                         for(var i = 0; i < result.length; i++)\r
106                                 result[i].lastmodified = result[i].lastmodified.toFormat("YYYY/MM/DD HH:MI:SS");\r
107                         callback(null,{list:result,search:parttern,next:next,prev:prev,limit:limit});\r
108                 }\r
109         });\r
110 }\r
111 \r
112 function detail_proc(req, res)\r
113 {\r
114         if(typeof(req.query.name) == "undefined")\r
115         {\r
116                 RenderMessage(res,resource.invaild_parameter,req.session.items);\r
117                 return;\r
118         }\r
119 \r
120         if(typeof(req.session.items) == "undefined")\r
121                 req.session.items = new security.SessionInfomation(false);\r
122 \r
123         async.waterfall([\r
124                 function(cb){\r
125                         collection.GetAsync(req.query.name,cb);\r
126                 },\r
127         ],function(err,result){\r
128                 if(err != null)\r
129                         RenderMessage(res,err,req.session.items);\r
130                 else if(result.length == 0)\r
131                         RenderMessage(res,resource.notfound_name,req.session.items);\r
132                 else{\r
133                         res.render("profile/detail",{list:result,token:req.session.items.token,admin:req.session.items.admin});\r
134                 }\r
135         });\r
136 }\r
137 \r
138 function detail_postproc(req, res)\r
139 {\r
140         if(req.session.items.token != req.body.token){\r
141                 RenderMessage(res,resource.invaild_parameter,req.session.items);\r
142                 return;\r
143         }\r
144         if(typeof(req.body.remove) != "undefined"){\r
145                 async.waterfall([\r
146                         function(cb){\r
147                                 if(typeof(req.session.items) != "undefined" && req.session.items.admin)\r
148                                         cb(null,true);\r
149                                 else\r
150                                         collection.AuthAsync(req.body.name,req.body.password,cb);\r
151                         },\r
152                         function(result,cb){\r
153                                 if(result)\r
154                                         collection.RemoveAsync(req.body.name,cb);\r
155                                 else\r
156                                         cb(null,null);\r
157                         }\r
158                 ],function(err,result){\r
159                         if(err != null)\r
160                                 RenderMessage(res,err,req.session.items);\r
161                         else if(result == null)\r
162                                 RenderMessage(res,resource.unmatch_password,req.session.items);\r
163                         else\r
164                                 RenderMessage(res,resource.success_remove,req.session.items);\r
165                 });\r
166         }else if(typeof(req.body.edit) != "undefined"){\r
167                 async.waterfall([\r
168                         function(cb){\r
169                                 if(typeof(req.session.items) != "undefined" && req.session.items.admin)\r
170                                         cb(null,true);\r
171                                 else\r
172                                         collection.AuthAsync(req.body.name,req.body.password,cb);\r
173                         },\r
174                         function(result,cb){\r
175                                 if(result)\r
176                                         collection.GetAsync(req.body.name,cb);\r
177                                 else\r
178                                         cb(null,null);\r
179                         }\r
180                 ],function(err,result){\r
181                         if(err != null){\r
182                                 RenderMessage(res,err,req.session.items);\r
183                         }else if(result != null){\r
184                                 res.render("profile/edit",{list:result,token:req.body.token});\r
185                         }else{\r
186                                 RenderMessage(res,resource.unmatch_password,req.session.items);\r
187                         }\r
188                 });\r
189         }else{\r
190                 RenderMessage(res,resource.invaild_parameter,req.session.items);\r
191         }\r
192 }\r
193 \r
194 function edit_postproc(req, res)\r
195 {\r
196         if(req.session.items.token != req.body.token){\r
197                 RenderMessage(res,resource.invaild_parameter,req.session.items);\r
198                 return;\r
199         }\r
200         if(typeof(req.body.name) == "undefined")\r
201         {\r
202                 RenderMessage(res,resource.invaild_parameter,req.session.items);\r
203                 return;\r
204         }else if(typeof(req.body.edit) != "undefined"){\r
205                 async.waterfall([\r
206                         function(cb){\r
207                                 collection.UpdatAsync(req.body.name,req.body,cb);\r
208                         }\r
209                 ],function(err,result){\r
210                         if(err != null)\r
211                                 RenderMessage(res,err,req.session.items);\r
212                         else\r
213                                 RenderMessage(res,resource.success_edit,req.session.items);\r
214                 });\r
215         }else{\r
216                 RenderMessage(res,resource.invaild_parameter,req.session.items);\r
217         }\r
218 }\r
219 \r
220 function registor_postproc(req, res)\r
221 {\r
222         if(req.session.items.token != req.body.token){\r
223                 RenderMessage(res,resource.invaild_parameter,req.session.items);\r
224                 return;\r
225         }\r
226         if(typeof(req.body.registor) != "undefined"){\r
227                 async.waterfall([\r
228                         function(cb){\r
229                                 collection.AddAsync(req.body,cb);\r
230                         }\r
231                 ],function(err,result){\r
232                         if(err != null)\r
233                                 RenderMessage(res,err,req.session.items);\r
234                         else\r
235                                 RenderMessage(res,resource.success_registor,req.session.items);\r
236                 });\r
237         }else{\r
238                 RenderMessage(resource.invaild_parameter,req.session.items);\r
239         }\r
240 }\r
241 \r
242 function registor_proc(req, res)\r
243 {\r
244         if(typeof(req.session.items) == "undefined")\r
245                 req.session.items = new security.SessionInfomation(false);\r
246 \r
247         res.render("profile/registor",{token:req.session.items.token});\r
248 }\r
249 \r
250 function RenderMessage(res,msg,info)\r
251 {\r
252         if(typeof(info) == "undefined")\r
253                 res.render("profile/message",{message:msg});\r
254         else\r
255                 res.render("profile/message",{message:msg,admin:info.admin});\r
256 }\r
257 \r
258 //\r
259 // ProfileCollectionクラス\r
260 //\r
261 function ProfileCollection()\r
262 {\r
263         var MySQLPool = new require("./mysql_pool.js");\r
264         var pool = new MySQLPool({\r
265                                 host     : config.db_host,\r
266                                 user     : config.db_user,\r
267                                 password : config.db_password,\r
268                                 port     : config.db_port,\r
269                                 database : "webchat",\r
270                         });\r
271         this.AuthAsync = function(name,password,cb){\r
272                 async.waterfall([\r
273                         function(next){\r
274                                 pool.query("SELECT * FROM list WHERE name = ?",[name],next);\r
275                         },\r
276                         function(result,next){\r
277                                 if(result[0].password == password)\r
278                                         next(null,true);\r
279                                 else\r
280                                         next(null,false);\r
281                         }\r
282                 ],cb);\r
283         }\r
284         this.GetAsync = function(name,cb){\r
285                 pool.query("SELECT * FROM list WHERE name = ?",[name],cb);\r
286         }\r
287         this.AddAsync = function(data,cb){\r
288                 var item = {\r
289                         name:data.name,\r
290                         age:data.age,\r
291                         gender:data.gender,\r
292                         height:data.height,\r
293                         weight:data.weight,\r
294                         race:data.race,\r
295                         password:data.password,\r
296                         lastmodified:new Date(),\r
297                         etc:data.etc\r
298                 };\r
299                 pool.query("INSERT INTO list SET ?",[item],cb);\r
300         }\r
301         this.UpdatAsync = function(name,data,cb){\r
302                 var item = {\r
303                         name:data.name,\r
304                         age:data.age,\r
305                         gender:data.gender,\r
306                         height:data.height,\r
307                         weight:data.weight,\r
308                         race:data.race,\r
309                         password:data.password,\r
310                         lastmodified:new Date(),\r
311                         etc:data.etc\r
312                 };\r
313                 pool.query("UPDATE list SET ? WHERE name = ?",[item,name],cb);\r
314         }\r
315         this.ClearAsync = function(cb){\r
316                 pool.query("TRUNCATE TABLE list",null,cb);\r
317         }\r
318         this.RemoveRangeAsync = function(names,cb){\r
319                 pool.query("DELETE FROM list WHERE name IN (?)",[names],cb);\r
320         }\r
321         this.RemoveAsync = function(name,cb){\r
322                 pool.query("DELETE FROM list WHERE name = ?",[name],cb);\r
323         }\r
324         this.FindByNameAsync = function(pattern,start,count,cb){\r
325                 pool.query("SELECT * FROM list WHERE name LIKE ? LIMIT ?,?",[pattern+"%",start,count],cb);\r
326         }\r
327         this.ToArrayAsync = function(start,count,cb){\r
328                 pool.query("SELECT * FROM list LIMIT ?,?",[start,count],cb);\r
329         }\r
330 }\r
331 \r