diff options
author | zeripath <art27@cantab.net> | 2021-04-06 20:44:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-06 20:44:05 +0100 |
commit | fa3895ce81ba64689fbf76b91d96963541547881 (patch) | |
tree | d7fe6c24429ccbb1d55b53441cefb34799dee993 /modules | |
parent | 8be2cc4fc72e7985640dabdddb06cf78169c1882 (diff) | |
download | gitea-fa3895ce81ba64689fbf76b91d96963541547881.tar.gz gitea-fa3895ce81ba64689fbf76b91d96963541547881.zip |
Move modules/forms to services/forms (#15305)
Forms are dependent on models and therefore should be in services.
This PR also removes the old auth. aliasing
Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/forms/admin.go | 70 | ||||
-rw-r--r-- | modules/forms/auth_form.go | 75 | ||||
-rw-r--r-- | modules/forms/org.go | 78 | ||||
-rw-r--r-- | modules/forms/repo_branch_form.go | 26 | ||||
-rw-r--r-- | modules/forms/repo_form.go | 807 | ||||
-rw-r--r-- | modules/forms/repo_form_test.go | 67 | ||||
-rw-r--r-- | modules/forms/user_form.go | 401 | ||||
-rw-r--r-- | modules/forms/user_form_auth_openid.go | 51 | ||||
-rw-r--r-- | modules/forms/user_form_test.go | 86 |
9 files changed, 0 insertions, 1661 deletions
diff --git a/modules/forms/admin.go b/modules/forms/admin.go deleted file mode 100644 index 2e6bbaf172..0000000000 --- a/modules/forms/admin.go +++ /dev/null @@ -1,70 +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 forms - -import ( - "net/http" - - "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/web/middleware" - - "gitea.com/go-chi/binding" -) - -// AdminCreateUserForm form for admin to create user -type AdminCreateUserForm struct { - LoginType string `binding:"Required"` - LoginName string - UserName string `binding:"Required;AlphaDashDot;MaxSize(40)"` - Email string `binding:"Required;Email;MaxSize(254)"` - Password string `binding:"MaxSize(255)"` - SendNotify bool - MustChangePassword bool -} - -// Validate validates form fields -func (f *AdminCreateUserForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// AdminEditUserForm form for admin to create user -type AdminEditUserForm struct { - LoginType string `binding:"Required"` - UserName string `binding:"AlphaDashDot;MaxSize(40)"` - LoginName string - FullName string `binding:"MaxSize(100)"` - Email string `binding:"Required;Email;MaxSize(254)"` - Password string `binding:"MaxSize(255)"` - Website string `binding:"ValidUrl;MaxSize(255)"` - Location string `binding:"MaxSize(50)"` - MaxRepoCreation int - Active bool - Admin bool - Restricted bool - AllowGitHook bool - AllowImportLocal bool - AllowCreateOrganization bool - ProhibitLogin bool - Reset2FA bool `form:"reset_2fa"` -} - -// Validate validates form fields -func (f *AdminEditUserForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// AdminDashboardForm form for admin dashboard operations -type AdminDashboardForm struct { - Op string `binding:"required"` - From string -} - -// Validate validates form fields -func (f *AdminDashboardForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/forms/auth_form.go b/modules/forms/auth_form.go deleted file mode 100644 index 7cf6b9fcd5..0000000000 --- a/modules/forms/auth_form.go +++ /dev/null @@ -1,75 +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 forms - -import ( - "net/http" - - "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/web/middleware" - - "gitea.com/go-chi/binding" -) - -// AuthenticationForm form for authentication -type AuthenticationForm struct { - ID int64 - Type int `binding:"Range(2,7)"` - 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 - AttributeSSHPublicKey string - AttributesInBind bool - UsePagedSearch bool - SearchPageSize int - Filter string - AdminFilter string - GroupsEnabled bool - GroupDN string - GroupFilter string - GroupMemberUID string - UserUID string - RestrictedFilter string - AllowDeactivateAll bool - IsActive bool - IsSyncEnabled bool - SMTPAuth string - SMTPHost string - SMTPPort int - AllowedDomains string - SecurityProtocol int `binding:"Range(0,2)"` - TLS bool - SkipVerify bool - PAMServiceName string - Oauth2Provider string - Oauth2Key string - Oauth2Secret string - OpenIDConnectAutoDiscoveryURL string - Oauth2UseCustomURL bool - Oauth2TokenURL string - Oauth2AuthURL string - Oauth2ProfileURL string - Oauth2EmailURL string - Oauth2IconURL string - SSPIAutoCreateUsers bool - SSPIAutoActivateUsers bool - SSPIStripDomainNames bool - SSPISeparatorReplacement string `binding:"AlphaDashDot;MaxSize(5)"` - SSPIDefaultLanguage string -} - -// Validate validates fields -func (f *AuthenticationForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/forms/org.go b/modules/forms/org.go deleted file mode 100644 index 3b994770fd..0000000000 --- a/modules/forms/org.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Copyright 2019 The Gitea 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 forms - -import ( - "net/http" - - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/structs" - "code.gitea.io/gitea/modules/web/middleware" - - "gitea.com/go-chi/binding" -) - -// ________ .__ __ .__ -// \_____ \_______ _________ ____ |__|____________ _/ |_|__| ____ ____ -// / | \_ __ \/ ___\__ \ / \| \___ /\__ \\ __\ |/ _ \ / \ -// / | \ | \/ /_/ > __ \| | \ |/ / / __ \| | | ( <_> ) | \ -// \_______ /__| \___ (____ /___| /__/_____ \(____ /__| |__|\____/|___| / -// \/ /_____/ \/ \/ \/ \/ \/ - -// CreateOrgForm form for creating organization -type CreateOrgForm struct { - OrgName string `binding:"Required;AlphaDashDot;MaxSize(40)" locale:"org.org_name_holder"` - Visibility structs.VisibleType - RepoAdminChangeTeamAccess bool -} - -// Validate validates the fields -func (f *CreateOrgForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// UpdateOrgSettingForm form for updating organization settings -type UpdateOrgSettingForm struct { - Name string `binding:"Required;AlphaDashDot;MaxSize(40)" locale:"org.org_name_holder"` - FullName string `binding:"MaxSize(100)"` - Description string `binding:"MaxSize(255)"` - Website string `binding:"ValidUrl;MaxSize(255)"` - Location string `binding:"MaxSize(50)"` - Visibility structs.VisibleType - MaxRepoCreation int - RepoAdminChangeTeamAccess bool -} - -// Validate validates the fields -func (f *UpdateOrgSettingForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ___________ -// \__ ___/___ _____ _____ -// | |_/ __ \\__ \ / \ -// | |\ ___/ / __ \| Y Y \ -// |____| \___ >____ /__|_| / -// \/ \/ \/ - -// CreateTeamForm form for creating team -type CreateTeamForm struct { - TeamName string `binding:"Required;AlphaDashDot;MaxSize(30)"` - Description string `binding:"MaxSize(255)"` - Permission string - Units []models.UnitType - RepoAccess string - CanCreateOrgRepo bool -} - -// Validate validates the fields -func (f *CreateTeamForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/forms/repo_branch_form.go b/modules/forms/repo_branch_form.go deleted file mode 100644 index 88a069b831..0000000000 --- a/modules/forms/repo_branch_form.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2017 The Gitea 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 forms - -import ( - "net/http" - - "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/web/middleware" - - "gitea.com/go-chi/binding" -) - -// NewBranchForm form for creating a new branch -type NewBranchForm struct { - NewBranchName string `binding:"Required;MaxSize(100);GitRefName"` - CreateTag bool -} - -// Validate validates the fields -func (f *NewBranchForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/forms/repo_form.go b/modules/forms/repo_form.go deleted file mode 100644 index d9eb06d194..0000000000 --- a/modules/forms/repo_form.go +++ /dev/null @@ -1,807 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Copyright 2017 The Gitea 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 forms - -import ( - "net/http" - "net/url" - "strings" - - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/modules/structs" - "code.gitea.io/gitea/modules/web/middleware" - "code.gitea.io/gitea/routers/utils" - - "gitea.com/go-chi/binding" -) - -// _______________________________________ _________.______________________ _______________.___. -// \______ \_ _____/\______ \_____ \ / _____/| \__ ___/\_____ \\______ \__ | | -// | _/| __)_ | ___// | \ \_____ \ | | | | / | \| _// | | -// | | \| \ | | / | \/ \| | | | / | \ | \\____ | -// |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| -// \/ \/ \/ \/ \/ \/ \/ - -// CreateRepoForm form for creating repository -type CreateRepoForm struct { - UID int64 `binding:"Required"` - RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` - Private bool - Description string `binding:"MaxSize(255)"` - DefaultBranch string `binding:"GitRefName;MaxSize(100)"` - AutoInit bool - Gitignores string - IssueLabels string - License string - Readme string - Template bool - - RepoTemplate int64 - GitContent bool - Topics bool - GitHooks bool - Webhooks bool - Avatar bool - Labels bool - TrustModel string -} - -// Validate validates the fields -func (f *CreateRepoForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// MigrateRepoForm form for migrating repository -// this is used to interact with web ui -type MigrateRepoForm struct { - // required: true - CloneAddr string `json:"clone_addr" binding:"Required"` - Service structs.GitServiceType `json:"service"` - AuthUsername string `json:"auth_username"` - AuthPassword string `json:"auth_password"` - AuthToken string `json:"auth_token"` - // required: true - UID int64 `json:"uid" binding:"Required"` - // required: true - 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)"` - Wiki bool `json:"wiki"` - Milestones bool `json:"milestones"` - Labels bool `json:"labels"` - Issues bool `json:"issues"` - PullRequests bool `json:"pull_requests"` - Releases bool `json:"releases"` - MirrorInterval string `json:"mirror_interval"` -} - -// Validate validates the fields -func (f *MigrateRepoForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ParseRemoteAddr checks if given remote address is valid, -// and returns composed URL with needed username and password. -func ParseRemoteAddr(remoteAddr, authUsername, authPassword string) (string, error) { - remoteAddr = strings.TrimSpace(remoteAddr) - // 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(authUsername)+len(authPassword) > 0 { - u.User = url.UserPassword(authUsername, authPassword) - } - remoteAddr = u.String() - } - - return remoteAddr, nil -} - -// RepoSettingForm form for changing repository settings -type RepoSettingForm struct { - RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` - Description string `binding:"MaxSize(255)"` - Website string `binding:"ValidUrl;MaxSize(255)"` - Interval string - MirrorAddress string - MirrorUsername string - MirrorPassword string - Private bool - Template bool - EnablePrune bool - - // Advanced settings - EnableWiki bool - EnableExternalWiki bool - ExternalWikiURL string - EnableIssues bool - EnableExternalTracker bool - ExternalTrackerURL string - TrackerURLFormat string - TrackerIssueStyle string - EnableCloseIssuesViaCommitInAnyBranch bool - EnableProjects bool - EnablePulls bool - PullsIgnoreWhitespace bool - PullsAllowMerge bool - PullsAllowRebase bool - PullsAllowRebaseMerge bool - PullsAllowSquash bool - PullsAllowManualMerge bool - PullsDefaultMergeStyle string - EnableAutodetectManualMerge bool - EnableTimetracker bool - AllowOnlyContributorsToTrackTime bool - EnableIssueDependencies bool - IsArchived bool - - // Signing Settings - TrustModel string - - // Admin settings - EnableHealthCheck bool -} - -// Validate validates the fields -func (f *RepoSettingForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// __________ .__ -// \______ \____________ ____ ____ | |__ -// | | _/\_ __ \__ \ / \_/ ___\| | \ -// | | \ | | \// __ \| | \ \___| Y \ -// |______ / |__| (____ /___| /\___ >___| / -// \/ \/ \/ \/ \/ - -// ProtectBranchForm form for changing protected branch settings -type ProtectBranchForm struct { - Protected bool - EnablePush string - WhitelistUsers string - WhitelistTeams string - WhitelistDeployKeys bool - EnableMergeWhitelist bool - MergeWhitelistUsers string - MergeWhitelistTeams string - EnableStatusCheck bool - StatusCheckContexts []string - RequiredApprovals int64 - EnableApprovalsWhitelist bool - ApprovalsWhitelistUsers string - ApprovalsWhitelistTeams string - BlockOnRejectedReviews bool - BlockOnOfficialReviewRequests bool - BlockOnOutdatedBranch bool - DismissStaleApprovals bool - RequireSignedCommits bool - ProtectedFilePatterns string -} - -// Validate validates the fields -func (f *ProtectBranchForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// __ __ ___. .__ .__ __ -// / \ / \ ____\_ |__ | |__ | |__ ____ | | __ -// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ / -// \ /\ ___/| \_\ \ Y \ Y ( <_> ) < -// \__/\ / \___ >___ /___| /___| /\____/|__|_ \ -// \/ \/ \/ \/ \/ \/ - -// WebhookForm form for changing web hook -type WebhookForm struct { - Events string - Create bool - Delete bool - Fork bool - Issues bool - IssueAssign bool - IssueLabel bool - IssueMilestone bool - IssueComment bool - Release bool - Push bool - PullRequest bool - PullRequestAssign bool - PullRequestLabel bool - PullRequestMilestone bool - PullRequestComment bool - PullRequestReview bool - PullRequestSync bool - Repository bool - Active bool - BranchFilter string `binding:"GlobPattern"` -} - -// PushOnly if the hook will be triggered when push -func (f WebhookForm) PushOnly() bool { - return f.Events == "push_only" -} - -// SendEverything if the hook will be triggered any event -func (f WebhookForm) SendEverything() bool { - return f.Events == "send_everything" -} - -// ChooseEvents if the hook will be triggered choose events -func (f WebhookForm) ChooseEvents() bool { - return f.Events == "choose_events" -} - -// NewWebhookForm form for creating web hook -type NewWebhookForm struct { - PayloadURL string `binding:"Required;ValidUrl"` - HTTPMethod string `binding:"Required;In(POST,GET)"` - ContentType int `binding:"Required"` - Secret string - WebhookForm -} - -// Validate validates the fields -func (f *NewWebhookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// NewGogshookForm form for creating gogs hook -type NewGogshookForm struct { - PayloadURL string `binding:"Required;ValidUrl"` - ContentType int `binding:"Required"` - Secret string - WebhookForm -} - -// Validate validates the fields -func (f *NewGogshookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// NewSlackHookForm form for creating slack hook -type NewSlackHookForm struct { - PayloadURL string `binding:"Required;ValidUrl"` - Channel string `binding:"Required"` - Username string - IconURL string - Color string - WebhookForm -} - -// Validate validates the fields -func (f *NewSlackHookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// HasInvalidChannel validates the channel name is in the right format -func (f NewSlackHookForm) HasInvalidChannel() bool { - return !utils.IsValidSlackChannel(f.Channel) -} - -// NewDiscordHookForm form for creating discord hook -type NewDiscordHookForm struct { - PayloadURL string `binding:"Required;ValidUrl"` - Username string - IconURL string - WebhookForm -} - -// Validate validates the fields -func (f *NewDiscordHookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// NewDingtalkHookForm form for creating dingtalk hook -type NewDingtalkHookForm struct { - PayloadURL string `binding:"Required;ValidUrl"` - WebhookForm -} - -// Validate validates the fields -func (f *NewDingtalkHookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// NewTelegramHookForm form for creating telegram hook -type NewTelegramHookForm struct { - BotToken string `binding:"Required"` - ChatID string `binding:"Required"` - WebhookForm -} - -// Validate validates the fields -func (f *NewTelegramHookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// NewMatrixHookForm form for creating Matrix hook -type NewMatrixHookForm struct { - HomeserverURL string `binding:"Required;ValidUrl"` - RoomID string `binding:"Required"` - AccessToken string `binding:"Required"` - MessageType int - WebhookForm -} - -// Validate validates the fields -func (f *NewMatrixHookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// NewMSTeamsHookForm form for creating MS Teams hook -type NewMSTeamsHookForm struct { - PayloadURL string `binding:"Required;ValidUrl"` - WebhookForm -} - -// Validate validates the fields -func (f *NewMSTeamsHookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// NewFeishuHookForm form for creating feishu hook -type NewFeishuHookForm struct { - PayloadURL string `binding:"Required;ValidUrl"` - WebhookForm -} - -// Validate validates the fields -func (f *NewFeishuHookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// .___ -// | | ______ ________ __ ____ -// | |/ ___// ___/ | \_/ __ \ -// | |\___ \ \___ \| | /\ ___/ -// |___/____ >____ >____/ \___ > -// \/ \/ \/ - -// CreateIssueForm form for creating issue -type CreateIssueForm struct { - Title string `binding:"Required;MaxSize(255)"` - LabelIDs string `form:"label_ids"` - AssigneeIDs string `form:"assignee_ids"` - Ref string `form:"ref"` - MilestoneID int64 - ProjectID int64 - AssigneeID int64 - Content string - Files []string -} - -// Validate validates the fields -func (f *CreateIssueForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// CreateCommentForm form for creating comment -type CreateCommentForm struct { - Content string - Status string `binding:"OmitEmpty;In(reopen,close)"` - Files []string -} - -// Validate validates the fields -func (f *CreateCommentForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ReactionForm form for adding and removing reaction -type ReactionForm struct { - Content string `binding:"Required"` -} - -// Validate validates the fields -func (f *ReactionForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// IssueLockForm form for locking an issue -type IssueLockForm struct { - Reason string `binding:"Required"` -} - -// Validate validates the fields -func (i *IssueLockForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, i, ctx.Locale) -} - -// HasValidReason checks to make sure that the reason submitted in -// the form matches any of the values in the config -func (i IssueLockForm) HasValidReason() bool { - if strings.TrimSpace(i.Reason) == "" { - return true - } - - for _, v := range setting.Repository.Issue.LockReasons { - if v == i.Reason { - return true - } - } - - return false -} - -// __________ __ __ -// \______ \_______ ____ |__| ____ _____/ |_ ______ -// | ___/\_ __ \/ _ \ | |/ __ \_/ ___\ __\/ ___/ -// | | | | \( <_> ) | \ ___/\ \___| | \___ \ -// |____| |__| \____/\__| |\___ >\___ >__| /____ > -// \______| \/ \/ \/ - -// CreateProjectForm form for creating a project -type CreateProjectForm struct { - Title string `binding:"Required;MaxSize(100)"` - Content string - BoardType models.ProjectBoardType -} - -// UserCreateProjectForm is a from for creating an individual or organization -// form. -type UserCreateProjectForm struct { - Title string `binding:"Required;MaxSize(100)"` - Content string - BoardType models.ProjectBoardType - UID int64 `binding:"Required"` -} - -// EditProjectBoardForm is a form for editing a project board -type EditProjectBoardForm struct { - Title string `binding:"Required;MaxSize(100)"` - Sorting int8 -} - -// _____ .__.__ __ -// / \ |__| | ____ _______/ |_ ____ ____ ____ -// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \ -// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/ -// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > -// \/ \/ \/ \/ \/ - -// CreateMilestoneForm form for creating milestone -type CreateMilestoneForm struct { - Title string `binding:"Required;MaxSize(50)"` - Content string - Deadline string -} - -// Validate validates the fields -func (f *CreateMilestoneForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// .____ ___. .__ -// | | _____ \_ |__ ____ | | -// | | \__ \ | __ \_/ __ \| | -// | |___ / __ \| \_\ \ ___/| |__ -// |_______ (____ /___ /\___ >____/ -// \/ \/ \/ \/ - -// CreateLabelForm form for creating label -type CreateLabelForm struct { - ID int64 - Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_title"` - Description string `binding:"MaxSize(200)" locale:"repo.issues.label_description"` - Color string `binding:"Required;Size(7)" locale:"repo.issues.label_color"` -} - -// Validate validates the fields -func (f *CreateLabelForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// InitializeLabelsForm form for initializing labels -type InitializeLabelsForm struct { - TemplateName string `binding:"Required"` -} - -// Validate validates the fields -func (f *InitializeLabelsForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// __________ .__ .__ __________ __ -// \______ \__ __| | | | \______ \ ____ ________ __ ____ _______/ |_ -// | ___/ | \ | | | | _// __ \/ ____/ | \_/ __ \ / ___/\ __\ -// | | | | / |_| |__ | | \ ___< <_| | | /\ ___/ \___ \ | | -// |____| |____/|____/____/ |____|_ /\___ >__ |____/ \___ >____ > |__| -// \/ \/ |__| \/ \/ - -// MergePullRequestForm form for merging Pull Request -// swagger:model MergePullRequestOption -type MergePullRequestForm struct { - // required: true - // enum: merge,rebase,rebase-merge,squash,manually-merged - Do string `binding:"Required;In(merge,rebase,rebase-merge,squash,manually-merged)"` - MergeTitleField string - MergeMessageField string - MergeCommitID string // only used for manually-merged - ForceMerge *bool `json:"force_merge,omitempty"` -} - -// Validate validates the fields -func (f *MergePullRequestForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// CodeCommentForm form for adding code comments for PRs -type CodeCommentForm struct { - Origin string `binding:"Required;In(timeline,diff)"` - Content string `binding:"Required"` - Side string `binding:"Required;In(previous,proposed)"` - Line int64 - TreePath string `form:"path" binding:"Required"` - IsReview bool `form:"is_review"` - Reply int64 `form:"reply"` - LatestCommitID string -} - -// Validate validates the fields -func (f *CodeCommentForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// SubmitReviewForm for submitting a finished code review -type SubmitReviewForm struct { - Content string - Type string `binding:"Required;In(approve,comment,reject)"` - CommitID string -} - -// Validate validates the fields -func (f *SubmitReviewForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ReviewType will return the corresponding reviewtype for type -func (f SubmitReviewForm) ReviewType() models.ReviewType { - switch f.Type { - case "approve": - return models.ReviewTypeApprove - case "comment": - return models.ReviewTypeComment - case "reject": - return models.ReviewTypeReject - default: - return models.ReviewTypeUnknown - } -} - -// HasEmptyContent checks if the content of the review form is empty. -func (f SubmitReviewForm) HasEmptyContent() bool { - reviewType := f.ReviewType() - - return (reviewType == models.ReviewTypeComment || reviewType == models.ReviewTypeReject) && - len(strings.TrimSpace(f.Content)) == 0 -} - -// DismissReviewForm for dismissing stale review by repo admin -type DismissReviewForm struct { - ReviewID int64 `binding:"Required"` - Message string -} - -// __________ .__ -// \______ \ ____ | | ____ _____ ______ ____ -// | _// __ \| | _/ __ \\__ \ / ___// __ \ -// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/ -// |____|_ /\___ >____/\___ >____ /____ >\___ > -// \/ \/ \/ \/ \/ \/ - -// NewReleaseForm form for creating release -type NewReleaseForm struct { - TagName string `binding:"Required;GitRefName;MaxSize(255)"` - Target string `form:"tag_target" binding:"Required;MaxSize(255)"` - Title string `binding:"Required;MaxSize(255)"` - Content string - Draft string - TagOnly string - Prerelease bool - AddTagMsg bool - Files []string -} - -// Validate validates the fields -func (f *NewReleaseForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// EditReleaseForm form for changing release -type EditReleaseForm struct { - Title string `form:"title" binding:"Required;MaxSize(255)"` - Content string `form:"content"` - Draft string `form:"draft"` - Prerelease bool `form:"prerelease"` - Files []string -} - -// Validate validates the fields -func (f *EditReleaseForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// __ __.__ __ .__ -// / \ / \__| | _|__| -// \ \/\/ / | |/ / | -// \ /| | <| | -// \__/\ / |__|__|_ \__| -// \/ \/ - -// NewWikiForm form for creating wiki -type NewWikiForm struct { - Title string `binding:"Required"` - Content string `binding:"Required"` - Message string -} - -// Validate validates the fields -// FIXME: use code generation to generate this method. -func (f *NewWikiForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ___________ .___.__ __ -// \_ _____/ __| _/|__|/ |_ -// | __)_ / __ | | \ __\ -// | \/ /_/ | | || | -// /_______ /\____ | |__||__| -// \/ \/ - -// EditRepoFileForm form for changing repository file -type EditRepoFileForm struct { - TreePath string `binding:"Required;MaxSize(500)"` - Content string - CommitSummary string `binding:"MaxSize(100)"` - CommitMessage string - CommitChoice string `binding:"Required;MaxSize(50)"` - NewBranchName string `binding:"GitRefName;MaxSize(100)"` - LastCommit string - Signoff bool -} - -// Validate validates the fields -func (f *EditRepoFileForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// EditPreviewDiffForm form for changing preview diff -type EditPreviewDiffForm struct { - Content string -} - -// Validate validates the fields -func (f *EditPreviewDiffForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ____ ___ .__ .___ -// | | \______ | | _________ __| _/ -// | | /\____ \| | / _ \__ \ / __ | -// | | / | |_> > |_( <_> ) __ \_/ /_/ | -// |______/ | __/|____/\____(____ /\____ | -// |__| \/ \/ -// - -// UploadRepoFileForm form for uploading repository file -type UploadRepoFileForm struct { - TreePath string `binding:"MaxSize(500)"` - CommitSummary string `binding:"MaxSize(100)"` - CommitMessage string - CommitChoice string `binding:"Required;MaxSize(50)"` - NewBranchName string `binding:"GitRefName;MaxSize(100)"` - Files []string - Signoff bool -} - -// Validate validates the fields -func (f *UploadRepoFileForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// RemoveUploadFileForm form for removing uploaded file -type RemoveUploadFileForm struct { - File string `binding:"Required;MaxSize(50)"` -} - -// Validate validates the fields -func (f *RemoveUploadFileForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ________ .__ __ -// \______ \ ____ | | _____/ |_ ____ -// | | \_/ __ \| | _/ __ \ __\/ __ \ -// | ` \ ___/| |_\ ___/| | \ ___/ -// /_______ /\___ >____/\___ >__| \___ > -// \/ \/ \/ \/ - -// DeleteRepoFileForm form for deleting repository file -type DeleteRepoFileForm struct { - CommitSummary string `binding:"MaxSize(100)"` - CommitMessage string - CommitChoice string `binding:"Required;MaxSize(50)"` - NewBranchName string `binding:"GitRefName;MaxSize(100)"` - LastCommit string - Signoff bool -} - -// Validate validates the fields -func (f *DeleteRepoFileForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ___________.__ ___________ __ -// \__ ___/|__| _____ ____ \__ ___/___________ ____ | | __ ___________ -// | | | |/ \_/ __ \ | | \_ __ \__ \ _/ ___\| |/ // __ \_ __ \ -// | | | | Y Y \ ___/ | | | | \// __ \\ \___| <\ ___/| | \/ -// |____| |__|__|_| /\___ > |____| |__| (____ /\___ >__|_ \\___ >__| -// \/ \/ \/ \/ \/ \/ - -// AddTimeManuallyForm form that adds spent time manually. -type AddTimeManuallyForm struct { - Hours int `binding:"Range(0,1000)"` - Minutes int `binding:"Range(0,1000)"` -} - -// Validate validates the fields -func (f *AddTimeManuallyForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// SaveTopicForm form for save topics for repository -type SaveTopicForm struct { - Topics []string `binding:"topics;Required;"` -} - -// DeadlineForm hold the validation rules for deadlines -type DeadlineForm struct { - DateString string `form:"date" binding:"Required;Size(10)"` -} - -// Validate validates the fields -func (f *DeadlineForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/forms/repo_form_test.go b/modules/forms/repo_form_test.go deleted file mode 100644 index 4f65d59ca6..0000000000 --- a/modules/forms/repo_form_test.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2018 The Gitea 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 forms - -import ( - "testing" - - "code.gitea.io/gitea/modules/setting" - - "github.com/stretchr/testify/assert" -) - -func TestSubmitReviewForm_IsEmpty(t *testing.T) { - - cases := []struct { - form SubmitReviewForm - expected bool - }{ - // Approved PR with a comment shouldn't count as empty - {SubmitReviewForm{Type: "approve", Content: "Awesome"}, false}, - - // Approved PR without a comment shouldn't count as empty - {SubmitReviewForm{Type: "approve", Content: ""}, false}, - - // Rejected PR without a comment should count as empty - {SubmitReviewForm{Type: "reject", Content: ""}, true}, - - // Rejected PR with a comment shouldn't count as empty - {SubmitReviewForm{Type: "reject", Content: "Awesome"}, false}, - - // Comment review on a PR with a comment shouldn't count as empty - {SubmitReviewForm{Type: "comment", Content: "Awesome"}, false}, - - // Comment review on a PR without a comment should count as empty - {SubmitReviewForm{Type: "comment", Content: ""}, true}, - } - - for _, v := range cases { - assert.Equal(t, v.expected, v.form.HasEmptyContent()) - } -} - -func TestIssueLock_HasValidReason(t *testing.T) { - - // Init settings - _ = setting.Repository - - cases := []struct { - form IssueLockForm - expected bool - }{ - {IssueLockForm{""}, true}, // an empty reason is accepted - {IssueLockForm{"Off-topic"}, true}, - {IssueLockForm{"Too heated"}, true}, - {IssueLockForm{"Spam"}, true}, - {IssueLockForm{"Resolved"}, true}, - - {IssueLockForm{"ZZZZ"}, false}, - {IssueLockForm{"I want to lock this issue"}, false}, - } - - for _, v := range cases { - assert.Equal(t, v.expected, v.form.HasValidReason()) - } -} diff --git a/modules/forms/user_form.go b/modules/forms/user_form.go deleted file mode 100644 index 2c065dc511..0000000000 --- a/modules/forms/user_form.go +++ /dev/null @@ -1,401 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Copyright 2018 The Gitea 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 forms - -import ( - "mime/multipart" - "net/http" - "strings" - - "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/modules/web/middleware" - - "gitea.com/go-chi/binding" -) - -// InstallForm form for installation page -type InstallForm struct { - DbType string `binding:"Required"` - DbHost string - DbUser string - DbPasswd string - DbName string - SSLMode string - Charset string `binding:"Required;In(utf8,utf8mb4)"` - DbPath string - DbSchema string - - AppName string `binding:"Required" locale:"install.app_name"` - RepoRootPath string `binding:"Required"` - LFSRootPath string - RunUser string `binding:"Required"` - Domain string `binding:"Required"` - SSHPort int - 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 - EnableOpenIDSignIn bool - EnableOpenIDSignUp bool - DisableRegistration bool - AllowOnlyExternalRegistration bool - EnableCaptcha bool - RequireSignInView bool - DefaultKeepEmailPrivate bool - DefaultAllowCreateOrganization bool - DefaultEnableTimetracking bool - NoReplyAddress string - - PasswordAlgorithm string - - 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"` -} - -// Validate validates the fields -func (f *InstallForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// _____ ____ _________________ ___ -// / _ \ | | \__ ___/ | \ -// / /_\ \| | / | | / ~ \ -// / | \ | / | | \ Y / -// \____|__ /______/ |____| \___|_ / -// \/ \/ - -// RegisterForm form for registering -type RegisterForm struct { - UserName string `binding:"Required;AlphaDashDot;MaxSize(40)"` - Email string `binding:"Required;Email;MaxSize(254)"` - Password string `binding:"MaxSize(255)"` - Retype string - GRecaptchaResponse string `form:"g-recaptcha-response"` - HcaptchaResponse string `form:"h-captcha-response"` -} - -// Validate validates the fields -func (f *RegisterForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// IsEmailDomainListed checks whether the domain of an email address -// matches a list of domains -func IsEmailDomainListed(list []string, email string) bool { - if len(list) == 0 { - return false - } - - n := strings.LastIndex(email, "@") - if n <= 0 { - return false - } - - domain := strings.ToLower(email[n+1:]) - - for _, v := range list { - if strings.ToLower(v) == domain { - return true - } - } - - return false -} - -// IsEmailDomainAllowed validates that the email address -// provided by the user matches what has been configured . -// The email is marked as allowed if it matches any of the -// domains in the whitelist or if it doesn't match any of -// domains in the blocklist, if any such list is not empty. -func (f RegisterForm) IsEmailDomainAllowed() bool { - if len(setting.Service.EmailDomainWhitelist) == 0 { - return !IsEmailDomainListed(setting.Service.EmailDomainBlocklist, f.Email) - } - - return IsEmailDomainListed(setting.Service.EmailDomainWhitelist, f.Email) -} - -// MustChangePasswordForm form for updating your password after account creation -// by an admin -type MustChangePasswordForm struct { - Password string `binding:"Required;MaxSize(255)"` - Retype string -} - -// Validate validates the fields -func (f *MustChangePasswordForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// SignInForm form for signing in with user/password -type SignInForm struct { - UserName string `binding:"Required;MaxSize(254)"` - // TODO remove required from password for SecondFactorAuthentication - Password string `binding:"Required;MaxSize(255)"` - Remember bool -} - -// Validate validates the fields -func (f *SignInForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// AuthorizationForm form for authorizing oauth2 clients -type AuthorizationForm struct { - ResponseType string `binding:"Required;In(code)"` - ClientID string `binding:"Required"` - RedirectURI string - State string - Scope string - Nonce string - - // PKCE support - CodeChallengeMethod string // S256, plain - CodeChallenge string -} - -// Validate validates the fields -func (f *AuthorizationForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// GrantApplicationForm form for authorizing oauth2 clients -type GrantApplicationForm struct { - ClientID string `binding:"Required"` - RedirectURI string - State string - Scope string - Nonce string -} - -// Validate validates the fields -func (f *GrantApplicationForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// AccessTokenForm for issuing access tokens from authorization codes or refresh tokens -type AccessTokenForm struct { - GrantType string `json:"grant_type"` - ClientID string `json:"client_id"` - ClientSecret string `json:"client_secret"` - RedirectURI string `json:"redirect_uri"` - Code string `json:"code"` - RefreshToken string `json:"refresh_token"` - - // PKCE support - CodeVerifier string `json:"code_verifier"` -} - -// Validate validates the fields -func (f *AccessTokenForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// __________________________________________.___ _______ ________ _________ -// / _____/\_ _____/\__ ___/\__ ___/| |\ \ / _____/ / _____/ -// \_____ \ | __)_ | | | | | |/ | \/ \ ___ \_____ \ -// / \ | \ | | | | | / | \ \_\ \/ \ -// /_______ //_______ / |____| |____| |___\____|__ /\______ /_______ / -// \/ \/ \/ \/ \/ - -// UpdateProfileForm form for updating profile -type UpdateProfileForm struct { - Name string `binding:"AlphaDashDot;MaxSize(40)"` - FullName string `binding:"MaxSize(100)"` - KeepEmailPrivate bool - Website string `binding:"ValidUrl;MaxSize(255)"` - Location string `binding:"MaxSize(50)"` - Language string - Description string `binding:"MaxSize(255)"` - KeepActivityPrivate bool -} - -// Validate validates the fields -func (f *UpdateProfileForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// Avatar types -const ( - AvatarLocal string = "local" - AvatarByMail string = "bymail" -) - -// AvatarForm form for changing avatar -type AvatarForm struct { - Source string - Avatar *multipart.FileHeader - Gravatar string `binding:"OmitEmpty;Email;MaxSize(254)"` - Federavatar bool -} - -// Validate validates the fields -func (f *AvatarForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// AddEmailForm form for adding new email -type AddEmailForm struct { - Email string `binding:"Required;Email;MaxSize(254)"` -} - -// Validate validates the fields -func (f *AddEmailForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// UpdateThemeForm form for updating a users' theme -type UpdateThemeForm struct { - Theme string `binding:"Required;MaxSize(30)"` -} - -// Validate validates the field -func (f *UpdateThemeForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// IsThemeExists checks if the theme is a theme available in the config. -func (f UpdateThemeForm) IsThemeExists() bool { - var exists bool - - for _, v := range setting.UI.Themes { - if strings.EqualFold(v, f.Theme) { - exists = true - break - } - } - - return exists -} - -// ChangePasswordForm form for changing password -type ChangePasswordForm struct { - OldPassword string `form:"old_password" binding:"MaxSize(255)"` - Password string `form:"password" binding:"Required;MaxSize(255)"` - Retype string `form:"retype"` -} - -// Validate validates the fields -func (f *ChangePasswordForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// AddOpenIDForm is for changing openid uri -type AddOpenIDForm struct { - Openid string `binding:"Required;MaxSize(256)"` -} - -// Validate validates the fields -func (f *AddOpenIDForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// AddKeyForm form for adding SSH/GPG key -type AddKeyForm struct { - Type string `binding:"OmitEmpty"` - Title string `binding:"Required;MaxSize(50)"` - Content string `binding:"Required"` - IsWritable bool -} - -// Validate validates the fields -func (f *AddKeyForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// NewAccessTokenForm form for creating access token -type NewAccessTokenForm struct { - Name string `binding:"Required;MaxSize(255)"` -} - -// Validate validates the fields -func (f *NewAccessTokenForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// EditOAuth2ApplicationForm form for editing oauth2 applications -type EditOAuth2ApplicationForm struct { - Name string `binding:"Required;MaxSize(255)" form:"application_name"` - RedirectURI string `binding:"Required" form:"redirect_uri"` -} - -// Validate validates the fields -func (f *EditOAuth2ApplicationForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// TwoFactorAuthForm for logging in with 2FA token. -type TwoFactorAuthForm struct { - Passcode string `binding:"Required"` -} - -// Validate validates the fields -func (f *TwoFactorAuthForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// TwoFactorScratchAuthForm for logging in with 2FA scratch token. -type TwoFactorScratchAuthForm struct { - Token string `binding:"Required"` -} - -// Validate validates the fields -func (f *TwoFactorScratchAuthForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// U2FRegistrationForm for reserving an U2F name -type U2FRegistrationForm struct { - Name string `binding:"Required"` -} - -// Validate validates the fields -func (f *U2FRegistrationForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// U2FDeleteForm for deleting U2F keys -type U2FDeleteForm struct { - ID int64 `binding:"Required"` -} - -// Validate validates the fields -func (f *U2FDeleteForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/forms/user_form_auth_openid.go b/modules/forms/user_form_auth_openid.go deleted file mode 100644 index b34f9dcc97..0000000000 --- a/modules/forms/user_form_auth_openid.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2017 The Gitea 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 forms - -import ( - "net/http" - - "code.gitea.io/gitea/modules/context" - "code.gitea.io/gitea/modules/web/middleware" - "gitea.com/go-chi/binding" -) - -// SignInOpenIDForm form for signing in with OpenID -type SignInOpenIDForm struct { - Openid string `binding:"Required;MaxSize(256)"` - Remember bool -} - -// Validate validates the fields -func (f *SignInOpenIDForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// SignUpOpenIDForm form for signin up with OpenID -type SignUpOpenIDForm struct { - UserName string `binding:"Required;AlphaDashDot;MaxSize(40)"` - Email string `binding:"Required;Email;MaxSize(254)"` - GRecaptchaResponse string `form:"g-recaptcha-response"` - HcaptchaResponse string `form:"h-captcha-response"` -} - -// Validate validates the fields -func (f *SignUpOpenIDForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} - -// ConnectOpenIDForm form for connecting an existing account to an OpenID URI -type ConnectOpenIDForm struct { - UserName string `binding:"Required;MaxSize(254)"` - Password string `binding:"Required;MaxSize(255)"` -} - -// Validate validates the fields -func (f *ConnectOpenIDForm) Validate(req *http.Request, errs binding.Errors) binding.Errors { - ctx := context.GetContext(req) - return middleware.Validate(errs, ctx.Data, f, ctx.Locale) -} diff --git a/modules/forms/user_form_test.go b/modules/forms/user_form_test.go deleted file mode 100644 index 9f67143d12..0000000000 --- a/modules/forms/user_form_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2018 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 forms - -import ( - "testing" - - "code.gitea.io/gitea/modules/setting" - - "github.com/stretchr/testify/assert" -) - -func TestRegisterForm_IsDomainAllowed_Empty(t *testing.T) { - _ = setting.Service - - setting.Service.EmailDomainWhitelist = []string{} - - form := RegisterForm{} - - assert.True(t, form.IsEmailDomainAllowed()) -} - -func TestRegisterForm_IsDomainAllowed_InvalidEmail(t *testing.T) { - _ = setting.Service - - setting.Service.EmailDomainWhitelist = []string{"gitea.io"} - - tt := []struct { - email string - }{ - {"securitygieqqq"}, - {"hdudhdd"}, - } - - for _, v := range tt { - form := RegisterForm{Email: v.email} - - assert.False(t, form.IsEmailDomainAllowed()) - } -} - -func TestRegisterForm_IsDomainAllowed_WhitelistedEmail(t *testing.T) { - _ = setting.Service - - setting.Service.EmailDomainWhitelist = []string{"gitea.io"} - - tt := []struct { - email string - valid bool - }{ - {"security@gitea.io", true}, - {"security@gITea.io", true}, - {"hdudhdd", false}, - {"seee@example.com", false}, - } - - for _, v := range tt { - form := RegisterForm{Email: v.email} - - assert.Equal(t, v.valid, form.IsEmailDomainAllowed()) - } -} - -func TestRegisterForm_IsDomainAllowed_BlocklistedEmail(t *testing.T) { - _ = setting.Service - - setting.Service.EmailDomainWhitelist = []string{} - setting.Service.EmailDomainBlocklist = []string{"gitea.io"} - - tt := []struct { - email string - valid bool - }{ - {"security@gitea.io", false}, - {"security@gitea.example", true}, - {"hdudhdd", true}, - } - - for _, v := range tt { - form := RegisterForm{Email: v.email} - - assert.Equal(t, v.valid, form.IsEmailDomainAllowed()) - } -} |