2014-07-26 08:24:27 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
2017-05-29 10:17:15 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2014-07-26 08:24:27 +04:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package auth
import (
2015-11-04 02:40:52 +03:00
"net/url"
"strings"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
2019-02-18 23:55:04 +03:00
"code.gitea.io/gitea/modules/setting"
2018-09-10 17:31:08 +03:00
"code.gitea.io/gitea/routers/utils"
2019-08-23 19:40:30 +03:00
"gitea.com/macaron/binding"
"gitea.com/macaron/macaron"
"github.com/unknwon/com"
2014-07-26 08:24:27 +04:00
)
// _______________________________________ _________.______________________ _______________.___.
// \______ \_ _____/\______ \_____ \ / _____/| \__ ___/\_____ \\______ \__ | |
// | _/| __)_ | ___// | \ \_____ \ | | | | / | \| _// | |
// | | \| \ | | / | \/ \| | | | / | \ | \\____ |
// |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______|
// \/ \/ \/ \/ \/ \/ \/
2016-11-27 09:03:59 +03:00
// CreateRepoForm form for creating repository
2015-08-28 13:33:09 +03:00
type CreateRepoForm struct {
2020-03-26 22:14:51 +03:00
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
2019-11-11 18:15:29 +03:00
RepoTemplate int64
GitContent bool
Topics bool
2019-11-24 20:57:52 +03:00
GitHooks bool
Webhooks bool
2019-11-25 08:17:51 +03:00
Avatar bool
Labels bool
2020-09-19 19:44:55 +03:00
TrustModel string
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * CreateRepoForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
2016-11-27 09:03:59 +03:00
// MigrateRepoForm form for migrating repository
2020-09-11 01:29:19 +03:00
// this is used to interact with web ui
2014-07-26 08:24:27 +04:00
type MigrateRepoForm struct {
2017-11-13 10:02:25 +03:00
// required: true
2015-09-03 13:48:52 +03:00
CloneAddr string ` json:"clone_addr" binding:"Required" `
2020-08-28 04:36:37 +03:00
Service int ` json:"service" `
2015-09-03 13:48:52 +03:00
AuthUsername string ` json:"auth_username" `
AuthPassword string ` json:"auth_password" `
2020-08-28 04:36:37 +03:00
AuthToken string ` json:"auth_token" `
2017-11-13 10:02:25 +03:00
// required: true
UID int64 ` json:"uid" binding:"Required" `
// required: true
2019-05-07 04:12:51 +03:00
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" `
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * MigrateRepoForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
2015-11-04 02:40:52 +03:00
// ParseRemoteAddr checks if given remote address is valid,
2016-11-21 22:08:21 +03:00
// and returns composed URL with needed username and password.
2015-11-04 02:40:52 +03:00
// It also checks if given user has permission when remote address
// is actually a local path.
2020-09-11 01:29:19 +03:00
func ParseRemoteAddr ( remoteAddr , authUsername , authPassword string , user * models . User ) ( string , error ) {
remoteAddr = strings . TrimSpace ( remoteAddr )
2015-11-04 02:40:52 +03:00
// 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 }
}
2020-09-11 01:29:19 +03:00
if len ( authUsername ) + len ( authPassword ) > 0 {
u . User = url . UserPassword ( authUsername , authPassword )
2015-11-04 02:40:52 +03:00
}
remoteAddr = u . String ( )
} else if ! user . CanImportLocal ( ) {
return "" , models . ErrInvalidCloneAddr { IsPermissionDenied : true }
} else if ! com . IsDir ( remoteAddr ) {
return "" , models . ErrInvalidCloneAddr { IsInvalidPath : true }
}
return remoteAddr , nil
}
2016-11-27 09:03:59 +03:00
// RepoSettingForm form for changing repository settings
2014-07-26 08:24:27 +04:00
type RepoSettingForm struct {
2019-08-17 00:56:57 +03:00
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
2019-11-11 18:15:29 +03:00
Template bool
2019-08-17 00:56:57 +03:00
EnablePrune bool
2015-12-05 05:30:33 +03:00
// Advanced settings
2017-09-12 09:48:13 +03:00
EnableWiki bool
EnableExternalWiki bool
ExternalWikiURL string
EnableIssues bool
EnableExternalTracker bool
ExternalTrackerURL string
TrackerURLFormat string
TrackerIssueStyle string
2020-08-17 06:07:38 +03:00
EnableProjects bool
2017-09-12 09:48:13 +03:00
EnablePulls bool
2018-01-05 21:56:50 +03:00
PullsIgnoreWhitespace bool
PullsAllowMerge bool
PullsAllowRebase bool
2018-12-27 13:27:08 +03:00
PullsAllowRebaseMerge bool
2018-01-05 21:56:50 +03:00
PullsAllowSquash bool
2017-09-12 09:48:13 +03:00
EnableTimetracker bool
AllowOnlyContributorsToTrackTime bool
2018-07-18 00:23:58 +03:00
EnableIssueDependencies bool
2019-01-23 21:58:38 +03:00
IsArchived bool
2018-03-27 17:13:20 +03:00
2020-09-19 19:44:55 +03:00
// Signing Settings
TrustModel string
2018-03-27 17:13:20 +03:00
// Admin settings
2019-02-10 22:27:19 +03:00
EnableHealthCheck bool
EnableCloseIssuesViaCommitInAnyBranch bool
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * RepoSettingForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
2017-09-14 11:16:22 +03:00
// __________ .__
// \______ \____________ ____ ____ | |__
// | | _/\_ __ \__ \ / \_/ ___\| | \
// | | \ | | \// __ \| | \ \___| Y \
// |______ / |__| (____ /___| /\___ >___| /
// \/ \/ \/ \/ \/
// ProtectBranchForm form for changing protected branch settings
type ProtectBranchForm struct {
2019-12-04 04:08:56 +03:00
Protected bool
EnablePush string
WhitelistUsers string
WhitelistTeams string
WhitelistDeployKeys bool
EnableMergeWhitelist bool
MergeWhitelistUsers string
MergeWhitelistTeams string
EnableStatusCheck bool ` xorm:"NOT NULL DEFAULT false" `
StatusCheckContexts [ ] string
RequiredApprovals int64
EnableApprovalsWhitelist bool
ApprovalsWhitelistUsers string
ApprovalsWhitelistTeams string
2020-01-03 20:47:10 +03:00
BlockOnRejectedReviews bool
2020-04-17 04:00:36 +03:00
BlockOnOutdatedBranch bool
2020-01-09 04:47:45 +03:00
DismissStaleApprovals bool
2020-01-15 11:32:57 +03:00
RequireSignedCommits bool
2020-03-27 01:26:34 +03:00
ProtectedFilePatterns string
2017-09-14 11:16:22 +03:00
}
// Validate validates the fields
func ( f * ProtectBranchForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2014-07-26 08:24:27 +04:00
// __ __ ___. .__ .__ __
// / \ / \ ____\_ |__ | |__ | |__ ____ | | __
// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ /
// \ /\ ___/| \_\ \ Y \ Y ( <_> ) <
// \__/\ / \___ >___ /___| /___| /\____/|__|_ \
// \/ \/ \/ \/ \/ \/
2016-11-27 09:03:59 +03:00
// WebhookForm form for changing web hook
2015-08-26 19:30:06 +03:00
type WebhookForm struct {
2020-03-06 08:10:48 +03:00
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" `
2015-08-28 18:36:13 +03:00
}
2016-11-27 09:03:59 +03:00
// PushOnly if the hook will be triggered when push
2015-08-28 18:36:13 +03:00
func ( f WebhookForm ) PushOnly ( ) bool {
return f . Events == "push_only"
}
2016-11-27 09:03:59 +03:00
// SendEverything if the hook will be triggered any event
2015-08-28 18:36:13 +03:00
func ( f WebhookForm ) SendEverything ( ) bool {
return f . Events == "send_everything"
}
2016-11-27 09:03:59 +03:00
// ChooseEvents if the hook will be triggered choose events
2015-08-28 18:36:13 +03:00
func ( f WebhookForm ) ChooseEvents ( ) bool {
return f . Events == "choose_events"
2015-08-26 19:30:06 +03:00
}
2016-11-27 09:03:59 +03:00
// NewWebhookForm form for creating web hook
2014-07-26 08:24:27 +04:00
type NewWebhookForm struct {
2017-04-19 06:02:20 +03:00
PayloadURL string ` binding:"Required;ValidUrl" `
2019-05-05 21:09:02 +03:00
HTTPMethod string ` binding:"Required;In(POST,GET)" `
2015-08-26 19:30:06 +03:00
ContentType int ` binding:"Required" `
Secret string
WebhookForm
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * NewWebhookForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
2017-05-29 10:17:15 +03:00
// 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 ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2016-11-27 09:03:59 +03:00
// NewSlackHookForm form for creating slack hook
2014-08-24 16:59:47 +04:00
type NewSlackHookForm struct {
2017-04-19 06:02:20 +03:00
PayloadURL string ` binding:"Required;ValidUrl" `
2015-08-26 19:30:06 +03:00
Channel string ` binding:"Required" `
2015-08-29 06:49:59 +03:00
Username string
IconURL string
Color string
2015-08-26 19:30:06 +03:00
WebhookForm
2014-08-24 16:59:47 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * NewSlackHookForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-08-24 16:59:47 +04:00
}
2018-09-10 17:31:08 +03:00
// HasInvalidChannel validates the channel name is in the right format
func ( f NewSlackHookForm ) HasInvalidChannel ( ) bool {
return ! utils . IsValidSlackChannel ( f . Channel )
}
2017-08-28 08:06:45 +03:00
// 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 ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2017-11-21 07:26:43 +03:00
}
// NewDingtalkHookForm form for creating dingtalk hook
type NewDingtalkHookForm struct {
PayloadURL string ` binding:"Required;ValidUrl" `
WebhookForm
}
// Validate validates the fields
func ( f * NewDingtalkHookForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
2019-04-19 05:45:02 +03:00
return 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 ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
2019-04-19 17:18:06 +03:00
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2020-03-28 16:09:55 +03:00
// 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 ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2019-04-19 17:18:06 +03:00
// NewMSTeamsHookForm form for creating MS Teams hook
type NewMSTeamsHookForm struct {
PayloadURL string ` binding:"Required;ValidUrl" `
WebhookForm
}
// Validate validates the fields
func ( f * NewMSTeamsHookForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
2017-11-21 07:26:43 +03:00
return validate ( errs , ctx . Data , f , ctx . Locale )
2017-08-28 08:06:45 +03:00
}
2020-02-12 11:48:28 +03:00
// NewFeishuHookForm form for creating feishu hook
type NewFeishuHookForm struct {
PayloadURL string ` binding:"Required;ValidUrl" `
WebhookForm
}
// Validate validates the fields
func ( f * NewFeishuHookForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2014-07-26 08:24:27 +04:00
// .___
// | | ______ ________ __ ____
// | |/ ___// ___/ | \_/ __ \
// | |\___ \ \___ \| | /\ ___/
// |___/____ >____ >____/ \___ >
// \/ \/ \/
2016-11-27 09:03:59 +03:00
// CreateIssueForm form for creating issue
2014-07-26 08:24:27 +04:00
type CreateIssueForm struct {
2015-08-10 11:52:08 +03:00
Title string ` binding:"Required;MaxSize(255)" `
LabelIDs string ` form:"label_ids" `
2018-05-09 19:29:04 +03:00
AssigneeIDs string ` form:"assignee_ids" `
2017-08-24 15:30:27 +03:00
Ref string ` form:"ref" `
2015-08-09 10:23:02 +03:00
MilestoneID int64
2020-08-17 06:07:38 +03:00
ProjectID int64
2015-08-09 10:23:02 +03:00
AssigneeID int64
Content string
2016-08-11 15:48:08 +03:00
Files [ ] string
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * CreateIssueForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
2016-11-27 09:03:59 +03:00
// CreateCommentForm form for creating comment
2015-08-13 11:07:11 +03:00
type CreateCommentForm struct {
2016-08-11 15:48:08 +03:00
Content string
Status string ` binding:"OmitEmpty;In(reopen,close)" `
Files [ ] string
2015-08-13 11:07:11 +03:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2015-08-13 11:07:11 +03:00
func ( f * CreateCommentForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2017-12-04 02:14:26 +03:00
}
// ReactionForm form for adding and removing reaction
type ReactionForm struct {
2019-12-02 01:57:24 +03:00
Content string ` binding:"Required" `
2017-12-04 02:14:26 +03:00
}
// Validate validates the fields
func ( f * ReactionForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2015-08-13 11:07:11 +03:00
}
2019-02-18 23:55:04 +03:00
// IssueLockForm form for locking an issue
type IssueLockForm struct {
Reason string ` binding:"Required" `
}
// Validate validates the fields
func ( i * IssueLockForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return 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
}
2020-08-17 06:07:38 +03:00
// __________ __ __
// \______ \_______ ____ |__| ____ _____/ |_ ______
// | ___/\_ __ \/ _ \ | |/ __ \_/ ___\ __\/ ___/
// | | | | \( <_> ) | \ ___/\ \___| | \___ \
// |____| |__| \____/\__| |\___ >\___ >__| /____ >
// \______| \/ \/ \/
// 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" `
}
// EditProjectBoardTitleForm is a form for editing the title of a project's
// board
type EditProjectBoardTitleForm struct {
Title string ` binding:"Required;MaxSize(100)" `
}
2014-07-26 08:24:27 +04:00
// _____ .__.__ __
// / \ |__| | ____ _______/ |_ ____ ____ ____
// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \
// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/
// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ >
// \/ \/ \/ \/ \/
2016-11-27 09:03:59 +03:00
// CreateMilestoneForm form for creating milestone
2014-07-26 08:24:27 +04:00
type CreateMilestoneForm struct {
2015-08-05 10:24:26 +03:00
Title string ` binding:"Required;MaxSize(50)" `
Content string
Deadline string
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * CreateMilestoneForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
// .____ ___. .__
// | | _____ \_ |__ ____ | |
// | | \__ \ | __ \_/ __ \| |
// | |___ / __ \| \_\ \ ___/| |__
// |_______ (____ /___ /\___ >____/
// \/ \/ \/ \/
2016-11-27 09:03:59 +03:00
// CreateLabelForm form for creating label
2014-07-26 08:24:27 +04:00
type CreateLabelForm struct {
2018-03-13 05:03:55 +03:00
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" `
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * CreateLabelForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
2016-11-27 09:03:59 +03:00
// InitializeLabelsForm form for initializing labels
2016-08-30 05:02:49 +03:00
type InitializeLabelsForm struct {
TemplateName string ` binding:"Required" `
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2016-08-30 05:02:49 +03:00
func ( f * InitializeLabelsForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2018-01-05 21:56:50 +03:00
// __________ .__ .__ __________ __
// \______ \__ __| | | | \______ \ ____ ________ __ ____ _______/ |_
// | ___/ | \ | | | | _// __ \/ ____/ | \_/ __ \ / ___/\ __\
// | | | | / |_| |__ | | \ ___< <_| | | /\ ___/ \___ \ | |
// |____| |____/|____/____/ |____|_ /\___ >__ |____/ \___ >____ > |__|
// \/ \/ |__| \/ \/
// MergePullRequestForm form for merging Pull Request
2019-02-08 11:08:38 +03:00
// swagger:model MergePullRequestOption
2018-01-05 21:56:50 +03:00
type MergePullRequestForm struct {
2019-02-08 11:08:38 +03:00
// required: true
2019-02-09 15:48:28 +03:00
// enum: merge,rebase,rebase-merge,squash
2018-12-27 13:27:08 +03:00
Do string ` binding:"Required;In(merge,rebase,rebase-merge,squash)" `
2018-01-05 21:56:50 +03:00
MergeTitleField string
MergeMessageField string
2020-01-11 10:29:34 +03:00
ForceMerge * bool ` json:"force_merge,omitempty" `
2018-01-05 21:56:50 +03:00
}
// Validate validates the fields
func ( f * MergePullRequestForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2018-08-06 07:43:22 +03:00
// CodeCommentForm form for adding code comments for PRs
type CodeCommentForm struct {
2020-01-09 04:47:45 +03:00
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
2018-08-06 07:43:22 +03:00
}
// Validate validates the fields
func ( f * CodeCommentForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
// SubmitReviewForm for submitting a finished code review
type SubmitReviewForm struct {
2020-01-09 04:47:45 +03:00
Content string
Type string ` binding:"Required;In(approve,comment,reject)" `
CommitID string
2018-08-06 07:43:22 +03:00
}
// Validate validates the fields
func ( f * SubmitReviewForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return 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
}
}
2018-08-07 20:15:41 +03:00
// 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
}
2014-07-26 08:24:27 +04:00
// __________ .__
// \______ \ ____ | | ____ _____ ______ ____
// | _// __ \| | _/ __ \\__ \ / ___// __ \
// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/
// |____|_ /\___ >____/\___ >____ /____ >\___ >
// \/ \/ \/ \/ \/ \/
2016-11-27 09:03:59 +03:00
// NewReleaseForm form for creating release
2014-07-26 08:24:27 +04:00
type NewReleaseForm struct {
2019-11-25 02:06:23 +03:00
TagName string ` binding:"Required;GitRefName;MaxSize(255)" `
Target string ` form:"tag_target" binding:"Required;MaxSize(255)" `
Title string ` binding:"Required;MaxSize(255)" `
2015-11-16 07:52:46 +03:00
Content string
Draft string
Prerelease bool
2017-01-25 10:23:20 +03:00
Files [ ] string
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * NewReleaseForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
2016-11-27 09:03:59 +03:00
// EditReleaseForm form for changing release
2014-07-26 08:24:27 +04:00
type EditReleaseForm struct {
2019-11-25 02:06:23 +03:00
Title string ` form:"title" binding:"Required;MaxSize(255)" `
2016-01-30 16:39:02 +03:00
Content string ` form:"content" `
2014-07-26 08:24:27 +04:00
Draft string ` form:"draft" `
Prerelease bool ` form:"prerelease" `
2017-01-25 10:23:20 +03:00
Files [ ] string
2014-07-26 08:24:27 +04:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2014-10-15 19:19:20 +04:00
func ( f * EditReleaseForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
2014-07-26 08:24:27 +04:00
}
2015-11-27 01:33:45 +03:00
// __ __.__ __ .__
// / \ / \__| | _|__|
// \ \/\/ / | |/ / |
// \ /| | <| |
// \__/\ / |__|__|_ \__|
// \/ \/
2016-11-27 09:03:59 +03:00
// NewWikiForm form for creating wiki
2015-11-27 01:33:45 +03:00
type NewWikiForm struct {
2017-11-29 23:52:34 +03:00
Title string ` binding:"Required" `
Content string ` binding:"Required" `
Message string
2015-11-27 01:33:45 +03:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2015-11-27 01:33:45 +03:00
// FIXME: use code generation to generate this method.
func ( f * NewWikiForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2016-08-11 15:48:08 +03:00
// ___________ .___.__ __
// \_ _____/ __| _/|__|/ |_
// | __)_ / __ | | \ __\
// | \/ /_/ | | || |
// /_______ /\____ | |__||__|
// \/ \/
2016-11-27 09:03:59 +03:00
// EditRepoFileForm form for changing repository file
2016-08-11 15:48:08 +03:00
type EditRepoFileForm struct {
2016-08-25 07:35:03 +03:00
TreePath string ` binding:"Required;MaxSize(500)" `
2019-10-16 22:28:41 +03:00
Content string
2016-11-04 14:28:56 +03:00
CommitSummary string ` binding:"MaxSize(100)" `
2016-08-11 15:48:08 +03:00
CommitMessage string
CommitChoice string ` binding:"Required;MaxSize(50)" `
2017-04-19 06:02:20 +03:00
NewBranchName string ` binding:"GitRefName;MaxSize(100)" `
2016-08-11 15:48:08 +03:00
LastCommit string
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2016-08-11 15:48:08 +03:00
func ( f * EditRepoFileForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2016-11-27 09:03:59 +03:00
// EditPreviewDiffForm form for changing preview diff
2016-08-11 15:48:08 +03:00
type EditPreviewDiffForm struct {
Content string
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2016-08-11 15:48:08 +03:00
func ( f * EditPreviewDiffForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
// ____ ___ .__ .___
// | | \______ | | _________ __| _/
// | | /\____ \| | / _ \__ \ / __ |
// | | / | |_> > |_( <_> ) __ \_/ /_/ |
// |______/ | __/|____/\____(____ /\____ |
// |__| \/ \/
//
2016-11-27 09:03:59 +03:00
// UploadRepoFileForm form for uploading repository file
2016-08-11 15:48:08 +03:00
type UploadRepoFileForm struct {
2016-11-04 14:28:56 +03:00
TreePath string ` binding:"MaxSize(500)" `
CommitSummary string ` binding:"MaxSize(100)" `
2016-08-11 15:48:08 +03:00
CommitMessage string
CommitChoice string ` binding:"Required;MaxSize(50)" `
2017-04-19 06:02:20 +03:00
NewBranchName string ` binding:"GitRefName;MaxSize(100)" `
2016-08-11 15:48:08 +03:00
Files [ ] string
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2016-08-11 15:48:08 +03:00
func ( f * UploadRepoFileForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2016-11-27 09:03:59 +03:00
// RemoveUploadFileForm form for removing uploaded file
2016-08-11 15:48:08 +03:00
type RemoveUploadFileForm struct {
File string ` binding:"Required;MaxSize(50)" `
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2016-08-11 15:48:08 +03:00
func ( f * RemoveUploadFileForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
// ________ .__ __
// \______ \ ____ | | _____/ |_ ____
// | | \_/ __ \| | _/ __ \ __\/ __ \
// | ` \ ___/| |_\ ___/| | \ ___/
// /_______ /\___ >____/\___ >__| \___ >
// \/ \/ \/ \/
2016-11-27 09:03:59 +03:00
// DeleteRepoFileForm form for deleting repository file
2016-08-11 15:48:08 +03:00
type DeleteRepoFileForm struct {
2016-11-04 14:28:56 +03:00
CommitSummary string ` binding:"MaxSize(100)" `
2016-08-28 11:41:44 +03:00
CommitMessage string
CommitChoice string ` binding:"Required;MaxSize(50)" `
2017-04-19 06:02:20 +03:00
NewBranchName string ` binding:"GitRefName;MaxSize(100)" `
2019-04-17 19:06:35 +03:00
LastCommit string
2016-08-11 15:48:08 +03:00
}
2017-03-15 03:52:01 +03:00
// Validate validates the fields
2016-08-11 15:48:08 +03:00
func ( f * DeleteRepoFileForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2017-09-12 09:48:13 +03:00
// ___________.__ ___________ __
// \__ ___/|__| _____ ____ \__ ___/___________ ____ | | __ ___________
// | | | |/ \_/ __ \ | | \_ __ \__ \ _/ ___\| |/ // __ \_ __ \
// | | | | 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 ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2018-04-11 05:51:44 +03:00
// SaveTopicForm form for save topics for repository
type SaveTopicForm struct {
Topics [ ] string ` binding:"topics;Required;" `
}
2018-05-01 22:05:28 +03:00
// 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 ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}