From 4f9c5981a923687a803a3711fe33cd211584f36b Mon Sep 17 00:00:00 2001 From: Unknwon Date: Thu, 23 Feb 2017 11:39:09 -0500 Subject: refactoring: modules/auth/*_form.go -> modules/form --- modules/auth/admin.go | 44 ----- modules/auth/auth.go | 130 --------------- modules/auth/auth_form.go | 42 ----- modules/auth/org.go | 55 ------- modules/auth/repo_form.go | 399 --------------------------------------------- modules/auth/user_form.go | 153 ----------------- modules/context/context.go | 7 +- modules/form/admin.go | 43 +++++ modules/form/auth.go | 42 +++++ modules/form/form.go | 135 +++++++++++++++ modules/form/org.go | 41 +++++ modules/form/repo.go | 399 +++++++++++++++++++++++++++++++++++++++++++++ modules/form/user.go | 153 +++++++++++++++++ 13 files changed, 817 insertions(+), 826 deletions(-) delete mode 100644 modules/auth/admin.go delete mode 100644 modules/auth/auth_form.go delete mode 100644 modules/auth/org.go delete mode 100644 modules/auth/repo_form.go delete mode 100644 modules/auth/user_form.go create mode 100644 modules/form/admin.go create mode 100644 modules/form/auth.go create mode 100644 modules/form/form.go create mode 100644 modules/form/org.go create mode 100644 modules/form/repo.go create mode 100644 modules/form/user.go (limited to 'modules') diff --git a/modules/auth/admin.go b/modules/auth/admin.go deleted file mode 100644 index 58d1a027..00000000 --- a/modules/auth/admin.go +++ /dev/null @@ -1,44 +0,0 @@ -// 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 ( - "gopkg.in/macaron.v1" - - "github.com/go-macaron/binding" -) - -type AdminCrateUserForm struct { - LoginType string `binding:"Required"` - LoginName string - UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` - Email string `binding:"Required;Email;MaxSize(254)"` - Password string `binding:"MaxSize(255)"` - SendNotify bool -} - -func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type AdminEditUserForm struct { - LoginType string `binding:"Required"` - LoginName string - FullName string `binding:"MaxSize(100)"` - Email string `binding:"Required;Email;MaxSize(254)"` - Password string `binding:"MaxSize(255)"` - Website string `binding:"MaxSize(50)"` - Location string `binding:"MaxSize(50)"` - MaxRepoCreation int - Active bool - Admin bool - AllowGitHook bool - AllowImportLocal bool - ProhibitLogin bool -} - -func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/auth/auth.go b/modules/auth/auth.go index d270cc05..2e96ec1a 100644 --- a/modules/auth/auth.go +++ b/modules/auth/auth.go @@ -5,12 +5,9 @@ package auth import ( - "reflect" "strings" "time" - "github.com/Unknwon/com" - "github.com/go-macaron/binding" "github.com/go-macaron/session" gouuid "github.com/satori/go.uuid" log "gopkg.in/clog.v1" @@ -147,130 +144,3 @@ func SignedInUser(ctx *macaron.Context, sess session.Store) (*models.User, bool) } return u, false } - -type Form interface { - binding.Validator -} - -func init() { - binding.SetNameMapper(com.ToSnakeCase) -} - -// AssignForm assign form values back to the template data. -func AssignForm(form interface{}, data map[string]interface{}) { - 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 - } else if len(fieldName) == 0 { - fieldName = com.ToSnakeCase(field.Name) - } - - data[fieldName] = val.Field(i).Interface() - } -} - -func getRuleBody(field reflect.StructField, prefix string) string { - for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { - if strings.HasPrefix(rule, prefix) { - return rule[len(prefix) : len(rule)-1] - } - } - return "" -} - -func GetSize(field reflect.StructField) string { - return getRuleBody(field, "Size(") -} - -func GetMinSize(field reflect.StructField) string { - return getRuleBody(field, "MinSize(") -} - -func GetMaxSize(field reflect.StructField) string { - return getRuleBody(field, "MaxSize(") -} - -func GetInclude(field reflect.StructField) string { - return getRuleBody(field, "Include(") -} - -// FIXME: struct contains a struct -func validateStruct(obj interface{}) binding.Errors { - - return nil -} - -func validate(errs binding.Errors, data map[string]interface{}, f Form, l macaron.Locale) binding.Errors { - if errs.Len() == 0 { - return errs - } - - data["HasError"] = true - AssignForm(f, data) - - typ := reflect.TypeOf(f) - val := reflect.ValueOf(f) - - 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 - } - - if errs[0].FieldNames[0] == field.Name { - data["Err_"+field.Name] = true - - 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") - case binding.ERR_ALPHA_DASH: - 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: - data["ErrorMsg"] = trName + l.Tr("form.max_size_error", GetMaxSize(field)) - case binding.ERR_EMAIL: - data["ErrorMsg"] = trName + l.Tr("form.email_error") - case binding.ERR_URL: - data["ErrorMsg"] = trName + l.Tr("form.url_error") - case binding.ERR_INCLUDE: - data["ErrorMsg"] = trName + l.Tr("form.include_error", GetInclude(field)) - default: - data["ErrorMsg"] = l.Tr("form.unknown_error") + " " + errs[0].Classification - } - return errs - } - } - return errs -} diff --git a/modules/auth/auth_form.go b/modules/auth/auth_form.go deleted file mode 100644 index 9454d856..00000000 --- a/modules/auth/auth_form.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 ( - "github.com/go-macaron/binding" - "gopkg.in/macaron.v1" -) - -type AuthenticationForm struct { - ID int64 - Type int `binding:"Range(2,5)"` - Name string `binding:"Required;MaxSize(30)"` - Host string - Port int - BindDN string - BindPassword string - UserBase string - UserDN string - AttributeUsername string - AttributeName string - AttributeSurname string - AttributeMail string - AttributesInBind bool - Filter string - AdminFilter string - IsActive bool - SMTPAuth string - SMTPHost string - SMTPPort int - AllowedDomains string - SecurityProtocol int `binding:"Range(0,2)"` - TLS bool - SkipVerify bool - PAMServiceName string -} - -func (f *AuthenticationForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/auth/org.go b/modules/auth/org.go deleted file mode 100644 index 53ef6245..00000000 --- a/modules/auth/org.go +++ /dev/null @@ -1,55 +0,0 @@ -// 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 ( - "github.com/go-macaron/binding" - "gopkg.in/macaron.v1" -) - -// ________ .__ __ .__ -// \_____ \_______ _________ ____ |__|____________ _/ |_|__| ____ ____ -// / | \_ __ \/ ___\__ \ / \| \___ /\__ \\ __\ |/ _ \ / \ -// / | \ | \/ /_/ > __ \| | \ |/ / / __ \| | | ( <_> ) | \ -// \_______ /__| \___ (____ /___| /__/_____ \(____ /__| |__|\____/|___| / -// \/ /_____/ \/ \/ \/ \/ \/ - -type CreateOrgForm struct { - OrgName string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"` -} - -func (f *CreateOrgForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type UpdateOrgSettingForm struct { - Name string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"` - FullName string `binding:"MaxSize(100)"` - Description string `binding:"MaxSize(255)"` - Website string `binding:"Url;MaxSize(100)"` - Location string `binding:"MaxSize(50)"` - MaxRepoCreation int -} - -func (f *UpdateOrgSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// ___________ -// \__ ___/___ _____ _____ -// | |_/ __ \\__ \ / \ -// | |\ ___/ / __ \| Y Y \ -// |____| \___ >____ /__|_| / -// \/ \/ \/ - -type CreateTeamForm struct { - TeamName string `binding:"Required;AlphaDashDot;MaxSize(30)"` - Description string `binding:"MaxSize(255)"` - Permission string -} - -func (f *CreateTeamForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/auth/repo_form.go b/modules/auth/repo_form.go deleted file mode 100644 index 77bd4770..00000000 --- a/modules/auth/repo_form.go +++ /dev/null @@ -1,399 +0,0 @@ -// 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/url" - "strings" - - "github.com/Unknwon/com" - "github.com/go-macaron/binding" - "gopkg.in/macaron.v1" - - "github.com/gogits/gogs/models" -) - -// _______________________________________ _________.______________________ _______________.___. -// \______ \_ _____/\______ \_____ \ / _____/| \__ ___/\_____ \\______ \__ | | -// | _/| __)_ | ___// | \ \_____ \ | | | | / | \| _// | | -// | | \| \ | | / | \/ \| | | | / | \ | \\____ | -// |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| -// \/ \/ \/ \/ \/ \/ \/ - -type CreateRepoForm struct { - Uid int64 `binding:"Required"` - RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` - Private bool - Description string `binding:"MaxSize(255)"` - AutoInit bool - Gitignores string - License string - Readme string -} - -func (f *CreateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type MigrateRepoForm struct { - CloneAddr string `json:"clone_addr" binding:"Required"` - AuthUsername string `json:"auth_username"` - AuthPassword string `json:"auth_password"` - Uid int64 `json:"uid" binding:"Required"` - RepoName string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"` - Mirror bool `json:"mirror"` - Private bool `json:"private"` - Description string `json:"description" binding:"MaxSize(255)"` -} - -func (f *MigrateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// ParseRemoteAddr checks if given remote address is valid, -// and returns composed URL with needed username and password. -// It also checks if given user has permission when remote address -// is actually a local path. -func (f MigrateRepoForm) ParseRemoteAddr(user *models.User) (string, error) { - remoteAddr := strings.TrimSpace(f.CloneAddr) - - // Remote address can be HTTP/HTTPS/Git URL or local path. - if strings.HasPrefix(remoteAddr, "http://") || - strings.HasPrefix(remoteAddr, "https://") || - strings.HasPrefix(remoteAddr, "git://") { - u, err := url.Parse(remoteAddr) - if err != nil { - return "", models.ErrInvalidCloneAddr{IsURLError: true} - } - if len(f.AuthUsername)+len(f.AuthPassword) > 0 { - u.User = url.UserPassword(f.AuthUsername, f.AuthPassword) - } - remoteAddr = u.String() - } else if !user.CanImportLocal() { - return "", models.ErrInvalidCloneAddr{IsPermissionDenied: true} - } else if !com.IsDir(remoteAddr) { - return "", models.ErrInvalidCloneAddr{IsInvalidPath: true} - } - - return remoteAddr, nil -} - -type RepoSettingForm struct { - RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` - Description string `binding:"MaxSize(255)"` - Website string `binding:"Url;MaxSize(100)"` - Branch string - Interval int - MirrorAddress string - Private bool - EnablePrune bool - - // Advanced settings - EnableWiki bool - EnableExternalWiki bool - ExternalWikiURL string - EnableIssues bool - EnableExternalTracker bool - ExternalTrackerURL string - TrackerURLFormat string - TrackerIssueStyle string - EnablePulls bool -} - -func (f *RepoSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// __________ .__ -// \______ \____________ ____ ____ | |__ -// | | _/\_ __ \__ \ / \_/ ___\| | \ -// | | \ | | \// __ \| | \ \___| Y \ -// |______ / |__| (____ /___| /\___ >___| / -// \/ \/ \/ \/ \/ - -type ProtectBranchForm struct { - Protected bool - RequirePullRequest bool - EnableWhitelist bool - WhitelistUsers string - WhitelistTeams string -} - -func (f *ProtectBranchForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// __ __ ___. .__ .__ __ -// / \ / \ ____\_ |__ | |__ | |__ ____ | | __ -// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ / -// \ /\ ___/| \_\ \ Y \ Y ( <_> ) < -// \__/\ / \___ >___ /___| /___| /\____/|__|_ \ -// \/ \/ \/ \/ \/ \/ - -type WebhookForm struct { - Events string - Create bool - Push bool - PullRequest bool - Active bool -} - -func (f WebhookForm) PushOnly() bool { - return f.Events == "push_only" -} - -func (f WebhookForm) SendEverything() bool { - return f.Events == "send_everything" -} - -func (f WebhookForm) ChooseEvents() bool { - return f.Events == "choose_events" -} - -type NewWebhookForm struct { - PayloadURL string `binding:"Required;Url"` - ContentType int `binding:"Required"` - Secret string - WebhookForm -} - -func (f *NewWebhookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type NewSlackHookForm struct { - PayloadURL string `binding:"Required;Url"` - Channel string `binding:"Required"` - Username string - IconURL string - Color string - WebhookForm -} - -func (f *NewSlackHookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type NewDiscordHookForm struct { - PayloadURL string `binding:"Required;Url"` - Username string - IconURL string - Color string - WebhookForm -} - -func (f *NewDiscordHookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// .___ -// | | ______ ________ __ ____ -// | |/ ___// ___/ | \_/ __ \ -// | |\___ \ \___ \| | /\ ___/ -// |___/____ >____ >____/ \___ > -// \/ \/ \/ - -type CreateIssueForm struct { - Title string `binding:"Required;MaxSize(255)"` - LabelIDs string `form:"label_ids"` - MilestoneID int64 - AssigneeID int64 - Content string - Files []string -} - -func (f *CreateIssueForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type CreateCommentForm struct { - Content string - Status string `binding:"OmitEmpty;In(reopen,close)"` - Files []string -} - -func (f *CreateCommentForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// _____ .__.__ __ -// / \ |__| | ____ _______/ |_ ____ ____ ____ -// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \ -// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/ -// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > -// \/ \/ \/ \/ \/ - -type CreateMilestoneForm struct { - Title string `binding:"Required;MaxSize(50)"` - Content string - Deadline string -} - -func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// .____ ___. .__ -// | | _____ \_ |__ ____ | | -// | | \__ \ | __ \_/ __ \| | -// | |___ / __ \| \_\ \ ___/| |__ -// |_______ (____ /___ /\___ >____/ -// \/ \/ \/ \/ - -type CreateLabelForm struct { - 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 { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type InitializeLabelsForm struct { - TemplateName string `binding:"Required"` -} - -func (f *InitializeLabelsForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// __________ .__ -// \______ \ ____ | | ____ _____ ______ ____ -// | _// __ \| | _/ __ \\__ \ / ___// __ \ -// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/ -// |____|_ /\___ >____/\___ >____ /____ >\___ > -// \/ \/ \/ \/ \/ \/ - -type NewReleaseForm struct { - TagName string `binding:"Required"` - Target string `form:"tag_target" binding:"Required"` - Title string `binding:"Required"` - Content string - Draft string - Prerelease bool -} - -func (f *NewReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type EditReleaseForm struct { - Title string `form:"title" binding:"Required"` - Content string `form:"content"` - Draft string `form:"draft"` - Prerelease bool `form:"prerelease"` -} - -func (f *EditReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// __ __.__ __ .__ -// / \ / \__| | _|__| -// \ \/\/ / | |/ / | -// \ /| | <| | -// \__/\ / |__|__|_ \__| -// \/ \/ - -type NewWikiForm struct { - OldTitle string - Title string `binding:"Required"` - Content string `binding:"Required"` - Message string -} - -// FIXME: use code generation to generate this method. -func (f *NewWikiForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// ___________ .___.__ __ -// \_ _____/ __| _/|__|/ |_ -// | __)_ / __ | | \ __\ -// | \/ /_/ | | || | -// /_______ /\____ | |__||__| -// \/ \/ - -type EditRepoFileForm struct { - TreePath string `binding:"Required;MaxSize(500)"` - Content string `binding:"Required"` - CommitSummary string `binding:"MaxSize(100)` - CommitMessage string - CommitChoice string `binding:"Required;MaxSize(50)"` - NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"` - LastCommit string -} - -func (f *EditRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -func (f *EditRepoFileForm) IsNewBrnach() bool { - return f.CommitChoice == "commit-to-new-branch" -} - -type EditPreviewDiffForm struct { - Content string -} - -func (f *EditPreviewDiffForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// ____ ___ .__ .___ -// | | \______ | | _________ __| _/ -// | | /\____ \| | / _ \__ \ / __ | -// | | / | |_> > |_( <_> ) __ \_/ /_/ | -// |______/ | __/|____/\____(____ /\____ | -// |__| \/ \/ -// - -type UploadRepoFileForm struct { - TreePath string `binding:MaxSize(500)"` - CommitSummary string `binding:"MaxSize(100)` - CommitMessage string - CommitChoice string `binding:"Required;MaxSize(50)"` - NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"` - Files []string -} - -func (f *UploadRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -func (f *UploadRepoFileForm) IsNewBrnach() bool { - return f.CommitChoice == "commit-to-new-branch" -} - -type RemoveUploadFileForm struct { - File string `binding:"Required;MaxSize(50)"` -} - -func (f *RemoveUploadFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// ________ .__ __ -// \______ \ ____ | | _____/ |_ ____ -// | | \_/ __ \| | _/ __ \ __\/ __ \ -// | ` \ ___/| |_\ ___/| | \ ___/ -// /_______ /\___ >____/\___ >__| \___ > -// \/ \/ \/ \/ - -type DeleteRepoFileForm struct { - CommitSummary string `binding:"MaxSize(100)` - CommitMessage string - CommitChoice string `binding:"Required;MaxSize(50)"` - NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"` -} - -func (f *DeleteRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -func (f *DeleteRepoFileForm) IsNewBrnach() bool { - return f.CommitChoice == "commit-to-new-branch" -} diff --git a/modules/auth/user_form.go b/modules/auth/user_form.go deleted file mode 100644 index fd39a311..00000000 --- a/modules/auth/user_form.go +++ /dev/null @@ -1,153 +0,0 @@ -// 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 ( - "mime/multipart" - - "github.com/go-macaron/binding" - "gopkg.in/macaron.v1" -) - -type InstallForm struct { - 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"` - SSHPort int - UseBuiltinSSHServer bool - HTTPPort string `binding:"Required"` - AppUrl string `binding:"Required"` - LogRootPath string `binding:"Required"` - - SMTPHost string - SMTPFrom string - SMTPUser string `binding:"OmitEmpty;MaxSize(254)" locale:"install.mailer_user"` - SMTPPasswd string - RegisterConfirm bool - MailNotify bool - - OfflineMode bool - DisableGravatar bool - EnableFederatedAvatar bool - DisableRegistration bool - EnableCaptcha bool - RequireSignInView bool - - AdminName string `binding:"OmitEmpty;AlphaDashDot;MaxSize(30)" locale:"install.admin_name"` - AdminPasswd string `binding:"OmitEmpty;MaxSize(255)" locale:"install.admin_password"` - AdminConfirmPasswd string - AdminEmail string `binding:"OmitEmpty;MinSize(3);MaxSize(254);Include(@)" locale:"install.admin_email"` -} - -func (f *InstallForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// _____ ____ _________________ ___ -// / _ \ | | \__ ___/ | \ -// / /_\ \| | / | | / ~ \ -// / | \ | / | | \ Y / -// \____|__ /______/ |____| \___|_ / -// \/ \/ - -type RegisterForm struct { - UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` - Email string `binding:"Required;Email;MaxSize(254)"` - Password string `binding:"Required;MaxSize(255)"` - Retype string -} - -func (f *RegisterForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type SignInForm struct { - UserName string `binding:"Required;MaxSize(254)"` - Password string `binding:"Required;MaxSize(255)"` - Remember bool -} - -func (f *SignInForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -// __________________________________________.___ _______ ________ _________ -// / _____/\_ _____/\__ ___/\__ ___/| |\ \ / _____/ / _____/ -// \_____ \ | __)_ | | | | | |/ | \/ \ ___ \_____ \ -// / \ | \ | | | | | / | \ \_\ \/ \ -// /_______ //_______ / |____| |____| |___\____|__ /\______ /_______ / -// \/ \/ \/ \/ \/ - -type UpdateProfileForm struct { - Name string `binding:"OmitEmpty;MaxSize(35)"` - FullName string `binding:"MaxSize(100)"` - Email string `binding:"Required;Email;MaxSize(254)"` - Website string `binding:"Url;MaxSize(100)"` - Location string `binding:"MaxSize(50)"` -} - -func (f *UpdateProfileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -const ( - AVATAR_LOCAL string = "local" - AVATAR_BYMAIL string = "bymail" -) - -type AvatarForm struct { - Source string - Avatar *multipart.FileHeader - Gravatar string `binding:"OmitEmpty;Email;MaxSize(254)"` - Federavatar bool -} - -func (f *AvatarForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type AddEmailForm struct { - Email string `binding:"Required;Email;MaxSize(254)"` -} - -func (f *AddEmailForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type ChangePasswordForm struct { - OldPassword string `form:"old_password" binding:"Required;MinSize(1);MaxSize(255)"` - Password string `form:"password" binding:"Required;MaxSize(255)"` - Retype string `form:"retype"` -} - -func (f *ChangePasswordForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type AddSSHKeyForm struct { - Title string `binding:"Required;MaxSize(50)"` - Content string `binding:"Required"` -} - -func (f *AddSSHKeyForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} - -type NewAccessTokenForm struct { - Name string `binding:"Required"` -} - -func (f *NewAccessTokenForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { - return validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/context/context.go b/modules/context/context.go index f6f2756a..e3cc6f6b 100644 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -22,6 +22,7 @@ import ( "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/form" "github.com/gogits/gogs/modules/setting" ) @@ -78,9 +79,9 @@ func (ctx *Context) HTML(status int, name base.TplName) { } // RenderWithErr used for page has form validation but need to prompt error to users. -func (ctx *Context) RenderWithErr(msg string, tpl base.TplName, form interface{}) { - if form != nil { - auth.AssignForm(form, ctx.Data) +func (ctx *Context) RenderWithErr(msg string, tpl base.TplName, f interface{}) { + if f != nil { + form.Assign(f, ctx.Data) } ctx.Flash.ErrorMsg = msg ctx.Data["Flash"] = ctx.Flash diff --git a/modules/form/admin.go b/modules/form/admin.go new file mode 100644 index 00000000..c51d62ca --- /dev/null +++ b/modules/form/admin.go @@ -0,0 +1,43 @@ +// 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 form + +import ( + "github.com/go-macaron/binding" + "gopkg.in/macaron.v1" +) + +type AdminCrateUser struct { + LoginType string `binding:"Required"` + LoginName string + UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` + Email string `binding:"Required;Email;MaxSize(254)"` + Password string `binding:"MaxSize(255)"` + SendNotify bool +} + +func (f *AdminCrateUser) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type AdminEditUser struct { + LoginType string `binding:"Required"` + LoginName string + FullName string `binding:"MaxSize(100)"` + Email string `binding:"Required;Email;MaxSize(254)"` + Password string `binding:"MaxSize(255)"` + Website string `binding:"MaxSize(50)"` + Location string `binding:"MaxSize(50)"` + MaxRepoCreation int + Active bool + Admin bool + AllowGitHook bool + AllowImportLocal bool + ProhibitLogin bool +} + +func (f *AdminEditUser) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} diff --git a/modules/form/auth.go b/modules/form/auth.go new file mode 100644 index 00000000..10dccd00 --- /dev/null +++ b/modules/form/auth.go @@ -0,0 +1,42 @@ +// 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 form + +import ( + "github.com/go-macaron/binding" + "gopkg.in/macaron.v1" +) + +type Authentication struct { + ID int64 + Type int `binding:"Range(2,5)"` + Name string `binding:"Required;MaxSize(30)"` + Host string + Port int + BindDN string + BindPassword string + UserBase string + UserDN string + AttributeUsername string + AttributeName string + AttributeSurname string + AttributeMail string + AttributesInBind bool + Filter string + AdminFilter string + IsActive bool + SMTPAuth string + SMTPHost string + SMTPPort int + AllowedDomains string + SecurityProtocol int `binding:"Range(0,2)"` + TLS bool + SkipVerify bool + PAMServiceName string +} + +func (f *Authentication) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} diff --git a/modules/form/form.go b/modules/form/form.go new file mode 100644 index 00000000..1e6fec9e --- /dev/null +++ b/modules/form/form.go @@ -0,0 +1,135 @@ +// Copyright 2017 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 form + +import ( + "reflect" + "strings" + + "github.com/Unknwon/com" + "github.com/go-macaron/binding" + "gopkg.in/macaron.v1" +) + +func init() { + binding.SetNameMapper(com.ToSnakeCase) +} + +type Form interface { + binding.Validator +} + +// Assign assign form values back to the template data. +func Assign(form interface{}, data map[string]interface{}) { + 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 + } else if len(fieldName) == 0 { + fieldName = com.ToSnakeCase(field.Name) + } + + data[fieldName] = val.Field(i).Interface() + } +} + +func getRuleBody(field reflect.StructField, prefix string) string { + for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { + if strings.HasPrefix(rule, prefix) { + return rule[len(prefix) : len(rule)-1] + } + } + return "" +} + +func getSize(field reflect.StructField) string { + return getRuleBody(field, "Size(") +} + +func getMinSize(field reflect.StructField) string { + return getRuleBody(field, "MinSize(") +} + +func getMaxSize(field reflect.StructField) string { + return getRuleBody(field, "MaxSize(") +} + +func getInclude(field reflect.StructField) string { + return getRuleBody(field, "Include(") +} + +func validate(errs binding.Errors, data map[string]interface{}, f Form, l macaron.Locale) binding.Errors { + if errs.Len() == 0 { + return errs + } + + data["HasError"] = true + Assign(f, data) + + typ := reflect.TypeOf(f) + val := reflect.ValueOf(f) + + 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 + } + + if errs[0].FieldNames[0] == field.Name { + data["Err_"+field.Name] = true + + 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") + case binding.ERR_ALPHA_DASH: + 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: + data["ErrorMsg"] = trName + l.Tr("form.max_size_error", getMaxSize(field)) + case binding.ERR_EMAIL: + data["ErrorMsg"] = trName + l.Tr("form.email_error") + case binding.ERR_URL: + data["ErrorMsg"] = trName + l.Tr("form.url_error") + case binding.ERR_INCLUDE: + data["ErrorMsg"] = trName + l.Tr("form.include_error", getInclude(field)) + default: + data["ErrorMsg"] = l.Tr("form.unknown_error") + " " + errs[0].Classification + } + return errs + } + } + return errs +} diff --git a/modules/form/org.go b/modules/form/org.go new file mode 100644 index 00000000..5c268c83 --- /dev/null +++ b/modules/form/org.go @@ -0,0 +1,41 @@ +// 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 form + +import ( + "github.com/go-macaron/binding" + "gopkg.in/macaron.v1" +) + +type CreateOrg struct { + OrgName string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"` +} + +func (f *CreateOrg) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type UpdateOrgSetting struct { + Name string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"` + FullName string `binding:"MaxSize(100)"` + Description string `binding:"MaxSize(255)"` + Website string `binding:"Url;MaxSize(100)"` + Location string `binding:"MaxSize(50)"` + MaxRepoCreation int +} + +func (f *UpdateOrgSetting) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type CreateTeam struct { + TeamName string `binding:"Required;AlphaDashDot;MaxSize(30)"` + Description string `binding:"MaxSize(255)"` + Permission string +} + +func (f *CreateTeam) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} diff --git a/modules/form/repo.go b/modules/form/repo.go new file mode 100644 index 00000000..0aadde96 --- /dev/null +++ b/modules/form/repo.go @@ -0,0 +1,399 @@ +// 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 form + +import ( + "net/url" + "strings" + + "github.com/Unknwon/com" + "github.com/go-macaron/binding" + "gopkg.in/macaron.v1" + + "github.com/gogits/gogs/models" +) + +// _______________________________________ _________.______________________ _______________.___. +// \______ \_ _____/\______ \_____ \ / _____/| \__ ___/\_____ \\______ \__ | | +// | _/| __)_ | ___// | \ \_____ \ | | | | / | \| _// | | +// | | \| \ | | / | \/ \| | | | / | \ | \\____ | +// |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| +// \/ \/ \/ \/ \/ \/ \/ + +type CreateRepo struct { + Uid int64 `binding:"Required"` + RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` + Private bool + Description string `binding:"MaxSize(255)"` + AutoInit bool + Gitignores string + License string + Readme string +} + +func (f *CreateRepo) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type MigrateRepo struct { + CloneAddr string `json:"clone_addr" binding:"Required"` + AuthUsername string `json:"auth_username"` + AuthPassword string `json:"auth_password"` + Uid int64 `json:"uid" binding:"Required"` + RepoName string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"` + Mirror bool `json:"mirror"` + Private bool `json:"private"` + Description string `json:"description" binding:"MaxSize(255)"` +} + +func (f *MigrateRepo) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// ParseRemoteAddr checks if given remote address is valid, +// and returns composed URL with needed username and password. +// It also checks if given user has permission when remote address +// is actually a local path. +func (f MigrateRepo) ParseRemoteAddr(user *models.User) (string, error) { + remoteAddr := strings.TrimSpace(f.CloneAddr) + + // Remote address can be HTTP/HTTPS/Git URL or local path. + if strings.HasPrefix(remoteAddr, "http://") || + strings.HasPrefix(remoteAddr, "https://") || + strings.HasPrefix(remoteAddr, "git://") { + u, err := url.Parse(remoteAddr) + if err != nil { + return "", models.ErrInvalidCloneAddr{IsURLError: true} + } + if len(f.AuthUsername)+len(f.AuthPassword) > 0 { + u.User = url.UserPassword(f.AuthUsername, f.AuthPassword) + } + remoteAddr = u.String() + } else if !user.CanImportLocal() { + return "", models.ErrInvalidCloneAddr{IsPermissionDenied: true} + } else if !com.IsDir(remoteAddr) { + return "", models.ErrInvalidCloneAddr{IsInvalidPath: true} + } + + return remoteAddr, nil +} + +type RepoSetting struct { + RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` + Description string `binding:"MaxSize(255)"` + Website string `binding:"Url;MaxSize(100)"` + Branch string + Interval int + MirrorAddress string + Private bool + EnablePrune bool + + // Advanced settings + EnableWiki bool + EnableExternalWiki bool + ExternalWikiURL string + EnableIssues bool + EnableExternalTracker bool + ExternalTrackerURL string + TrackerURLFormat string + TrackerIssueStyle string + EnablePulls bool +} + +func (f *RepoSetting) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// __________ .__ +// \______ \____________ ____ ____ | |__ +// | | _/\_ __ \__ \ / \_/ ___\| | \ +// | | \ | | \// __ \| | \ \___| Y \ +// |______ / |__| (____ /___| /\___ >___| / +// \/ \/ \/ \/ \/ + +type ProtectBranch struct { + Protected bool + RequirePullRequest bool + EnableWhitelist bool + WhitelistUsers string + WhitelistTeams string +} + +func (f *ProtectBranch) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// __ __ ___. .__ .__ __ +// / \ / \ ____\_ |__ | |__ | |__ ____ | | __ +// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ / +// \ /\ ___/| \_\ \ Y \ Y ( <_> ) < +// \__/\ / \___ >___ /___| /___| /\____/|__|_ \ +// \/ \/ \/ \/ \/ \/ + +type Webhook struct { + Events string + Create bool + Push bool + PullRequest bool + Active bool +} + +func (f Webhook) PushOnly() bool { + return f.Events == "push_only" +} + +func (f Webhook) SendEverything() bool { + return f.Events == "send_everything" +} + +func (f Webhook) ChooseEvents() bool { + return f.Events == "choose_events" +} + +type NewWebhook struct { + PayloadURL string `binding:"Required;Url"` + ContentType int `binding:"Required"` + Secret string + Webhook +} + +func (f *NewWebhook) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type NewSlackHook struct { + PayloadURL string `binding:"Required;Url"` + Channel string `binding:"Required"` + Username string + IconURL string + Color string + Webhook +} + +func (f *NewSlackHook) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type NewDiscordHook struct { + PayloadURL string `binding:"Required;Url"` + Username string + IconURL string + Color string + Webhook +} + +func (f *NewDiscordHook) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// .___ +// | | ______ ________ __ ____ +// | |/ ___// ___/ | \_/ __ \ +// | |\___ \ \___ \| | /\ ___/ +// |___/____ >____ >____/ \___ > +// \/ \/ \/ + +type CreateIssue struct { + Title string `binding:"Required;MaxSize(255)"` + LabelIDs string `form:"label_ids"` + MilestoneID int64 + AssigneeID int64 + Content string + Files []string +} + +func (f *CreateIssue) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type CreateComment struct { + Content string + Status string `binding:"OmitEmpty;In(reopen,close)"` + Files []string +} + +func (f *CreateComment) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// _____ .__.__ __ +// / \ |__| | ____ _______/ |_ ____ ____ ____ +// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \ +// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/ +// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > +// \/ \/ \/ \/ \/ + +type CreateMilestone struct { + Title string `binding:"Required;MaxSize(50)"` + Content string + Deadline string +} + +func (f *CreateMilestone) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// .____ ___. .__ +// | | _____ \_ |__ ____ | | +// | | \__ \ | __ \_/ __ \| | +// | |___ / __ \| \_\ \ ___/| |__ +// |_______ (____ /___ /\___ >____/ +// \/ \/ \/ \/ + +type CreateLabel struct { + 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 *CreateLabel) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type InitializeLabels struct { + TemplateName string `binding:"Required"` +} + +func (f *InitializeLabels) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// __________ .__ +// \______ \ ____ | | ____ _____ ______ ____ +// | _// __ \| | _/ __ \\__ \ / ___// __ \ +// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/ +// |____|_ /\___ >____/\___ >____ /____ >\___ > +// \/ \/ \/ \/ \/ \/ + +type NewRelease struct { + TagName string `binding:"Required"` + Target string `form:"tag_target" binding:"Required"` + Title string `binding:"Required"` + Content string + Draft string + Prerelease bool +} + +func (f *NewRelease) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type EditRelease struct { + Title string `binding:"Required"` + Content string + Draft string + Prerelease bool +} + +func (f *EditRelease) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// __ __.__ __ .__ +// / \ / \__| | _|__| +// \ \/\/ / | |/ / | +// \ /| | <| | +// \__/\ / |__|__|_ \__| +// \/ \/ + +type NewWiki struct { + OldTitle string + Title string `binding:"Required"` + Content string `binding:"Required"` + Message string +} + +// FIXME: use code generation to generate this method. +func (f *NewWiki) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// ___________ .___.__ __ +// \_ _____/ __| _/|__|/ |_ +// | __)_ / __ | | \ __\ +// | \/ /_/ | | || | +// /_______ /\____ | |__||__| +// \/ \/ + +type EditRepoFile struct { + TreePath string `binding:"Required;MaxSize(500)"` + Content string `binding:"Required"` + CommitSummary string `binding:"MaxSize(100)` + CommitMessage string + CommitChoice string `binding:"Required;MaxSize(50)"` + NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"` + LastCommit string +} + +func (f *EditRepoFile) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +func (f *EditRepoFile) IsNewBrnach() bool { + return f.CommitChoice == "commit-to-new-branch" +} + +type EditPreviewDiff struct { + Content string +} + +func (f *EditPreviewDiff) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// ____ ___ .__ .___ +// | | \______ | | _________ __| _/ +// | | /\____ \| | / _ \__ \ / __ | +// | | / | |_> > |_( <_> ) __ \_/ /_/ | +// |______/ | __/|____/\____(____ /\____ | +// |__| \/ \/ +// + +type UploadRepoFile struct { + TreePath string `binding:MaxSize(500)"` + CommitSummary string `binding:"MaxSize(100)` + CommitMessage string + CommitChoice string `binding:"Required;MaxSize(50)"` + NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"` + Files []string +} + +func (f *UploadRepoFile) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +func (f *UploadRepoFile) IsNewBrnach() bool { + return f.CommitChoice == "commit-to-new-branch" +} + +type RemoveUploadFile struct { + File string `binding:"Required;MaxSize(50)"` +} + +func (f *RemoveUploadFile) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// ________ .__ __ +// \______ \ ____ | | _____/ |_ ____ +// | | \_/ __ \| | _/ __ \ __\/ __ \ +// | ` \ ___/| |_\ ___/| | \ ___/ +// /_______ /\___ >____/\___ >__| \___ > +// \/ \/ \/ \/ + +type DeleteRepoFile struct { + CommitSummary string `binding:"MaxSize(100)` + CommitMessage string + CommitChoice string `binding:"Required;MaxSize(50)"` + NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"` +} + +func (f *DeleteRepoFile) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +func (f *DeleteRepoFile) IsNewBrnach() bool { + return f.CommitChoice == "commit-to-new-branch" +} diff --git a/modules/form/user.go b/modules/form/user.go new file mode 100644 index 00000000..c7d7a3d6 --- /dev/null +++ b/modules/form/user.go @@ -0,0 +1,153 @@ +// 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 form + +import ( + "mime/multipart" + + "github.com/go-macaron/binding" + "gopkg.in/macaron.v1" +) + +type Install struct { + 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"` + SSHPort int + UseBuiltinSSHServer bool + HTTPPort string `binding:"Required"` + AppUrl string `binding:"Required"` + LogRootPath string `binding:"Required"` + + SMTPHost string + SMTPFrom string + SMTPUser string `binding:"OmitEmpty;MaxSize(254)" locale:"install.mailer_user"` + SMTPPasswd string + RegisterConfirm bool + MailNotify bool + + OfflineMode bool + DisableGravatar bool + EnableFederatedAvatar bool + DisableRegistration bool + EnableCaptcha bool + RequireSignInView bool + + AdminName string `binding:"OmitEmpty;AlphaDashDot;MaxSize(30)" locale:"install.admin_name"` + AdminPasswd string `binding:"OmitEmpty;MaxSize(255)" locale:"install.admin_password"` + AdminConfirmPasswd string + AdminEmail string `binding:"OmitEmpty;MinSize(3);MaxSize(254);Include(@)" locale:"install.admin_email"` +} + +func (f *Install) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// _____ ____ _________________ ___ +// / _ \ | | \__ ___/ | \ +// / /_\ \| | / | | / ~ \ +// / | \ | / | | \ Y / +// \____|__ /______/ |____| \___|_ / +// \/ \/ + +type Register struct { + UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` + Email string `binding:"Required;Email;MaxSize(254)"` + Password string `binding:"Required;MaxSize(255)"` + Retype string +} + +func (f *Register) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type SignIn struct { + UserName string `binding:"Required;MaxSize(254)"` + Password string `binding:"Required;MaxSize(255)"` + Remember bool +} + +func (f *SignIn) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// __________________________________________.___ _______ ________ _________ +// / _____/\_ _____/\__ ___/\__ ___/| |\ \ / _____/ / _____/ +// \_____ \ | __)_ | | | | | |/ | \/ \ ___ \_____ \ +// / \ | \ | | | | | / | \ \_\ \/ \ +// /_______ //_______ / |____| |____| |___\____|__ /\______ /_______ / +// \/ \/ \/ \/ \/ + +type UpdateProfile struct { + Name string `binding:"OmitEmpty;MaxSize(35)"` + FullName string `binding:"MaxSize(100)"` + Email string `binding:"Required;Email;MaxSize(254)"` + Website string `binding:"Url;MaxSize(100)"` + Location string `binding:"MaxSize(50)"` +} + +func (f *UpdateProfile) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +const ( + AVATAR_LOCAL string = "local" + AVATAR_BYMAIL string = "bymail" +) + +type Avatar struct { + Source string + Avatar *multipart.FileHeader + Gravatar string `binding:"OmitEmpty;Email;MaxSize(254)"` + Federavatar bool +} + +func (f *Avatar) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type AddEmail struct { + Email string `binding:"Required;Email;MaxSize(254)"` +} + +func (f *AddEmail) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type ChangePassword struct { + OldPassword string `binding:"Required;MinSize(1);MaxSize(255)"` + Password string `binding:"Required;MaxSize(255)"` + Retype string +} + +func (f *ChangePassword) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type AddSSHKey struct { + Title string `binding:"Required;MaxSize(50)"` + Content string `binding:"Required"` +} + +func (f *AddSSHKey) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +type NewAccessToken struct { + Name string `binding:"Required"` +} + +func (f *NewAccessToken) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} -- cgit v1.2.3