diff options
Diffstat (limited to 'internal/form')
-rw-r--r-- | internal/form/admin.go | 43 | ||||
-rw-r--r-- | internal/form/auth.go | 49 | ||||
-rw-r--r-- | internal/form/form.go | 155 | ||||
-rw-r--r-- | internal/form/org.go | 41 | ||||
-rw-r--r-- | internal/form/repo.go | 419 | ||||
-rw-r--r-- | internal/form/user.go | 155 |
6 files changed, 862 insertions, 0 deletions
diff --git a/internal/form/admin.go b/internal/form/admin.go new file mode 100644 index 00000000..c51d62ca --- /dev/null +++ b/internal/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/internal/form/auth.go b/internal/form/auth.go new file mode 100644 index 00000000..47ecc813 --- /dev/null +++ b/internal/form/auth.go @@ -0,0 +1,49 @@ +// 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,6)"` + 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 + GroupEnabled bool + GroupDN string + GroupFilter string + GroupMemberUID string + UserUID string + IsActive bool + IsDefault bool + SMTPAuth string + SMTPHost string + SMTPPort int + AllowedDomains string + SecurityProtocol int `binding:"Range(0,2)"` + TLS bool + SkipVerify bool + PAMServiceName string + GitHubAPIEndpoint string `form:"github_api_endpoint" binding:"Url"` +} + +func (f *Authentication) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} diff --git a/internal/form/form.go b/internal/form/form.go new file mode 100644 index 00000000..4cd81fac --- /dev/null +++ b/internal/form/form.go @@ -0,0 +1,155 @@ +// 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 ( + "fmt" + "reflect" + "regexp" + "strings" + + "github.com/unknwon/com" + "github.com/go-macaron/binding" + "gopkg.in/macaron.v1" +) + +const ERR_ALPHA_DASH_DOT_SLASH = "AlphaDashDotSlashError" + +var AlphaDashDotSlashPattern = regexp.MustCompile("[^\\d\\w-_\\./]") + +func init() { + binding.SetNameMapper(com.ToSnakeCase) + binding.AddRule(&binding.Rule{ + IsMatch: func(rule string) bool { + return rule == "AlphaDashDotSlash" + }, + IsValid: func(errs binding.Errors, name string, v interface{}) (bool, binding.Errors) { + if AlphaDashDotSlashPattern.MatchString(fmt.Sprintf("%v", v)) { + errs.Add([]string{name}, ERR_ALPHA_DASH_DOT_SLASH, "AlphaDashDotSlash") + return false, errs + } + return true, errs + }, + }) +} + +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 ERR_ALPHA_DASH_DOT_SLASH: + data["ErrorMsg"] = trName + l.Tr("form.alpha_dash_dot_slash_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/internal/form/org.go b/internal/form/org.go new file mode 100644 index 00000000..5c268c83 --- /dev/null +++ b/internal/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/internal/form/repo.go b/internal/form/repo.go new file mode 100644 index 00000000..d61bdbf1 --- /dev/null +++ b/internal/form/repo.go @@ -0,0 +1,419 @@ +// 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/go-macaron/binding" + "github.com/unknwon/com" + "gopkg.in/macaron.v1" + + "gogs.io/gogs/internal/db" +) + +// _______________________________________ _________.______________________ _______________.___. +// \______ \_ _____/\______ \_____ \ / _____/| \__ ___/\_____ \\______ \__ | | +// | _/| __)_ | ___// | \ \_____ \ | | | | / | \| _// | | +// | | \| \ | | / | \/ \| | | | / | \ | \\____ | +// |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| +// \/ \/ \/ \/ \/ \/ \/ + +type CreateRepo struct { + UserID int64 `binding:"Required"` + RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` + Private bool + Description string `binding:"MaxSize(512)"` + 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(512)"` +} + +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 *db.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 "", db.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 "", db.ErrInvalidCloneAddr{IsPermissionDenied: true} + } else if !com.IsDir(remoteAddr) { + return "", db.ErrInvalidCloneAddr{IsInvalidPath: true} + } + + return remoteAddr, nil +} + +type RepoSetting struct { + RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` + Description string `binding:"MaxSize(512)"` + Website string `binding:"Url;MaxSize(100)"` + Branch string + Interval int + MirrorAddress string + Private bool + EnablePrune bool + + // Advanced settings + EnableWiki bool + AllowPublicWiki bool + EnableExternalWiki bool + ExternalWikiURL string + EnableIssues bool + AllowPublicIssues bool + EnableExternalTracker bool + ExternalTrackerURL string + TrackerURLFormat string + TrackerIssueStyle string + EnablePulls bool + PullsIgnoreWhitespace bool + PullsAllowRebase 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 + Delete bool + Fork bool + Push bool + Issues bool + IssueComment bool + PullRequest bool + Release 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 NewDingtalkHook struct { + PayloadURL string `binding:"Required;Url"` + Webhook +} + +func (f *NewDingtalkHook) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + +// .___ +// | | ______ ________ __ ____ +// | |/ ___// ___/ | \_/ __ \ +// | |\___ \ \___ \| | /\ ___/ +// |___/____ >____ >____/ \___ > +// \/ \/ \/ + +type NewIssue struct { + Title string `binding:"Required;MaxSize(255)"` + LabelIDs string `form:"label_ids"` + MilestoneID int64 + AssigneeID int64 + Content string + Files []string +} + +func (f *NewIssue) 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_title"` + 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 + Files []string +} + +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 + Files []string +} + +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:"AlphaDashDotSlash;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/internal/form/user.go b/internal/form/user.go new file mode 100644 index 00000000..ffc7dda4 --- /dev/null +++ b/internal/form/user.go @@ -0,0 +1,155 @@ +// 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"` + EnableConsoleMode bool + + 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)"` + LoginSource int64 + 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:"Required;AlphaDashDot;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) +} |