diff options
author | Unknown <joe2010xtmf@163.com> | 2014-03-06 02:21:44 -0500 |
---|---|---|
committer | Unknown <joe2010xtmf@163.com> | 2014-03-06 02:21:44 -0500 |
commit | c6f2c23b05474d80ea282a7683135b3ea8f8e2d9 (patch) | |
tree | 83054b7cb334ffbfbeadc688bf853fa0916696d3 /modules/auth/form.go | |
parent | e59f90b8fee3e615d1b60067bfc0d636606899d8 (diff) |
Add binding form for register user
Diffstat (limited to 'modules/auth/form.go')
-rw-r--r-- | modules/auth/form.go | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/modules/auth/form.go b/modules/auth/form.go new file mode 100644 index 00000000..9094ef5c --- /dev/null +++ b/modules/auth/form.go @@ -0,0 +1,111 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "net/http" + "reflect" + + "github.com/codegangsta/martini" + + "github.com/gogits/binding" + + "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/utils/log" +) + +type RegisterForm struct { + UserName string `form:"username" binding:"Required;AlphaDash;MinSize(5);MaxSize(30)"` + Email string `form:"email" binding:"Required;Email;MaxSize(50)"` + Password string `form:"passwd" binding:"Required;MinSize(6);MaxSize(30)"` +} + +func (r *RegisterForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { + if req.Method == "GET" || errors.Count() == 0 { + return + } + + data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) + data["HasError"] = true + AssignForm(r, data) + + if len(errors.Overall) > 0 { + for _, err := range errors.Overall { + log.Error("RegisterForm.Validate: %v", err) + } + return + } + + if err, ok := errors.Fields["UserName"]; ok { + data["Err_Username"] = true + switch err { + case binding.RequireError: + data["ErrorMsg"] = "Username cannot be empty" + case binding.AlphaDashError: + data["ErrorMsg"] = "Username must be valid alpha or numeric or dash(-_) characters" + case binding.MinSizeError: + data["ErrorMsg"] = "Username at least has 5 characters" + case binding.MaxSizeError: + data["ErrorMsg"] = "Username at most has 30 characters" + default: + data["ErrorMsg"] = "Unknown error: " + err + } + return + } + + if err, ok := errors.Fields["Email"]; ok { + data["Err_Email"] = true + switch err { + case binding.RequireError: + data["ErrorMsg"] = "E-mail address cannot be empty" + case binding.EmailError: + data["ErrorMsg"] = "E-mail address is not valid" + case binding.MaxSizeError: + data["ErrorMsg"] = "E-mail address at most has 50 characters" + default: + data["ErrorMsg"] = "Unknown error: " + err + } + return + } + + if err, ok := errors.Fields["Password"]; ok { + data["Err_Passwd"] = true + switch err { + case binding.RequireError: + data["ErrorMsg"] = "Password cannot be empty" + case binding.MinSizeError: + data["ErrorMsg"] = "Password at least has 6 characters" + case binding.MaxSizeError: + data["ErrorMsg"] = "Password at most has 30 characters" + default: + data["ErrorMsg"] = "Unknown error: " + err + } + return + } + +} + +// AssignForm assign form values back to the template data. +func AssignForm(form interface{}, data base.TmplData) { + typ := reflect.TypeOf(form) + val := reflect.ValueOf(form) + + if typ.Kind() == reflect.Ptr { + typ = typ.Elem() + val = val.Elem() + } + + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + + fieldName := field.Tag.Get("form") + // Allow ignored fields in the struct + if fieldName == "-" { + continue + } + + data[fieldName] = val.Field(i).Interface() + } +} |