2014-07-26 00:24:27 -04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package auth
import (
2015-11-03 18:40:52 -05:00
"net/url"
"strings"
"github.com/Unknwon/com"
2015-10-15 21:28:12 -04:00
"github.com/go-macaron/binding"
"gopkg.in/macaron.v1"
2015-11-03 18:40:52 -05:00
2016-11-03 13:29:56 +01:00
"github.com/go-gitea/gitea/models"
2014-07-26 00:24:27 -04:00
)
// _______________________________________ _________.______________________ _______________.___.
// \______ \_ _____/\______ \_____ \ / _____/| \__ ___/\_____ \\______ \__ | |
// | _/| __)_ | ___// | \ \_____ \ | | | | / | \| _// | |
// | | \| \ | | / | \/ \| | | | / | \ | \\____ |
// |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______|
// \/ \/ \/ \/ \/ \/ \/
2015-08-28 18:33:09 +08:00
type CreateRepoForm struct {
2015-08-28 16:44:04 +08:00
Uid int64 ` binding:"Required" `
RepoName string ` binding:"Required;AlphaDashDot;MaxSize(100)" `
Private bool
Description string ` binding:"MaxSize(255)" `
2015-08-28 18:33:09 +08:00
AutoInit bool
Gitignores string
License string
Readme string
2014-07-26 00:24:27 -04:00
}
2014-10-15 11: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 00:24:27 -04:00
}
type MigrateRepoForm struct {
2015-09-03 06:48:52 -04:00
CloneAddr string ` json:"clone_addr" binding:"Required" `
AuthUsername string ` json:"auth_username" `
AuthPassword string ` json:"auth_password" `
Uid int64 ` json:"uid" binding:"Required" `
RepoName string ` json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)" `
2015-10-30 02:44:45 +01:00
Mirror bool ` json:"mirror" `
Private bool ` json:"private" `
2015-09-03 06:48:52 -04:00
Description string ` json:"description" binding:"MaxSize(255)" `
2014-07-26 00:24:27 -04:00
}
2014-10-15 11: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 00:24:27 -04:00
}
2015-11-03 18:40:52 -05:00
// ParseRemoteAddr checks if given remote address is valid,
// and returns composed URL with needed username and passowrd.
// It also checks if given user has permission when remote address
// is actually a local path.
func ( f MigrateRepoForm ) ParseRemoteAddr ( user * models . User ) ( string , error ) {
2016-02-20 17:32:34 -05:00
remoteAddr := strings . TrimSpace ( f . CloneAddr )
2015-11-03 18:40:52 -05: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 }
}
if len ( f . AuthUsername ) + len ( f . AuthPassword ) > 0 {
u . User = url . UserPassword ( f . AuthUsername , f . AuthPassword )
}
remoteAddr = u . String ( )
} else if ! user . CanImportLocal ( ) {
return "" , models . ErrInvalidCloneAddr { IsPermissionDenied : true }
} else if ! com . IsDir ( remoteAddr ) {
return "" , models . ErrInvalidCloneAddr { IsInvalidPath : true }
}
return remoteAddr , nil
}
2014-07-26 00:24:27 -04:00
type RepoSettingForm struct {
2015-12-08 20:06:12 -05:00
RepoName string ` binding:"Required;AlphaDashDot;MaxSize(100)" `
Description string ` binding:"MaxSize(255)" `
Website string ` binding:"Url;MaxSize(100)" `
Branch string
Interval int
MirrorAddress string
Private bool
2016-07-09 07:22:28 +02:00
EnablePrune bool
2015-12-04 21:30:33 -05:00
// Advanced settings
EnableWiki bool
2015-12-11 04:55:08 -05:00
EnableExternalWiki bool
ExternalWikiURL string
2015-12-04 21:30:33 -05:00
EnableIssues bool
EnableExternalTracker bool
2016-11-04 09:06:54 +01:00
ExternalTrackerURL string
2015-12-04 21:30:33 -05:00
TrackerURLFormat string
2016-04-22 17:28:08 -05:00
TrackerIssueStyle string
2015-12-04 21:30:33 -05:00
EnablePulls bool
2014-07-26 00:24:27 -04:00
}
2014-10-15 11: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 00:24:27 -04:00
}
// __ __ ___. .__ .__ __
// / \ / \ ____\_ |__ | |__ | |__ ____ | | __
// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ /
// \ /\ ___/| \_\ \ Y \ Y ( <_> ) <
// \__/\ / \___ >___ /___| /___| /\____/|__|_ \
// \/ \/ \/ \/ \/ \/
2015-08-27 00:30:06 +08:00
type WebhookForm struct {
2016-08-14 03:32:24 -07:00
Events string
Create bool
Push bool
PullRequest bool
Active bool
2015-08-28 23:36:13 +08:00
}
func ( f WebhookForm ) PushOnly ( ) bool {
return f . Events == "push_only"
}
func ( f WebhookForm ) SendEverything ( ) bool {
return f . Events == "send_everything"
}
func ( f WebhookForm ) ChooseEvents ( ) bool {
return f . Events == "choose_events"
2015-08-27 00:30:06 +08:00
}
2014-07-26 00:24:27 -04:00
type NewWebhookForm struct {
2015-08-27 00:30:06 +08:00
PayloadURL string ` binding:"Required;Url" `
ContentType int ` binding:"Required" `
Secret string
WebhookForm
2014-07-26 00:24:27 -04:00
}
2014-10-15 11: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 00:24:27 -04:00
}
2014-08-24 08:59:47 -04:00
type NewSlackHookForm struct {
2016-07-16 15:15:00 +08:00
PayloadURL string ` binding:"Required;Url" `
2015-08-27 00:30:06 +08:00
Channel string ` binding:"Required" `
2015-08-29 11:49:59 +08:00
Username string
IconURL string
Color string
2015-08-27 00:30:06 +08:00
WebhookForm
2014-08-24 08:59:47 -04:00
}
2014-10-15 11: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 08:59:47 -04:00
}
2014-07-26 00:24:27 -04:00
// .___
// | | ______ ________ __ ____
// | |/ ___// ___/ | \_/ __ \
// | |\___ \ \___ \| | /\ ___/
// |___/____ >____ >____/ \___ >
// \/ \/ \/
type CreateIssueForm struct {
2015-08-10 16:52:08 +08:00
Title string ` binding:"Required;MaxSize(255)" `
LabelIDs string ` form:"label_ids" `
2015-08-09 15:23:02 +08:00
MilestoneID int64
AssigneeID int64
Content string
2016-08-11 05:48:08 -07:00
Files [ ] string
2014-07-26 00:24:27 -04:00
}
2014-10-15 11: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 00:24:27 -04:00
}
2015-08-13 16:07:11 +08:00
type CreateCommentForm struct {
2016-08-11 05:48:08 -07:00
Content string
Status string ` binding:"OmitEmpty;In(reopen,close)" `
Files [ ] string
2015-08-13 16:07:11 +08:00
}
func ( f * CreateCommentForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2014-07-26 00:24:27 -04:00
// _____ .__.__ __
// / \ |__| | ____ _______/ |_ ____ ____ ____
// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \
// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/
// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ >
// \/ \/ \/ \/ \/
type CreateMilestoneForm struct {
2015-08-05 15:24:26 +08:00
Title string ` binding:"Required;MaxSize(50)" `
Content string
Deadline string
2014-07-26 00:24:27 -04:00
}
2014-10-15 11: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 00:24:27 -04:00
}
// .____ ___. .__
// | | _____ \_ |__ ____ | |
// | | \__ \ | __ \_/ __ \| |
// | |___ / __ \| \_\ \ ___/| |__
// |_______ (____ /___ /\___ >____/
// \/ \/ \/ \/
type CreateLabelForm struct {
2015-07-24 23:13:42 +08:00
ID int64
2015-07-24 21:02:49 +08:00
Title string ` binding:"Required;MaxSize(50)" locale:"repo.issues.label_name" `
Color string ` binding:"Required;Size(7)" locale:"repo.issues.label_color" `
2014-07-26 00:24:27 -04:00
}
2014-10-15 11: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 00:24:27 -04:00
}
2016-08-30 04:02:49 +02:00
type InitializeLabelsForm struct {
TemplateName string ` binding:"Required" `
}
func ( f * InitializeLabelsForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
2014-07-26 00:24:27 -04:00
// __________ .__
// \______ \ ____ | | ____ _____ ______ ____
// | _// __ \| | _/ __ \\__ \ / ___// __ \
// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/
// |____|_ /\___ >____/\___ >____ /____ >\___ >
// \/ \/ \/ \/ \/ \/
type NewReleaseForm struct {
2015-11-15 23:52:46 -05:00
TagName string ` binding:"Required" `
2014-07-26 00:24:27 -04:00
Target string ` form:"tag_target" binding:"Required" `
2015-11-15 23:52:46 -05:00
Title string ` binding:"Required" `
Content string
Draft string
Prerelease bool
2014-07-26 00:24:27 -04:00
}
2014-10-15 11: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 00:24:27 -04:00
}
type EditReleaseForm struct {
Title string ` form:"title" binding:"Required" `
2016-01-30 13:39:02 +00:00
Content string ` form:"content" `
2014-07-26 00:24:27 -04:00
Draft string ` form:"draft" `
Prerelease bool ` form:"prerelease" `
}
2014-10-15 11: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 00:24:27 -04:00
}
2015-11-26 17:33:45 -05:00
// __ __.__ __ .__
// / \ / \__| | _|__|
// \ \/\/ / | |/ / |
// \ /| | <| |
// \__/\ / |__|__|_ \__|
// \/ \/
type NewWikiForm struct {
2015-11-27 01:50:38 -05:00
OldTitle string
Title string ` binding:"Required" `
Content string ` binding:"Required" `
Message string
2015-11-26 17:33:45 -05: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 05:48:08 -07:00
// ___________ .___.__ __
// \_ _____/ __| _/|__|/ |_
// | __)_ / __ | | \ __\
// | \/ /_/ | | || |
// /_______ /\____ | |__||__|
// \/ \/
type EditRepoFileForm struct {
2016-08-24 21:35:03 -07:00
TreePath string ` binding:"Required;MaxSize(500)" `
2016-08-11 05:48:08 -07:00
Content string ` binding:"Required" `
2016-11-04 12:28:56 +01:00
CommitSummary string ` binding:"MaxSize(100)" `
2016-08-11 05:48:08 -07:00
CommitMessage string
CommitChoice string ` binding:"Required;MaxSize(50)" `
NewBranchName string ` binding:"AlphaDashDot;MaxSize(100)" `
LastCommit string
}
func ( f * EditRepoFileForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
type EditPreviewDiffForm struct {
Content string
}
func ( f * EditPreviewDiffForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
// ____ ___ .__ .___
// | | \______ | | _________ __| _/
// | | /\____ \| | / _ \__ \ / __ |
// | | / | |_> > |_( <_> ) __ \_/ /_/ |
// |______/ | __/|____/\____(____ /\____ |
// |__| \/ \/
//
type UploadRepoFileForm struct {
2016-11-04 12:28:56 +01:00
TreePath string ` binding:"MaxSize(500)" `
CommitSummary string ` binding:"MaxSize(100)" `
2016-08-11 05:48:08 -07:00
CommitMessage string
CommitChoice string ` binding:"Required;MaxSize(50)" `
NewBranchName string ` binding:"AlphaDashDot;MaxSize(100)" `
Files [ ] string
}
func ( f * UploadRepoFileForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
type RemoveUploadFileForm struct {
File string ` binding:"Required;MaxSize(50)" `
}
func ( f * RemoveUploadFileForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}
// ________ .__ __
// \______ \ ____ | | _____/ |_ ____
// | | \_/ __ \| | _/ __ \ __\/ __ \
// | ` \ ___/| |_\ ___/| | \ ___/
// /_______ /\___ >____/\___ >__| \___ >
// \/ \/ \/ \/
type DeleteRepoFileForm struct {
2016-11-04 12:28:56 +01:00
CommitSummary string ` binding:"MaxSize(100)" `
2016-08-28 01:41:44 -07:00
CommitMessage string
CommitChoice string ` binding:"Required;MaxSize(50)" `
NewBranchName string ` binding:"AlphaDashDot;MaxSize(100)" `
2016-08-11 05:48:08 -07:00
}
func ( f * DeleteRepoFileForm ) Validate ( ctx * macaron . Context , errs binding . Errors ) binding . Errors {
return validate ( errs , ctx . Data , f , ctx . Locale )
}