| @@ -280,7 +280,7 @@ func runWeb(ctx *cli.Context) error { | |||||
| m.Group("/users", func() { | m.Group("/users", func() { | ||||
| m.Get("", admin.Users) | m.Get("", admin.Users) | ||||
| m.Combo("/new").Get(admin.NewUser).Post(bindIgnErr(auth.AdminCrateUserForm{}), admin.NewUserPost) | |||||
| m.Combo("/new").Get(admin.NewUser).Post(bindIgnErr(auth.AdminCreateUserForm{}), admin.NewUserPost) | |||||
| m.Combo("/:userid").Get(admin.EditUser).Post(bindIgnErr(auth.AdminEditUserForm{}), admin.EditUserPost) | m.Combo("/:userid").Get(admin.EditUser).Post(bindIgnErr(auth.AdminEditUserForm{}), admin.EditUserPost) | ||||
| m.Post("/:userid/delete", admin.DeleteUser) | m.Post("/:userid/delete", admin.DeleteUser) | ||||
| }) | }) | ||||
| @@ -502,7 +502,7 @@ func LoginViaSMTP(user *User, login, password string, sourceID int64, cfg *SMTPC | |||||
| // LoginViaPAM queries if login/password is valid against the PAM, | // LoginViaPAM queries if login/password is valid against the PAM, | ||||
| // and create a local user if success when enabled. | // and create a local user if success when enabled. | ||||
| func LoginViaPAM(user *User, login, password string, sourceID int64, cfg *PAMConfig, autoRegister bool) (*User, error) { | func LoginViaPAM(user *User, login, password string, sourceID int64, cfg *PAMConfig, autoRegister bool) (*User, error) { | ||||
| if err := pam.PAMAuth(cfg.ServiceName, login, password); err != nil { | |||||
| if err := pam.Auth(cfg.ServiceName, login, password); err != nil { | |||||
| if strings.Contains(err.Error(), "Authentication failure") { | if strings.Contains(err.Error(), "Authentication failure") { | ||||
| return nil, ErrUserNotExist{0, login, 0} | return nil, ErrUserNotExist{0, login, 0} | ||||
| } | } | ||||
| @@ -10,7 +10,8 @@ import ( | |||||
| "github.com/go-macaron/binding" | "github.com/go-macaron/binding" | ||||
| ) | ) | ||||
| type AdminCrateUserForm struct { | |||||
| // AdminCreateUserForm form for admin to create user | |||||
| type AdminCreateUserForm struct { | |||||
| LoginType string `binding:"Required"` | LoginType string `binding:"Required"` | ||||
| LoginName string | LoginName string | ||||
| UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` | UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` | ||||
| @@ -19,10 +20,12 @@ type AdminCrateUserForm struct { | |||||
| SendNotify bool | SendNotify bool | ||||
| } | } | ||||
| func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | |||||
| // Validate validates form fields | |||||
| func (f *AdminCreateUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | |||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // AdminEditUserForm form for admin to create user | |||||
| type AdminEditUserForm struct { | type AdminEditUserForm struct { | ||||
| LoginType string `binding:"Required"` | LoginType string `binding:"Required"` | ||||
| LoginName string | LoginName string | ||||
| @@ -39,6 +42,7 @@ type AdminEditUserForm struct { | |||||
| ProhibitLogin bool | ProhibitLogin bool | ||||
| } | } | ||||
| // Validate validates form fields | |||||
| func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -21,6 +21,7 @@ import ( | |||||
| "code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
| ) | ) | ||||
| // IsAPIPath if URL is an api path | |||||
| func IsAPIPath(url string) bool { | func IsAPIPath(url string) bool { | ||||
| return strings.HasPrefix(url, "/api/") | return strings.HasPrefix(url, "/api/") | ||||
| } | } | ||||
| @@ -110,9 +111,8 @@ func SignedInUser(ctx *macaron.Context, sess session.Store) (*models.User, bool) | |||||
| // FIXME: should I create a system notice? | // FIXME: should I create a system notice? | ||||
| log.Error(4, "CreateUser: %v", err) | log.Error(4, "CreateUser: %v", err) | ||||
| return nil, false | return nil, false | ||||
| } else { | |||||
| return u, false | |||||
| } | } | ||||
| return u, false | |||||
| } | } | ||||
| } | } | ||||
| return u, false | return u, false | ||||
| @@ -148,6 +148,7 @@ func SignedInUser(ctx *macaron.Context, sess session.Store) (*models.User, bool) | |||||
| return u, false | return u, false | ||||
| } | } | ||||
| // Form form binding interface | |||||
| type Form interface { | type Form interface { | ||||
| binding.Validator | binding.Validator | ||||
| } | } | ||||
| @@ -190,18 +191,22 @@ func getRuleBody(field reflect.StructField, prefix string) string { | |||||
| return "" | return "" | ||||
| } | } | ||||
| // GetSize get size int form tag | |||||
| func GetSize(field reflect.StructField) string { | func GetSize(field reflect.StructField) string { | ||||
| return getRuleBody(field, "Size(") | return getRuleBody(field, "Size(") | ||||
| } | } | ||||
| // GetMinSize get minimal size in form tag | |||||
| func GetMinSize(field reflect.StructField) string { | func GetMinSize(field reflect.StructField) string { | ||||
| return getRuleBody(field, "MinSize(") | return getRuleBody(field, "MinSize(") | ||||
| } | } | ||||
| // GetMaxSize get max size in form tag | |||||
| func GetMaxSize(field reflect.StructField) string { | func GetMaxSize(field reflect.StructField) string { | ||||
| return getRuleBody(field, "MaxSize(") | return getRuleBody(field, "MaxSize(") | ||||
| } | } | ||||
| // GetInclude get include in form tag | |||||
| func GetInclude(field reflect.StructField) string { | func GetInclude(field reflect.StructField) string { | ||||
| return getRuleBody(field, "Include(") | return getRuleBody(field, "Include(") | ||||
| } | } | ||||
| @@ -9,6 +9,7 @@ import ( | |||||
| "gopkg.in/macaron.v1" | "gopkg.in/macaron.v1" | ||||
| ) | ) | ||||
| // AuthenticationForm form for authentication | |||||
| type AuthenticationForm struct { | type AuthenticationForm struct { | ||||
| ID int64 | ID int64 | ||||
| Type int `binding:"Range(2,5)"` | Type int `binding:"Range(2,5)"` | ||||
| @@ -37,6 +38,7 @@ type AuthenticationForm struct { | |||||
| PAMServiceName string | PAMServiceName string | ||||
| } | } | ||||
| // Validate validates fields | |||||
| func (f *AuthenticationForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *AuthenticationForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -16,6 +16,7 @@ import ( | |||||
| "code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
| ) | ) | ||||
| // SecurityProtocol protocol type | |||||
| type SecurityProtocol int | type SecurityProtocol int | ||||
| // Note: new type must be added at the end of list to maintain compatibility. | // Note: new type must be added at the end of list to maintain compatibility. | ||||
| @@ -25,7 +26,7 @@ const ( | |||||
| SecurityProtocolStartTLS | SecurityProtocolStartTLS | ||||
| ) | ) | ||||
| // Basic LDAP authentication service | |||||
| // Source Basic LDAP authentication service | |||||
| type Source struct { | type Source struct { | ||||
| Name string // canonical name (ie. corporate.ad) | Name string // canonical name (ie. corporate.ad) | ||||
| Host string // LDAP host | Host string // LDAP host | ||||
| @@ -148,7 +149,7 @@ func bindUser(l *ldap.Conn, userDN, passwd string) error { | |||||
| return err | return err | ||||
| } | } | ||||
| // searchEntry : search an LDAP source if an entry (name, passwd) is valid and in the specific filter | |||||
| // SearchEntry : search an LDAP source if an entry (name, passwd) is valid and in the specific filter | |||||
| func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, string, string, string, bool, bool) { | func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, string, string, string, bool, bool) { | ||||
| l, err := dial(ls) | l, err := dial(ls) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -16,14 +16,17 @@ import ( | |||||
| // \_______ /__| \___ (____ /___| /__/_____ \(____ /__| |__|\____/|___| / | // \_______ /__| \___ (____ /___| /__/_____ \(____ /__| |__|\____/|___| / | ||||
| // \/ /_____/ \/ \/ \/ \/ \/ | // \/ /_____/ \/ \/ \/ \/ \/ | ||||
| // CreateOrgForm form for creating organization | |||||
| type CreateOrgForm struct { | type CreateOrgForm struct { | ||||
| OrgName string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"` | OrgName string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *CreateOrgForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *CreateOrgForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // UpdateOrgSettingForm form for updating organization settings | |||||
| type UpdateOrgSettingForm struct { | type UpdateOrgSettingForm struct { | ||||
| Name string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"` | Name string `binding:"Required;AlphaDashDot;MaxSize(35)" locale:"org.org_name_holder"` | ||||
| FullName string `binding:"MaxSize(100)"` | FullName string `binding:"MaxSize(100)"` | ||||
| @@ -33,6 +36,7 @@ type UpdateOrgSettingForm struct { | |||||
| MaxRepoCreation int | MaxRepoCreation int | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *UpdateOrgSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *UpdateOrgSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -44,12 +48,14 @@ func (f *UpdateOrgSettingForm) Validate(ctx *macaron.Context, errs binding.Error | |||||
| // |____| \___ >____ /__|_| / | // |____| \___ >____ /__|_| / | ||||
| // \/ \/ \/ | // \/ \/ \/ | ||||
| // CreateTeamForm form for creating team | |||||
| type CreateTeamForm struct { | type CreateTeamForm struct { | ||||
| TeamName string `binding:"Required;AlphaDashDot;MaxSize(30)"` | TeamName string `binding:"Required;AlphaDashDot;MaxSize(30)"` | ||||
| Description string `binding:"MaxSize(255)"` | Description string `binding:"MaxSize(255)"` | ||||
| Permission string | Permission string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *CreateTeamForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *CreateTeamForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -12,7 +12,8 @@ import ( | |||||
| "github.com/msteinert/pam" | "github.com/msteinert/pam" | ||||
| ) | ) | ||||
| func PAMAuth(serviceName, userName, passwd string) error { | |||||
| // Auth pam auth service | |||||
| func Auth(serviceName, userName, passwd string) error { | |||||
| t, err := pam.StartFunc(serviceName, userName, func(s pam.Style, msg string) (string, error) { | t, err := pam.StartFunc(serviceName, userName, func(s pam.Style, msg string) (string, error) { | ||||
| switch s { | switch s { | ||||
| case pam.PromptEchoOff: | case pam.PromptEchoOff: | ||||
| @@ -10,6 +10,7 @@ import ( | |||||
| "errors" | "errors" | ||||
| ) | ) | ||||
| func PAMAuth(serviceName, userName, passwd string) error { | |||||
| // Auth not supported lack of pam tag | |||||
| func Auth(serviceName, userName, passwd string) error { | |||||
| return errors.New("PAM not supported") | return errors.New("PAM not supported") | ||||
| } | } | ||||
| @@ -21,8 +21,9 @@ import ( | |||||
| // |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| | // |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| | ||||
| // \/ \/ \/ \/ \/ \/ \/ | // \/ \/ \/ \/ \/ \/ \/ | ||||
| // CreateRepoForm form for creating repository | |||||
| type CreateRepoForm struct { | type CreateRepoForm struct { | ||||
| Uid int64 `binding:"Required"` | |||||
| UID int64 `binding:"Required"` | |||||
| RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` | RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` | ||||
| Private bool | Private bool | ||||
| Description string `binding:"MaxSize(255)"` | Description string `binding:"MaxSize(255)"` | ||||
| @@ -32,21 +33,24 @@ type CreateRepoForm struct { | |||||
| Readme string | Readme string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *CreateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *CreateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // MigrateRepoForm form for migrating repository | |||||
| type MigrateRepoForm struct { | type MigrateRepoForm struct { | ||||
| CloneAddr string `json:"clone_addr" binding:"Required"` | CloneAddr string `json:"clone_addr" binding:"Required"` | ||||
| AuthUsername string `json:"auth_username"` | AuthUsername string `json:"auth_username"` | ||||
| AuthPassword string `json:"auth_password"` | AuthPassword string `json:"auth_password"` | ||||
| Uid int64 `json:"uid" binding:"Required"` | |||||
| UID int64 `json:"uid" binding:"Required"` | |||||
| RepoName string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"` | RepoName string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"` | ||||
| Mirror bool `json:"mirror"` | Mirror bool `json:"mirror"` | ||||
| Private bool `json:"private"` | Private bool `json:"private"` | ||||
| Description string `json:"description" binding:"MaxSize(255)"` | Description string `json:"description" binding:"MaxSize(255)"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *MigrateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *MigrateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -79,6 +83,7 @@ func (f MigrateRepoForm) ParseRemoteAddr(user *models.User) (string, error) { | |||||
| return remoteAddr, nil | return remoteAddr, nil | ||||
| } | } | ||||
| // RepoSettingForm form for changing repository settings | |||||
| type RepoSettingForm struct { | type RepoSettingForm struct { | ||||
| RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` | RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` | ||||
| Description string `binding:"MaxSize(255)"` | Description string `binding:"MaxSize(255)"` | ||||
| @@ -101,6 +106,7 @@ type RepoSettingForm struct { | |||||
| EnablePulls bool | EnablePulls bool | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *RepoSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *RepoSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -112,6 +118,7 @@ func (f *RepoSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) bi | |||||
| // \__/\ / \___ >___ /___| /___| /\____/|__|_ \ | // \__/\ / \___ >___ /___| /___| /\____/|__|_ \ | ||||
| // \/ \/ \/ \/ \/ \/ | // \/ \/ \/ \/ \/ \/ | ||||
| // WebhookForm form for changing web hook | |||||
| type WebhookForm struct { | type WebhookForm struct { | ||||
| Events string | Events string | ||||
| Create bool | Create bool | ||||
| @@ -120,18 +127,22 @@ type WebhookForm struct { | |||||
| Active bool | Active bool | ||||
| } | } | ||||
| // PushOnly if the hook will be triggered when push | |||||
| func (f WebhookForm) PushOnly() bool { | func (f WebhookForm) PushOnly() bool { | ||||
| return f.Events == "push_only" | return f.Events == "push_only" | ||||
| } | } | ||||
| // SendEverything if the hook will be triggered any event | |||||
| func (f WebhookForm) SendEverything() bool { | func (f WebhookForm) SendEverything() bool { | ||||
| return f.Events == "send_everything" | return f.Events == "send_everything" | ||||
| } | } | ||||
| // ChooseEvents if the hook will be triggered choose events | |||||
| func (f WebhookForm) ChooseEvents() bool { | func (f WebhookForm) ChooseEvents() bool { | ||||
| return f.Events == "choose_events" | return f.Events == "choose_events" | ||||
| } | } | ||||
| // NewWebhookForm form for creating web hook | |||||
| type NewWebhookForm struct { | type NewWebhookForm struct { | ||||
| PayloadURL string `binding:"Required;Url"` | PayloadURL string `binding:"Required;Url"` | ||||
| ContentType int `binding:"Required"` | ContentType int `binding:"Required"` | ||||
| @@ -139,10 +150,12 @@ type NewWebhookForm struct { | |||||
| WebhookForm | WebhookForm | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *NewWebhookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *NewWebhookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // NewSlackHookForm form for creating slack hook | |||||
| type NewSlackHookForm struct { | type NewSlackHookForm struct { | ||||
| PayloadURL string `binding:"Required;Url"` | PayloadURL string `binding:"Required;Url"` | ||||
| Channel string `binding:"Required"` | Channel string `binding:"Required"` | ||||
| @@ -152,6 +165,7 @@ type NewSlackHookForm struct { | |||||
| WebhookForm | WebhookForm | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *NewSlackHookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *NewSlackHookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -163,6 +177,7 @@ func (f *NewSlackHookForm) Validate(ctx *macaron.Context, errs binding.Errors) b | |||||
| // |___/____ >____ >____/ \___ > | // |___/____ >____ >____/ \___ > | ||||
| // \/ \/ \/ | // \/ \/ \/ | ||||
| // CreateIssueForm form for creating issue | |||||
| type CreateIssueForm struct { | type CreateIssueForm struct { | ||||
| Title string `binding:"Required;MaxSize(255)"` | Title string `binding:"Required;MaxSize(255)"` | ||||
| LabelIDs string `form:"label_ids"` | LabelIDs string `form:"label_ids"` | ||||
| @@ -172,16 +187,19 @@ type CreateIssueForm struct { | |||||
| Files []string | Files []string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *CreateIssueForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *CreateIssueForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // CreateCommentForm form for creating comment | |||||
| type CreateCommentForm struct { | type CreateCommentForm struct { | ||||
| Content string | Content string | ||||
| Status string `binding:"OmitEmpty;In(reopen,close)"` | Status string `binding:"OmitEmpty;In(reopen,close)"` | ||||
| Files []string | Files []string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *CreateCommentForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *CreateCommentForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -193,12 +211,14 @@ func (f *CreateCommentForm) Validate(ctx *macaron.Context, errs binding.Errors) | |||||
| // \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > | // \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > | ||||
| // \/ \/ \/ \/ \/ | // \/ \/ \/ \/ \/ | ||||
| // CreateMilestoneForm form for creating milestone | |||||
| type CreateMilestoneForm struct { | type CreateMilestoneForm struct { | ||||
| Title string `binding:"Required;MaxSize(50)"` | Title string `binding:"Required;MaxSize(50)"` | ||||
| Content string | Content string | ||||
| Deadline string | Deadline string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -210,20 +230,24 @@ func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs binding.Errors | |||||
| // |_______ (____ /___ /\___ >____/ | // |_______ (____ /___ /\___ >____/ | ||||
| // \/ \/ \/ \/ | // \/ \/ \/ \/ | ||||
| // CreateLabelForm form for creating label | |||||
| type CreateLabelForm struct { | type CreateLabelForm struct { | ||||
| ID int64 | ID int64 | ||||
| Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_name"` | Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_name"` | ||||
| Color string `binding:"Required;Size(7)" locale:"repo.issues.label_color"` | Color string `binding:"Required;Size(7)" locale:"repo.issues.label_color"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // InitializeLabelsForm form for initializing labels | |||||
| type InitializeLabelsForm struct { | type InitializeLabelsForm struct { | ||||
| TemplateName string `binding:"Required"` | TemplateName string `binding:"Required"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *InitializeLabelsForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *InitializeLabelsForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -235,6 +259,7 @@ func (f *InitializeLabelsForm) Validate(ctx *macaron.Context, errs binding.Error | |||||
| // |____|_ /\___ >____/\___ >____ /____ >\___ > | // |____|_ /\___ >____/\___ >____ /____ >\___ > | ||||
| // \/ \/ \/ \/ \/ \/ | // \/ \/ \/ \/ \/ \/ | ||||
| // NewReleaseForm form for creating release | |||||
| type NewReleaseForm struct { | type NewReleaseForm struct { | ||||
| TagName string `binding:"Required"` | TagName string `binding:"Required"` | ||||
| Target string `form:"tag_target" binding:"Required"` | Target string `form:"tag_target" binding:"Required"` | ||||
| @@ -244,10 +269,12 @@ type NewReleaseForm struct { | |||||
| Prerelease bool | Prerelease bool | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *NewReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *NewReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // EditReleaseForm form for changing release | |||||
| type EditReleaseForm struct { | type EditReleaseForm struct { | ||||
| Title string `form:"title" binding:"Required"` | Title string `form:"title" binding:"Required"` | ||||
| Content string `form:"content"` | Content string `form:"content"` | ||||
| @@ -255,6 +282,7 @@ type EditReleaseForm struct { | |||||
| Prerelease bool `form:"prerelease"` | Prerelease bool `form:"prerelease"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *EditReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *EditReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -266,6 +294,7 @@ func (f *EditReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) bi | |||||
| // \__/\ / |__|__|_ \__| | // \__/\ / |__|__|_ \__| | ||||
| // \/ \/ | // \/ \/ | ||||
| // NewWikiForm form for creating wiki | |||||
| type NewWikiForm struct { | type NewWikiForm struct { | ||||
| OldTitle string | OldTitle string | ||||
| Title string `binding:"Required"` | Title string `binding:"Required"` | ||||
| @@ -273,6 +302,7 @@ type NewWikiForm struct { | |||||
| Message string | Message string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| // FIXME: use code generation to generate this method. | // FIXME: use code generation to generate this method. | ||||
| func (f *NewWikiForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *NewWikiForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| @@ -285,6 +315,7 @@ func (f *NewWikiForm) Validate(ctx *macaron.Context, errs binding.Errors) bindin | |||||
| // /_______ /\____ | |__||__| | // /_______ /\____ | |__||__| | ||||
| // \/ \/ | // \/ \/ | ||||
| // EditRepoFileForm form for changing repository file | |||||
| type EditRepoFileForm struct { | type EditRepoFileForm struct { | ||||
| TreePath string `binding:"Required;MaxSize(500)"` | TreePath string `binding:"Required;MaxSize(500)"` | ||||
| Content string `binding:"Required"` | Content string `binding:"Required"` | ||||
| @@ -295,14 +326,17 @@ type EditRepoFileForm struct { | |||||
| LastCommit string | LastCommit string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *EditRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *EditRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // EditPreviewDiffForm form for changing preview diff | |||||
| type EditPreviewDiffForm struct { | type EditPreviewDiffForm struct { | ||||
| Content string | Content string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *EditPreviewDiffForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *EditPreviewDiffForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -315,6 +349,7 @@ func (f *EditPreviewDiffForm) Validate(ctx *macaron.Context, errs binding.Errors | |||||
| // |__| \/ \/ | // |__| \/ \/ | ||||
| // | // | ||||
| // UploadRepoFileForm form for uploading repository file | |||||
| type UploadRepoFileForm struct { | type UploadRepoFileForm struct { | ||||
| TreePath string `binding:"MaxSize(500)"` | TreePath string `binding:"MaxSize(500)"` | ||||
| CommitSummary string `binding:"MaxSize(100)"` | CommitSummary string `binding:"MaxSize(100)"` | ||||
| @@ -324,14 +359,17 @@ type UploadRepoFileForm struct { | |||||
| Files []string | Files []string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *UploadRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *UploadRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // RemoveUploadFileForm form for removing uploaded file | |||||
| type RemoveUploadFileForm struct { | type RemoveUploadFileForm struct { | ||||
| File string `binding:"Required;MaxSize(50)"` | File string `binding:"Required;MaxSize(50)"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *RemoveUploadFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *RemoveUploadFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -343,6 +381,7 @@ func (f *RemoveUploadFileForm) Validate(ctx *macaron.Context, errs binding.Error | |||||
| // /_______ /\___ >____/\___ >__| \___ > | // /_______ /\___ >____/\___ >__| \___ > | ||||
| // \/ \/ \/ \/ | // \/ \/ \/ \/ | ||||
| // DeleteRepoFileForm form for deleting repository file | |||||
| type DeleteRepoFileForm struct { | type DeleteRepoFileForm struct { | ||||
| CommitSummary string `binding:"MaxSize(100)"` | CommitSummary string `binding:"MaxSize(100)"` | ||||
| CommitMessage string | CommitMessage string | ||||
| @@ -350,6 +389,7 @@ type DeleteRepoFileForm struct { | |||||
| NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"` | NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *DeleteRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *DeleteRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -11,6 +11,7 @@ import ( | |||||
| "gopkg.in/macaron.v1" | "gopkg.in/macaron.v1" | ||||
| ) | ) | ||||
| // InstallForm form for installation page | |||||
| type InstallForm struct { | type InstallForm struct { | ||||
| DbType string `binding:"Required"` | DbType string `binding:"Required"` | ||||
| DbHost string | DbHost string | ||||
| @@ -26,7 +27,7 @@ type InstallForm struct { | |||||
| Domain string `binding:"Required"` | Domain string `binding:"Required"` | ||||
| SSHPort int | SSHPort int | ||||
| HTTPPort string `binding:"Required"` | HTTPPort string `binding:"Required"` | ||||
| AppUrl string `binding:"Required"` | |||||
| AppURL string `binding:"Required"` | |||||
| LogRootPath string `binding:"Required"` | LogRootPath string `binding:"Required"` | ||||
| SMTPHost string | SMTPHost string | ||||
| @@ -49,6 +50,7 @@ type InstallForm struct { | |||||
| AdminEmail string `binding:"OmitEmpty;MinSize(3);MaxSize(254);Include(@)" locale:"install.admin_email"` | AdminEmail string `binding:"OmitEmpty;MinSize(3);MaxSize(254);Include(@)" locale:"install.admin_email"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *InstallForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *InstallForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -60,6 +62,7 @@ func (f *InstallForm) Validate(ctx *macaron.Context, errs binding.Errors) bindin | |||||
| // \____|__ /______/ |____| \___|_ / | // \____|__ /______/ |____| \___|_ / | ||||
| // \/ \/ | // \/ \/ | ||||
| // RegisterForm form for registering | |||||
| type RegisterForm struct { | type RegisterForm struct { | ||||
| UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` | UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` | ||||
| Email string `binding:"Required;Email;MaxSize(254)"` | Email string `binding:"Required;Email;MaxSize(254)"` | ||||
| @@ -67,16 +70,19 @@ type RegisterForm struct { | |||||
| Retype string | Retype string | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *RegisterForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *RegisterForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // SignInForm form for signing in | |||||
| type SignInForm struct { | type SignInForm struct { | ||||
| UserName string `binding:"Required;MaxSize(254)"` | UserName string `binding:"Required;MaxSize(254)"` | ||||
| Password string `binding:"Required;MaxSize(255)"` | Password string `binding:"Required;MaxSize(255)"` | ||||
| Remember bool | Remember bool | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *SignInForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *SignInForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -88,6 +94,7 @@ func (f *SignInForm) Validate(ctx *macaron.Context, errs binding.Errors) binding | |||||
| // /_______ //_______ / |____| |____| |___\____|__ /\______ /_______ / | // /_______ //_______ / |____| |____| |___\____|__ /\______ /_______ / | ||||
| // \/ \/ \/ \/ \/ | // \/ \/ \/ \/ \/ | ||||
| // UpdateProfileForm form for updating profile | |||||
| type UpdateProfileForm struct { | type UpdateProfileForm struct { | ||||
| Name string `binding:"OmitEmpty;MaxSize(35)"` | Name string `binding:"OmitEmpty;MaxSize(35)"` | ||||
| FullName string `binding:"MaxSize(100)"` | FullName string `binding:"MaxSize(100)"` | ||||
| @@ -96,15 +103,18 @@ type UpdateProfileForm struct { | |||||
| Location string `binding:"MaxSize(50)"` | Location string `binding:"MaxSize(50)"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *UpdateProfileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *UpdateProfileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // Avatar types | |||||
| const ( | const ( | ||||
| AvatarLocal string = "local" | AvatarLocal string = "local" | ||||
| AvatarByMail string = "bymail" | AvatarByMail string = "bymail" | ||||
| ) | ) | ||||
| // AvatarForm form for changing avatar | |||||
| type AvatarForm struct { | type AvatarForm struct { | ||||
| Source string | Source string | ||||
| Avatar *multipart.FileHeader | Avatar *multipart.FileHeader | ||||
| @@ -112,41 +122,50 @@ type AvatarForm struct { | |||||
| Federavatar bool | Federavatar bool | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *AvatarForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *AvatarForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // AddEmailForm form for adding new email | |||||
| type AddEmailForm struct { | type AddEmailForm struct { | ||||
| Email string `binding:"Required;Email;MaxSize(254)"` | Email string `binding:"Required;Email;MaxSize(254)"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *AddEmailForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *AddEmailForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // ChangePasswordForm form for changing password | |||||
| type ChangePasswordForm struct { | type ChangePasswordForm struct { | ||||
| OldPassword string `form:"old_password" binding:"Required;MinSize(1);MaxSize(255)"` | OldPassword string `form:"old_password" binding:"Required;MinSize(1);MaxSize(255)"` | ||||
| Password string `form:"password" binding:"Required;MaxSize(255)"` | Password string `form:"password" binding:"Required;MaxSize(255)"` | ||||
| Retype string `form:"retype"` | Retype string `form:"retype"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *ChangePasswordForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *ChangePasswordForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // AddSSHKeyForm form for adding SSH key | |||||
| type AddSSHKeyForm struct { | type AddSSHKeyForm struct { | ||||
| Title string `binding:"Required;MaxSize(50)"` | Title string `binding:"Required;MaxSize(50)"` | ||||
| Content string `binding:"Required"` | Content string `binding:"Required"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *AddSSHKeyForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *AddSSHKeyForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| // NewAccessTokenForm form for creating access token | |||||
| type NewAccessTokenForm struct { | type NewAccessTokenForm struct { | ||||
| Name string `binding:"Required"` | Name string `binding:"Required"` | ||||
| } | } | ||||
| // Validate valideates the fields | |||||
| func (f *NewAccessTokenForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *NewAccessTokenForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| return validate(errs, ctx.Data, f, ctx.Locale) | return validate(errs, ctx.Data, f, ctx.Locale) | ||||
| } | } | ||||
| @@ -60,7 +60,7 @@ func NewUser(ctx *context.Context) { | |||||
| } | } | ||||
| // NewUserPost response for adding a new user | // NewUserPost response for adding a new user | ||||
| func NewUserPost(ctx *context.Context, form auth.AdminCrateUserForm) { | |||||
| func NewUserPost(ctx *context.Context, form auth.AdminCreateUserForm) { | |||||
| ctx.Data["Title"] = ctx.Tr("admin.users.new_account") | ctx.Data["Title"] = ctx.Tr("admin.users.new_account") | ||||
| ctx.Data["PageIsAdmin"] = true | ctx.Data["PageIsAdmin"] = true | ||||
| ctx.Data["PageIsAdminUsers"] = true | ctx.Data["PageIsAdminUsers"] = true | ||||
| @@ -177,8 +177,8 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) { | |||||
| ctxUser := ctx.User | ctxUser := ctx.User | ||||
| // Not equal means context user is an organization, | // Not equal means context user is an organization, | ||||
| // or is another user/organization if current user is admin. | // or is another user/organization if current user is admin. | ||||
| if form.Uid != ctxUser.ID { | |||||
| org, err := models.GetUserByID(form.Uid) | |||||
| if form.UID != ctxUser.ID { | |||||
| org, err := models.GetUserByID(form.UID) | |||||
| if err != nil { | if err != nil { | ||||
| if models.IsErrUserNotExist(err) { | if models.IsErrUserNotExist(err) { | ||||
| ctx.Error(422, "", err) | ctx.Error(422, "", err) | ||||
| @@ -89,7 +89,7 @@ func Install(ctx *context.Context) { | |||||
| form.Domain = setting.Domain | form.Domain = setting.Domain | ||||
| form.SSHPort = setting.SSH.Port | form.SSHPort = setting.SSH.Port | ||||
| form.HTTPPort = setting.HTTPPort | form.HTTPPort = setting.HTTPPort | ||||
| form.AppUrl = setting.AppUrl | |||||
| form.AppURL = setting.AppUrl | |||||
| form.LogRootPath = setting.LogRootPath | form.LogRootPath = setting.LogRootPath | ||||
| // E-mail service settings | // E-mail service settings | ||||
| @@ -217,8 +217,8 @@ func InstallPost(ctx *context.Context, form auth.InstallForm) { | |||||
| return | return | ||||
| } | } | ||||
| if form.AppUrl[len(form.AppUrl)-1] != '/' { | |||||
| form.AppUrl += "/" | |||||
| if form.AppURL[len(form.AppURL)-1] != '/' { | |||||
| form.AppURL += "/" | |||||
| } | } | ||||
| // Save settings. | // Save settings. | ||||
| @@ -242,7 +242,7 @@ func InstallPost(ctx *context.Context, form auth.InstallForm) { | |||||
| cfg.Section("").Key("RUN_USER").SetValue(form.RunUser) | cfg.Section("").Key("RUN_USER").SetValue(form.RunUser) | ||||
| cfg.Section("server").Key("DOMAIN").SetValue(form.Domain) | cfg.Section("server").Key("DOMAIN").SetValue(form.Domain) | ||||
| cfg.Section("server").Key("HTTP_PORT").SetValue(form.HTTPPort) | cfg.Section("server").Key("HTTP_PORT").SetValue(form.HTTPPort) | ||||
| cfg.Section("server").Key("ROOT_URL").SetValue(form.AppUrl) | |||||
| cfg.Section("server").Key("ROOT_URL").SetValue(form.AppURL) | |||||
| if form.SSHPort == 0 { | if form.SSHPort == 0 { | ||||
| cfg.Section("server").Key("DISABLE_SSH").SetValue("true") | cfg.Section("server").Key("DISABLE_SSH").SetValue("true") | ||||
| @@ -328,5 +328,5 @@ func InstallPost(ctx *context.Context, form auth.InstallForm) { | |||||
| log.Info("First-time run install finished!") | log.Info("First-time run install finished!") | ||||
| ctx.Flash.Success(ctx.Tr("install.install_success")) | ctx.Flash.Success(ctx.Tr("install.install_success")) | ||||
| ctx.Redirect(form.AppUrl + "user/login") | |||||
| ctx.Redirect(form.AppURL + "user/login") | |||||
| } | } | ||||
| @@ -94,7 +94,7 @@ func ForkPost(ctx *context.Context, form auth.CreateRepoForm) { | |||||
| return | return | ||||
| } | } | ||||
| ctxUser := checkContextUser(ctx, form.Uid) | |||||
| ctxUser := checkContextUser(ctx, form.UID) | |||||
| if ctx.Written() { | if ctx.Written() { | ||||
| return | return | ||||
| } | } | ||||
| @@ -112,7 +112,7 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { | |||||
| ctx.Data["Licenses"] = models.Licenses | ctx.Data["Licenses"] = models.Licenses | ||||
| ctx.Data["Readmes"] = models.Readmes | ctx.Data["Readmes"] = models.Readmes | ||||
| ctxUser := checkContextUser(ctx, form.Uid) | |||||
| ctxUser := checkContextUser(ctx, form.UID) | |||||
| if ctx.Written() { | if ctx.Written() { | ||||
| return | return | ||||
| } | } | ||||
| @@ -167,7 +167,7 @@ func Migrate(ctx *context.Context) { | |||||
| func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | ||||
| ctx.Data["Title"] = ctx.Tr("new_migrate") | ctx.Data["Title"] = ctx.Tr("new_migrate") | ||||
| ctxUser := checkContextUser(ctx, form.Uid) | |||||
| ctxUser := checkContextUser(ctx, form.UID) | |||||
| if ctx.Written() { | if ctx.Written() { | ||||
| return | return | ||||
| } | } | ||||