diff options
Diffstat (limited to 'modules/auth')
-rw-r--r-- | modules/auth/admin.go | 1 | ||||
-rw-r--r-- | modules/auth/auth.go | 29 | ||||
-rw-r--r-- | modules/auth/auth_form.go | 1 | ||||
-rw-r--r-- | modules/auth/org.go | 2 | ||||
-rw-r--r-- | modules/auth/pam/pam.go | 35 | ||||
-rw-r--r-- | modules/auth/pam/pam_stub.go | 15 | ||||
-rw-r--r-- | modules/auth/repo_form.go | 11 | ||||
-rw-r--r-- | modules/auth/user_form.go | 57 |
8 files changed, 115 insertions, 36 deletions
diff --git a/modules/auth/admin.go b/modules/auth/admin.go index e6cc82cd..a95b83de 100644 --- a/modules/auth/admin.go +++ b/modules/auth/admin.go @@ -11,6 +11,7 @@ import ( ) type AdminEditUserForm struct { + FullName string `form:"fullname" binding:"MaxSize(100)"` Email string `binding:"Required;Email;MaxSize(50)"` Password string `binding:"OmitEmpty;MinSize(6);MaxSize(255)"` Website string `binding:"MaxSize(50)"` diff --git a/modules/auth/auth.go b/modules/auth/auth.go index 5b24591a..7e01abc3 100644 --- a/modules/auth/auth.go +++ b/modules/auth/auth.go @@ -21,6 +21,10 @@ import ( "github.com/gogits/gogs/modules/uuid" ) +func IsAPIPath(url string) bool { + return strings.HasPrefix(url, "/api/") +} + // SignedInId returns the id of signed in user. func SignedInId(req *http.Request, sess session.Store) int64 { if !models.HasEngine { @@ -28,7 +32,7 @@ func SignedInId(req *http.Request, sess session.Store) int64 { } // API calls need to check access token. - if strings.HasPrefix(req.URL.Path, "/api/") { + if IsAPIPath(req.URL.Path) { auHead := req.Header.Get("Authorization") if len(auHead) > 0 { auths := strings.Fields(auHead) @@ -51,7 +55,7 @@ func SignedInId(req *http.Request, sess session.Store) int64 { } if id, ok := uid.(int64); ok { if _, err := models.GetUserById(id); err != nil { - if err != models.ErrUserNotExist { + if !models.IsErrUserNotExist(err) { log.Error(4, "GetUserById: %v", err) } return 0 @@ -76,7 +80,7 @@ func SignedInUser(req *http.Request, sess session.Store) (*models.User, bool) { if len(webAuthUser) > 0 { u, err := models.GetUserByName(webAuthUser) if err != nil { - if err != models.ErrUserNotExist { + if !models.IsErrUserNotExist(err) { log.Error(4, "GetUserByName: %v", err) return nil, false } @@ -111,7 +115,7 @@ func SignedInUser(req *http.Request, sess session.Store) (*models.User, bool) { u, err := models.UserSignIn(uname, passwd) if err != nil { - if err != models.ErrUserNotExist { + if !models.IsErrUserNotExist(err) { log.Error(4, "UserSignIn: %v", err) } return nil, false @@ -167,12 +171,16 @@ func AssignForm(form interface{}, data map[string]interface{}) { func getSize(field reflect.StructField, prefix string) string { for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { if strings.HasPrefix(rule, prefix) { - return rule[8 : len(rule)-1] + return rule[len(prefix) : len(rule)-1] } } return "" } +func GetSize(field reflect.StructField) string { + return getSize(field, "Size(") +} + func GetMinSize(field reflect.StructField) string { return getSize(field, "MinSize(") } @@ -208,7 +216,14 @@ func validate(errs binding.Errors, data map[string]interface{}, f Form, l macaro if errs[0].FieldNames[0] == field.Name { data["Err_"+field.Name] = true - trName := l.Tr("form." + field.Name) + + trName := field.Tag.Get("locale") + if len(trName) == 0 { + trName = l.Tr("form." + field.Name) + } else { + trName = l.Tr(trName) + } + switch errs[0].Classification { case binding.ERR_REQUIRED: data["ErrorMsg"] = trName + l.Tr("form.require_error") @@ -216,6 +231,8 @@ func validate(errs binding.Errors, data map[string]interface{}, f Form, l macaro data["ErrorMsg"] = trName + l.Tr("form.alpha_dash_error") case binding.ERR_ALPHA_DASH_DOT: data["ErrorMsg"] = trName + l.Tr("form.alpha_dash_dot_error") + case binding.ERR_SIZE: + data["ErrorMsg"] = trName + l.Tr("form.size_error", GetSize(field)) case binding.ERR_MIN_SIZE: data["ErrorMsg"] = trName + l.Tr("form.min_size_error", GetMinSize(field)) case binding.ERR_MAX_SIZE: diff --git a/modules/auth/auth_form.go b/modules/auth/auth_form.go index 7d459999..1102dc34 100644 --- a/modules/auth/auth_form.go +++ b/modules/auth/auth_form.go @@ -30,6 +30,7 @@ type AuthenticationForm struct { SMTPPort int `form:"smtp_port"` TLS bool `form:"tls"` AllowAutoRegister bool `form:"allowautoregister"` + PAMServiceName string } func (f *AuthenticationForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { diff --git a/modules/auth/org.go b/modules/auth/org.go index 3e6c55c1..0dfab951 100644 --- a/modules/auth/org.go +++ b/modules/auth/org.go @@ -26,7 +26,7 @@ func (f *CreateOrgForm) Validate(ctx *macaron.Context, errs binding.Errors) bind } type UpdateOrgSettingForm struct { - OrgUserName string `form:"uname" binding:"Required;MaxSize(35)"` + OrgUserName string `form:"uname" binding:"Required;AlphaDashDot;MaxSize(30)" locale:"org.org_name_holder"` OrgFullName string `form:"fullname" binding:"MaxSize(100)"` Email string `form:"email" binding:"Required;Email;MaxSize(50)"` Description string `form:"desc" binding:"MaxSize(255)"` diff --git a/modules/auth/pam/pam.go b/modules/auth/pam/pam.go new file mode 100644 index 00000000..7f326d42 --- /dev/null +++ b/modules/auth/pam/pam.go @@ -0,0 +1,35 @@ +// +build pam + +// 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 pam + +import ( + "errors" + + "github.com/msteinert/pam" +) + +func PAMAuth(serviceName, userName, passwd string) error { + t, err := pam.StartFunc(serviceName, userName, func(s pam.Style, msg string) (string, error) { + switch s { + case pam.PromptEchoOff: + return passwd, nil + case pam.PromptEchoOn, pam.ErrorMsg, pam.TextInfo: + return "", nil + } + return "", errors.New("Unrecognized PAM message style") + }) + + if err != nil { + return err + } + + if err = t.Authenticate(0); err != nil { + return err + } + + return nil +} diff --git a/modules/auth/pam/pam_stub.go b/modules/auth/pam/pam_stub.go new file mode 100644 index 00000000..33ac751a --- /dev/null +++ b/modules/auth/pam/pam_stub.go @@ -0,0 +1,15 @@ +// +build !pam + +// 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 pam + +import ( + "errors" +) + +func PAMAuth(serviceName, userName, passwd string) error { + return errors.New("PAM not supported") +} diff --git a/modules/auth/repo_form.go b/modules/auth/repo_form.go index a0928301..98639021 100644 --- a/modules/auth/repo_form.go +++ b/modules/auth/repo_form.go @@ -117,9 +117,9 @@ func (f *CreateIssueForm) Validate(ctx *macaron.Context, errs binding.Errors) bi // \/ \/ \/ \/ \/ type CreateMilestoneForm struct { - Title string `form:"title" binding:"Required;MaxSize(50)"` - Content string `form:"content"` - Deadline string `form:"due_date"` + Title string `binding:"Required;MaxSize(50)"` + Content string + Deadline string } func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { @@ -134,8 +134,9 @@ func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs binding.Errors // \/ \/ \/ \/ type CreateLabelForm struct { - Title string `form:"title" binding:"Required;MaxSize(50)"` - Color string `form:"color" binding:"Required;Size(7)"` + ID int64 + Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_name"` + Color string `binding:"Required;Size(7)" locale:"repo.issues.label_color"` } func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { diff --git a/modules/auth/user_form.go b/modules/auth/user_form.go index b616a460..0d6987ad 100644 --- a/modules/auth/user_form.go +++ b/modules/auth/user_form.go @@ -12,27 +12,36 @@ import ( ) type InstallForm struct { - DbType string `binding:"Required"` - DbHost string - DbUser string - DbPasswd string - DbName string - SSLMode string - DbPath string - RepoRootPath string `binding:"Required"` - RunUser string `binding:"Required"` - Domain string `binding:"Required"` - HTTPPort string `binding:"Required"` - AppUrl string `binding:"Required"` - SMTPHost string - SMTPEmail string - SMTPPasswd string - RegisterConfirm string - MailNotify string - AdminName string `binding:"Required;AlphaDashDot;MaxSize(30)"` - AdminPasswd string `binding:"Required;MinSize(6);MaxSize(255)"` - AdminConfirmPasswd string `binding:"Required;MinSize(6);MaxSize(255)"` - AdminEmail string `binding:"Required;Email;MaxSize(50)"` + DbType string `binding:"Required"` + DbHost string + DbUser string + DbPasswd string + DbName string + SSLMode string + DbPath string + + AppName string `binding:"Required" locale:"install.app_name"` + RepoRootPath string `binding:"Required"` + RunUser string `binding:"Required"` + Domain string `binding:"Required"` + HTTPPort string `binding:"Required"` + AppUrl string `binding:"Required"` + + SMTPHost string + SMTPFrom string + SMTPEmail string `binding:"OmitEmpty;Email;MaxSize(50)" locale:"install.mailer_user"` + SMTPPasswd string + RegisterConfirm bool + MailNotify bool + + OfflineMode bool + DisableRegistration bool + RequireSignInView bool + + AdminName string `binding:"OmitEmpty;AlphaDashDot;MaxSize(30)" locale:"install.admin_name"` + AdminPasswd string `binding:"OmitEmpty;MinSize(6);MaxSize(255)" locale:"install.admin_password"` + AdminConfirmPasswd string + AdminEmail string `binding:"OmitEmpty;Email;MaxSize(50)" locale:"install.admin_email"` } func (f *InstallForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { @@ -107,7 +116,7 @@ func (f *AddEmailForm) Validate(ctx *macaron.Context, errs binding.Errors) bindi } type ChangePasswordForm struct { - OldPassword string `form:"old_password" binding:"Required;MinSize(6);MaxSize(255)"` + OldPassword string `form:"old_password" binding:"Required;MinSize(1);MaxSize(255)"` Password string `form:"password" binding:"Required;MinSize(6);MaxSize(255)"` Retype string `form:"retype"` } @@ -117,8 +126,8 @@ func (f *ChangePasswordForm) Validate(ctx *macaron.Context, errs binding.Errors) } type AddSSHKeyForm struct { - SSHTitle string `form:"title" binding:"Required"` - Content string `form:"content" binding:"Required"` + Title string `binding:"Required;MaxSize(50)"` + Content string `binding:"Required"` } func (f *AddSSHKeyForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { |