mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 21:16:26 +01:00 
			
		
		
		
	commit 0afcb843d7ffd596991c4885cab768273a6eb42c
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Sun Jul 31 17:13:29 2016 -0600
    Removed Upload stats as the upload table is just a temporary table
commit 7ecd73ff5535612d79d471409173ee7f1fcfa157
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Sun Jul 31 08:42:41 2016 -0600
    Fix for CodeMirror mode
commit c29b9ab531e2e7af0fb5db24dc17e51027dd1174
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Sun Jul 31 08:03:33 2016 -0600
    Made tabbing in editor use spaces
commit 23af384c53206a8a40e11e45bf49d7a149c4adcd
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Sun Jul 31 07:56:46 2016 -0600
    Fix for data-url
commit cfb8a97591cb6fc0a92e49563b7b764c524db0e9
Merge: 7fc8a89 991ce42
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Sun Jul 31 07:42:53 2016 -0600
    Merge remote-tracking branch 'gogits/develop' into feature-create-and-edit-repo-file
    Conflicts:
    	modules/bindata/bindata.go
    	public/js/gogs.js
commit 7fc8a89cb495478225b02d613e647f99a1489634
Merge: fd3d86c c03d040
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Sun Jul 31 07:40:00 2016 -0600
    Merge branch 'feature-create-and-edit-repo-file' of github.com:richmahn/gogs into feature-create-and-edit-repo-file
commit fd3d86ca6bbc02cfda566a504ffd6b03db4f75ef
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Sun Jul 31 07:39:44 2016 -0600
    Code cleanup
commit c03d0401c1049eeeccc32ab1f9c3303c130be5ee
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Fri Jul 29 15:38:23 2016 -0600
    Code cleanup
commit 98e1206ccf9f9a4503c020e3a7830cf9f861dfae
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Thu Jul 28 18:36:01 2016 -0600
    Code cleanup and fixes
commit c2895dc742f25f8412879c9fa15e18f27f42f194
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Thu Jul 28 18:24:04 2016 -0600
    Fixes per Unknwon's requests
commit 6aa7e46b21ad4c96e562daa2eac26a8fb408f8ef
Merge: 889e9fa ad7ea88
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Thu Jul 28 17:13:43 2016 -0600
    Merge remote-tracking branch 'gogits/develop' into feature-create-and-edit-repo-file
    Conflicts:
    	modules/bindata/bindata.go
    	modules/setting/setting.go
commit 889e9faf1bd8559a4979c8f46005d488c1a234d4
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Fri Jul 22 14:09:18 2016 -0600
    Fix in gogs.js
commit 47603edf223f147b114be65f3bd27bc1e88827a5
Merge: bb57912 cf85e9e
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Fri Jul 22 14:07:36 2016 -0600
    Merge remote-tracking branch 'gogits/develop' into feature-create-and-edit-repo-file
    Conflicts:
    	modules/bindata/bindata.go
    	public/js/gogs.js
commit bb5791255867a71c11a77b639db050ad09c597a4
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Fri Jul 22 14:02:18 2016 -0600
    Update for using CodeMirror mode addon
commit d10d128c51039be19e2af9c66c63db66a9f2ec6d
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Tue Jul 19 16:12:57 2016 -0600
    Update for Edit
commit 34a34982025144e3225e389f7849eb6273c1d576
Merge: fa1b752 1c7dcdd
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Tue Jul 19 11:52:02 2016 -0600
    Merge remote-tracking branch 'gogits/develop' into feature-create-and-edit-repo-file
    Conflicts:
    	modules/bindata/bindata.go
commit fa1b752be29cd455c5184ddac2ffe80b3489763e
Author: Richard Mahn <richard_mahn@wycliffeassociates.org>
Date:   Fri Jul 15 18:35:42 2016 -0600
    Feature for editing, creating, uploading and deleting files
		
	
			
		
			
				
	
	
		
			360 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			360 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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 (
 | 
						|
	"net/url"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/Unknwon/com"
 | 
						|
	"github.com/go-macaron/binding"
 | 
						|
	"gopkg.in/macaron.v1"
 | 
						|
 | 
						|
	"github.com/gogits/gogs/models"
 | 
						|
)
 | 
						|
 | 
						|
