mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +00: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
		
	
			
		
			
				
	
	
		
			359 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			359 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)
 | |
| }
 |