OSDN Git Service

編集時と登録時にバリテーションを行うようにした
[webchat/WebChat.git] / profile.js
index 76b3018..55d247c 100644 (file)
@@ -193,6 +193,12 @@ function edit_postproc(req, res)
                RenderMessage(res,resource.invaild_parameter,req.session.items);\r
                return;\r
        }else if(typeof(req.body.edit) != "undefined"){\r
+               var validator = new Validator();\r
+               if(validator.Validate(req.body,config.alias))\r
+               {\r
+                       RenderMessage(validator.Message,req.session.items);\r
+                       return;\r
+               }\r
                async.waterfall([\r
                        function(cb){\r
                                if(req.body.updatepassword == false)\r
@@ -214,6 +220,12 @@ function edit_postproc(req, res)
 function registor_postproc(req, res)\r
 {\r
        if(typeof(req.body.registor) != "undefined"){\r
+               var validator = new Validator();\r
+               if(validator.Validate(req.body,config.alias))\r
+               {\r
+                       RenderMessage(res,validator.Message,req.session.items);\r
+                       return;\r
+               }\r
                async.waterfall([\r
                        function(cb){\r
                                collection.AddAsync(req.body,cb);\r
@@ -263,7 +275,7 @@ function ProfileCollection()
        this.AuthAsync = function(name,password,cb){\r
                async.waterfall([\r
                        function(next){\r
-                               pool.query("SELECT * FROM list WHERE name_hash = ? and name = ?",[murmurhash.v3(name),name],next);\r
+                               pool.query("SELECT password FROM list WHERE name_hash = ? and name = ?",[murmurhash.v3(name),name],next);\r
                        },\r
                        function(result,next){\r
                                if(result[0].password == md5_hex(password))\r
@@ -314,13 +326,79 @@ function ProfileCollection()
        {\r
                var item = {\r
                        name_hash:murmurhash.v3(data.name),\r
-                       name:data.name,\r
-                       password:md5_hex(data.password),\r
                        lastmodified:new Date(),\r
                };\r
                for(var key in config.alias)\r
-                       item[key] = data[key];\r
+               {\r
+                       if(key == "password")\r
+                               item[key] = md5_hex(data[key]);\r
+                       else\r
+                               item[key] = data[key];\r
+               }\r
                return item;\r
        }\r
 }\r
 \r
+//\r
+// Validatorクラス\r
+//\r
+function Validator()\r
+{\r
+       //\r
+       // バリテーションを行う。\r
+       // エラーがあった場合は真。そうでない場合は偽を返す\r
+       //\r
+       // @body バリテーションの対象となる連想配列\r
+       // @alias バリテーションを行う要素のリスト\r
+       this.Validate = function(body,alias){\r
+               var result = false;\r
+               this.Message = "";\r
+               for(var key in alias)\r
+               {\r
+                       var message = IsValidate(body[key],alias[key].type,alias[key].rule);\r
+                       if(message != null)\r
+                       {\r
+                               this.Message += "<p>" + alias[key].name + ":" + message + "</p>\n";\r
+                               result = true;\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+       // バリテーション時にエラーがあった場合、メッセージが記録される\r
+       this.Message = "";\r
+       function IsValidate(data,type,rule){\r
+               if(typeof(data) == "undefined")\r
+                       throw "data is undefined";\r
+               if(typeof(type) == "undefined")\r
+                       throw "type is undefined";\r
+\r
+               var result = null;\r
+\r
+               if(typeof(rule) != "undefined" && typeof(rule.isnotempty) != "undefined"\r
+                       && rule.isnotempty && data == "")\r
+                       return resource.is_not_empty;\r
+\r
+               switch(type)\r
+               {\r
+                       case "text":\r
+                       case "textarea":\r
+                       case "password":\r
+                               if(typeof(data) != "string")\r
+                                       result = resource.is_not_string;\r
+                               break;\r
+                       case "number":\r
+                               if(data.match(/[^0-9]/g))\r
+                                       result = resource.is_not_number;\r
+                               break;\r
+                       case "mail":\r
+                               if(data != "" && !data.match(/^[A-Za-z0-9]+[\w\-\+]+@[\w\.-]+\.\w{2,}$/))\r
+                                       result = resource.is_not_mail;\r
+                               break;\r
+               }\r
+\r
+               if(typeof(rule) == "function")\r
+                       result = rule(data,type);\r
+\r
+               return result;\r
+       }\r
+}
\ No newline at end of file