// _______________________________________    _________.______________________ _______________.___.
 | 
						|
// \______   \_   _____/\______   \_____  \  /   _____/|   \__    ___/\_____  \\______   \__  |   |
 | 
						|
//  |       _/|    __)_  |     ___//   |   \ \_____  \ |   | |    |    /   |   \|       _//   |   |
 | 
						|
//  |    |   \|        \ |    |   /    |    \/        \|   | |    |   /    |    \    |   \\____   |
 | 
						|
//  |____|_  /_______  / |____|   \_______  /_______  /|___| |____|   \_______  /____|_  // ______|
 | 
						|
//         \/        \/                   \/        \/                        \/       \/ \/
 | 
						|
 | 
						|
type CreateRepoForm struct {
 | 
						|
	Uid         int64  `binding:"Required"`
 | 
						|
	RepoName    string `binding:"Required;AlphaDashDot;MaxSize(100)"`
 | 
						|
	Private     bool
 | 
						|
	Description string `binding:"MaxSize(255)"`
 | 
						|
	AutoInit    bool
 | 
						|
	Gitignores  string
 | 
						|
	License     string
 | 
						|
	Readme      string
 | 
						|
}
 | 
						|
 | 
						|
func (f *CreateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
type MigrateRepoForm struct {
 | 
						|
	CloneAddr    string `json:"clone_addr" binding:"Required"`
 | 
						|
	AuthUsername string `json:"auth_username"`
 | 
						|
	AuthPassword string `json:"auth_password"`
 | 
						|
	Uid          int64  `json:"uid" binding:"Required"`
 | 
						|
	RepoName     string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"`
 | 
						|
	Mirror       bool   `json:"mirror"`
 | 
						|
	Private      bool   `json:"private"`
 | 
						|
	Description  string `json:"description" binding:"MaxSize(255)"`
 | 
						|
}
 | 
						|
 | 
						|
func (f *MigrateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
// ParseRemoteAddr checks if given remote address is valid,
 | 
						|
// and returns composed URL with needed username and 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) {
 | 
						|
	remoteAddr := strings.TrimSpace(f.CloneAddr)
 | 
						|
 | 
						|
	// Remote address can be HTTP/HTTPS/Git URL or local path.
 | 
						|
	if strings.HasPrefix(remoteAddr, "http://") ||
 | 
						|
		strings.HasPrefix(remoteAddr, "https://") ||
 | 
						|
		strings.HasPrefix(remoteAddr, "git://") {
 | 
						|
		u, err := url.Parse(remoteAddr)
 | 
						|
		if err != nil {
 | 
						|
			return "", 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
 | 
						|
}
 | 
						|
 | 
						|
type RepoSettingForm struct {
 | 
						|
	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
 | 
						|
	EnablePrune   bool
 | 
						|
 | 
						|
	// Advanced settings
 | 
						|
	EnableWiki            bool
 | 
						|
	EnableExternalWiki    bool
 | 
						|
	ExternalWikiURL       string
 | 
						|
	EnableIssues          bool
 | 
						|
	EnableExternalTracker bool
 | 
						|
	TrackerURLFormat      string
 | 
						|
	TrackerIssueStyle     string
 | 
						|
	EnablePulls           bool
 | 
						|
}
 | 
						|
 | 
						|
func (f *RepoSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
//  __      __      ___.   .__    .__            __
 | 
						|
// /  \    /  \ ____\_ |__ |  |__ |  |__   ____ |  | __
 | 
						|
// \   \/\/   // __ \| __ \|  |  \|  |  \ /  _ \|  |/ /
 | 
						|
//  \        /\  ___/| \_\ \   Y  \   Y  (  <_> )    <
 | 
						|
//   \__/\  /  \___  >___  /___|  /___|  /\____/|__|_ \
 | 
						|
//        \/       \/    \/     \/     \/            \/
 | 
						|
 | 
						|
type WebhookForm struct {
 | 
						|
	Events      string
 | 
						|
	Create      bool
 | 
						|
	Push        bool
 | 
						|
	PullRequest bool
 | 
						|
	Active      bool
 | 
						|
}
 | 
						|
 | 
						|
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"
 | 
						|
}
 | 
						|
 | 
						|
type NewWebhookForm struct {
 | 
						|
	PayloadURL  string `binding:"Required;Url"`
 | 
						|
	ContentType int    `binding:"Required"`
 | 
						|
	Secret      string
 | 
						|
	WebhookForm
 | 
						|
}
 | 
						|
 | 
						|
func (f *NewWebhookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
type NewSlackHookForm struct {
 | 
						|
	PayloadURL string `binding:"Required;Url"`
 | 
						|
	Channel    string `binding:"Required"`
 | 
						|
	Username   string
 | 
						|
	IconURL    string
 | 
						|
	Color      string
 | 
						|
	WebhookForm
 | 
						|
}
 | 
						|
 | 
						|
func (f *NewSlackHookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
// .___
 | 
						|
// |   | ______ ________ __   ____
 | 
						|
// |   |/  ___//  ___/  |  \_/ __ \
 | 
						|
// |   |\___ \ \___ \|  |  /\  ___/
 | 
						|
// |___/____  >____  >____/  \___  >
 | 
						|
//          \/     \/            \/
 | 
						|
 | 
						|
type CreateIssueForm struct {
 | 
						|
	Title       string `binding:"Required;MaxSize(255)"`
 | 
						|
	LabelIDs    string `form:"label_ids"`
 | 
						|
	MilestoneID int64
 | 
						|
	AssigneeID  int64
 | 
						|
	Content     string
 | 
						|
	Files       []string
 | 
						|
}
 | 
						|
 | 
						|
func (f *CreateIssueForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
type CreateCommentForm struct {
 | 
						|
	Content string
 | 
						|
	Status  string `binding:"OmitEmpty;In(reopen,close)"`
 | 
						|
	Files   []string
 | 
						|
}
 | 
						|
 | 
						|
func (f *CreateCommentForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
//    _____  .__.__                   __
 | 
						|
//   /     \ |__|  |   ____   _______/  |_  ____   ____   ____
 | 
						|
//  /  \ /  \|  |  | _/ __ \ /  ___/\   __\/  _ \ /    \_/ __ \
 | 
						|
// /    Y    \  |  |_\  ___/ \___ \  |  | (  <_> )   |  \  ___/
 | 
						|
// \____|__  /__|____/\___  >____  > |__|  \____/|___|  /\___  >
 | 
						|
//         \/             \/     \/                   \/     \/
 | 
						|
 | 
						|
type CreateMilestoneForm struct {
 | 
						|
	Title    string `binding:"Required;MaxSize(50)"`
 | 
						|
	Content  string
 | 
						|
	Deadline string
 | 
						|
}
 | 
						|
 | 
						|
func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
// .____          ___.          .__
 | 
						|
// |    |   _____ \_ |__   ____ |  |
 | 
						|
// |    |   \__  \ | __ \_/ __ \|  |
 | 
						|
// |    |___ / __ \| \_\ \  ___/|  |__
 | 
						|
// |_______ (____  /___  /\___  >____/
 | 
						|
//         \/    \/    \/     \/
 | 
						|
 | 
						|
type CreateLabelForm struct {
 | 
						|
	ID    int64
 | 
						|
	Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_name"`
 | 
						|
	Color string `binding:"Required;Size(7)" locale:"repo.issues.label_color"`
 | 
						|
}
 | 
						|
 | 
						|
func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
// __________       .__
 | 
						|
// \______   \ ____ |  |   ____ _____    ______ ____
 | 
						|
//  |       _// __ \|  | _/ __ \\__  \  /  ___// __ \
 | 
						|
//  |    |   \  ___/|  |_\  ___/ / __ \_\___ \\  ___/
 | 
						|
//  |____|_  /\___  >____/\___  >____  /____  >\___  >
 | 
						|
//         \/     \/          \/     \/     \/     \/
 | 
						|
 | 
						|
type NewReleaseForm struct {
 | 
						|
	TagName    string `binding:"Required"`
 | 
						|
	Target     string `form:"tag_target" binding:"Required"`
 | 
						|
	Title      string `binding:"Required"`
 | 
						|
	Content    string
 | 
						|
	Draft      string
 | 
						|
	Prerelease bool
 | 
						|
}
 | 
						|
 | 
						|
func (f *NewReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
type EditReleaseForm struct {
 | 
						|
	Title      string `form:"title" binding:"Required"`
 | 
						|
	Content    string `form:"content"`
 | 
						|
	Draft      string `form:"draft"`
 | 
						|
	Prerelease bool   `form:"prerelease"`
 | 
						|
}
 | 
						|
 | 
						|
func (f *EditReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
//  __      __.__ __   .__
 | 
						|
// /  \    /  \__|  | _|__|
 | 
						|
// \   \/\/   /  |  |/ /  |
 | 
						|
//  \        /|  |    <|  |
 | 
						|
//   \__/\  / |__|__|_ \__|
 | 
						|
//        \/          \/
 | 
						|
 | 
						|
type NewWikiForm struct {
 | 
						|
	OldTitle string
 | 
						|
	Title    string `binding:"Required"`
 | 
						|
	Content  string `binding:"Required"`
 | 
						|
	Message  string
 | 
						|
}
 | 
						|
 | 
						|
// 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)
 | 
						|
}
 | 
						|
 | 
						|
// ___________    .___.__  __
 | 
						|
// \_   _____/  __| _/|__|/  |_
 | 
						|
//  |    __)_  / __ | |  \   __\
 | 
						|
//  |        \/ /_/ | |  ||  |
 | 
						|
// /_______  /\____ | |__||__|
 | 
						|
//         \/      \/
 | 
						|
 | 
						|
type EditRepoFileForm struct {
 | 
						|
	TreeName      string `binding:"Required;MaxSize(500)"`
 | 
						|
	Content       string `binding:"Required"`
 | 
						|
	CommitSummary string `binding:"MaxSize(100)`
 | 
						|
	CommitMessage string
 | 
						|
	CommitChoice  string `binding:"Required;MaxSize(50)"`
 | 
						|
	NewBranchName string `binding:"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 {
 | 
						|
	TreeName      string `binding:MaxSize(500)"`
 | 
						|
	CommitSummary string `binding:"MaxSize(100)`
 | 
						|
	CommitMessage string
 | 
						|
	CommitChoice  string `binding:"Required;MaxSize(50)"`
 | 
						|
	NewBranchName string `binding:"AlphaDashDot;MaxSize(100)"`
 | 
						|
	Files         []string
 | 
						|
}
 | 
						|
 | 
						|
func (f *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 {
 | 
						|
	CommitSummary string `binding:"MaxSize(100)`
 | 
						|
}
 | 
						|
 | 
						|
func (f *DeleteRepoFileForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 | 
						|
 | 
						|
// __________                             .__
 | 
						|
// \______   \____________    ____   ____ |  |__
 | 
						|
//  |    |  _/\_  __ \__  \  /    \_/ ___\|  |  \
 | 
						|
//  |    |   \ |  | \// __ \|   |  \  \___|   Y  \
 | 
						|
//  |______  / |__|  (____  /___|  /\___  >___|  /
 | 
						|
//         \/             \/     \/     \/     \/
 | 
						|
type NewBranchForm struct {
 | 
						|
	OldBranchName string `binding:"Required;MaxSize(100)"`
 | 
						|
	BranchName    string `binding:"Required;MaxSize(100)"`
 | 
						|
}
 | 
						|
 | 
						|
func (f *NewBranchForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
						|
	return validate(errs, ctx.Data, f, ctx.Locale)
 | 
						|
}
 |