mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Merge branch 'master' of github.com:gogits/gogs
Conflicts: public/js/app.js
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -6,3 +6,5 @@ gogs
 | 
				
			|||||||
*.log
 | 
					*.log
 | 
				
			||||||
custom/
 | 
					custom/
 | 
				
			||||||
.vendor/
 | 
					.vendor/
 | 
				
			||||||
 | 
					.idea/
 | 
				
			||||||
 | 
					*.iml
 | 
				
			||||||
@@ -16,6 +16,7 @@ There are some very good products in this category such as [gitlab](http://gitla
 | 
				
			|||||||
- Please see [Wiki](https://github.com/gogits/gogs/wiki) for project design, develop specification, change log and road map.
 | 
					- Please see [Wiki](https://github.com/gogits/gogs/wiki) for project design, develop specification, change log and road map.
 | 
				
			||||||
- See [Trello Broad](https://trello.com/b/uxAoeLUl/gogs-go-git-service) to follow the develop team.
 | 
					- See [Trello Broad](https://trello.com/b/uxAoeLUl/gogs-go-git-service) to follow the develop team.
 | 
				
			||||||
- Try it before anything? Go down to **Installation -> Install from binary** section!.
 | 
					- Try it before anything? Go down to **Installation -> Install from binary** section!.
 | 
				
			||||||
 | 
					- Having troubles? Get help from [Troubleshooting](https://github.com/gogits/gogs/wiki/Troubleshooting).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Features
 | 
					## Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,6 +51,7 @@ type User struct {
 | 
				
			|||||||
	Location      string
 | 
						Location      string
 | 
				
			||||||
	Website       string
 | 
						Website       string
 | 
				
			||||||
	IsActive      bool
 | 
						IsActive      bool
 | 
				
			||||||
 | 
						IsAdmin       bool
 | 
				
			||||||
	Rands         string    `xorm:"VARCHAR(10)"`
 | 
						Rands         string    `xorm:"VARCHAR(10)"`
 | 
				
			||||||
	Created       time.Time `xorm:"created"`
 | 
						Created       time.Time `xorm:"created"`
 | 
				
			||||||
	Updated       time.Time `xorm:"updated"`
 | 
						Updated       time.Time `xorm:"updated"`
 | 
				
			||||||
@@ -136,7 +137,13 @@ func RegisterUser(user *User) (*User, error) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return user, nil
 | 
					
 | 
				
			||||||
 | 
						if user.Id == 1 {
 | 
				
			||||||
 | 
							user.IsAdmin = true
 | 
				
			||||||
 | 
							user.IsActive = true
 | 
				
			||||||
 | 
							_, err = orm.Id(user.Id).UseBool().Update(user)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return user, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// get user by erify code
 | 
					// get user by erify code
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,11 +57,11 @@ func processMailQueue() {
 | 
				
			|||||||
					info = ", info: " + msg.Info
 | 
										info = ", info: " + msg.Info
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				log.Error(fmt.Sprintf("Async sent email %d succeed, not send emails: %s%s err: %s", num, tos, info, err))
 | 
									log.Error(fmt.Sprintf("Async sent email %d succeed, not send emails: %s%s err: %s", num, tos, info, err))
 | 
				
			||||||
				return
 | 
								} else {
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
				log.Trace(fmt.Sprintf("Async sent email %d succeed, sent emails: %s%s", num, tos, info))
 | 
									log.Trace(fmt.Sprintf("Async sent email %d succeed, sent emails: %s%s", num, tos, info))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Direct Send mail message
 | 
					// Direct Send mail message
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ func SignInRequire(redirect bool) martini.Handler {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		} else if !ctx.User.IsActive && base.Service.RegisterEmailConfirm {
 | 
							} else if !ctx.User.IsActive && base.Service.RegisterEmailConfirm {
 | 
				
			||||||
			ctx.Data["Title"] = "Activate Your Account"
 | 
								ctx.Data["Title"] = "Activate Your Account"
 | 
				
			||||||
			ctx.Render.HTML(200, "user/active", ctx.Data)
 | 
								ctx.HTML(200, "user/active")
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -31,6 +31,18 @@ func SignOutRequire() martini.Handler {
 | 
				
			|||||||
	return func(ctx *Context) {
 | 
						return func(ctx *Context) {
 | 
				
			||||||
		if ctx.IsSigned {
 | 
							if ctx.IsSigned {
 | 
				
			||||||
			ctx.Redirect("/")
 | 
								ctx.Redirect("/")
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// AdminRequire requires user signed in as administor.
 | 
				
			||||||
 | 
					func AdminRequire() martini.Handler {
 | 
				
			||||||
 | 
						return func(ctx *Context) {
 | 
				
			||||||
 | 
							if !ctx.User.IsAdmin {
 | 
				
			||||||
 | 
								ctx.Error(403)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							ctx.Data["PageIsAdmin"] = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,24 +61,29 @@ func (ctx *Context) HasError() bool {
 | 
				
			|||||||
	return hasErr.(bool)
 | 
						return hasErr.(bool)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// HTML calls render.HTML underlying but reduce one argument.
 | 
				
			||||||
 | 
					func (ctx *Context) HTML(status int, name string, htmlOpt ...HTMLOptions) {
 | 
				
			||||||
 | 
						ctx.Render.HTML(status, name, ctx.Data, htmlOpt...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RenderWithErr used for page has form validation but need to prompt error to users.
 | 
					// RenderWithErr used for page has form validation but need to prompt error to users.
 | 
				
			||||||
func (ctx *Context) RenderWithErr(msg, tpl string, form auth.Form) {
 | 
					func (ctx *Context) RenderWithErr(msg, tpl string, form auth.Form) {
 | 
				
			||||||
	ctx.Data["HasError"] = true
 | 
						ctx.Data["HasError"] = true
 | 
				
			||||||
	ctx.Data["ErrorMsg"] = msg
 | 
						ctx.Data["ErrorMsg"] = msg
 | 
				
			||||||
	auth.AssignForm(form, ctx.Data)
 | 
						auth.AssignForm(form, ctx.Data)
 | 
				
			||||||
	ctx.HTML(200, tpl, ctx.Data)
 | 
						ctx.HTML(200, tpl)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Handle handles and logs error by given status.
 | 
					// Handle handles and logs error by given status.
 | 
				
			||||||
func (ctx *Context) Handle(status int, title string, err error) {
 | 
					func (ctx *Context) Handle(status int, title string, err error) {
 | 
				
			||||||
	log.Error("%s: %v", title, err)
 | 
						log.Error("%s: %v", title, err)
 | 
				
			||||||
	if martini.Dev == martini.Prod {
 | 
						if martini.Dev == martini.Prod {
 | 
				
			||||||
		ctx.HTML(500, "status/500", ctx.Data)
 | 
							ctx.HTML(500, "status/500")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["ErrorMsg"] = err
 | 
						ctx.Data["ErrorMsg"] = err
 | 
				
			||||||
	ctx.HTML(status, fmt.Sprintf("status/%d", status), ctx.Data)
 | 
						ctx.HTML(status, fmt.Sprintf("status/%d", status))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// InitContext initializes a classic context for a request.
 | 
					// InitContext initializes a classic context for a request.
 | 
				
			||||||
@@ -106,6 +111,7 @@ func InitContext() martini.Handler {
 | 
				
			|||||||
			ctx.Data["SignedUser"] = user
 | 
								ctx.Data["SignedUser"] = user
 | 
				
			||||||
			ctx.Data["SignedUserId"] = user.Id
 | 
								ctx.Data["SignedUserId"] = user.Id
 | 
				
			||||||
			ctx.Data["SignedUserName"] = user.LowerName
 | 
								ctx.Data["SignedUserName"] = user.LowerName
 | 
				
			||||||
 | 
								ctx.Data["IsAdmin"] = ctx.User.IsAdmin
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ctx.Data["PageStartTime"] = time.Now()
 | 
							ctx.Data["PageStartTime"] = time.Now()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,9 +65,12 @@ func RepoAssignment(redirect bool) martini.Handler {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ctx.Repo.IsValid = true
 | 
							ctx.Repo.IsValid = true
 | 
				
			||||||
 | 
							if ctx.User != nil {
 | 
				
			||||||
			ctx.Repo.IsWatching = models.IsWatching(ctx.User.Id, repo.Id)
 | 
								ctx.Repo.IsWatching = models.IsWatching(ctx.User.Id, repo.Id)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		ctx.Repo.Repository = repo
 | 
							ctx.Repo.Repository = repo
 | 
				
			||||||
		ctx.Repo.CloneLink.SSH = fmt.Sprintf("git@%s:%s/%s.git", base.Domain, ctx.User.LowerName, repo.LowerName)
 | 
							ctx.Repo.CloneLink.SSH = fmt.Sprintf("git@%s:%s/%s.git", base.Domain, user.LowerName, repo.LowerName)
 | 
				
			||||||
 | 
							ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("https://%s/%s/%s.git", base.Domain, user.LowerName, repo.LowerName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ctx.Data["IsRepositoryValid"] = true
 | 
							ctx.Data["IsRepositoryValid"] = true
 | 
				
			||||||
		ctx.Data["Repository"] = repo
 | 
							ctx.Data["Repository"] = repo
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -644,7 +644,19 @@ html, body {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.file-content .file-body {
 | 
					.file-content .file-body {
 | 
				
			||||||
    padding: 30px 30px 50px;
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    border: none;
 | 
				
			||||||
 | 
					    background-color: #FFF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.file-content .file-body pre {
 | 
				
			||||||
 | 
					    background-color: #FFF;
 | 
				
			||||||
 | 
					    border: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.file-content .markdown > pre > ol.linenums > li:first-child {
 | 
				
			||||||
 | 
					    padding-top: 0;
 | 
				
			||||||
 | 
					    margin-top: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.file-content .file-body.file-code {
 | 
					.file-content .file-body.file-code {
 | 
				
			||||||
@@ -732,6 +744,24 @@ html, body {
 | 
				
			|||||||
    background-color: #FFF;
 | 
					    background-color: #FFF;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.commit-list .date {
 | 
				
			||||||
 | 
					    width: 120px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.guide-box pre, .guide-box .input-group {
 | 
				
			||||||
 | 
					    margin-top: 20px;
 | 
				
			||||||
 | 
					    margin-bottom: 30px;
 | 
				
			||||||
 | 
					    line-height: 24px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.guide-box input[readonly] {
 | 
				
			||||||
 | 
					    background-color: #FFF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.guide-box {
 | 
				
			||||||
 | 
					    margin-top: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* wrapper and footer */
 | 
					/* wrapper and footer */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#wrapper {
 | 
					#wrapper {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,15 +41,15 @@ var Gogits = {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    Gogits.initPopovers = function () {
 | 
					    Gogits.initPopovers = function () {
 | 
				
			||||||
        var hideAllPopovers = function() {
 | 
					        var hideAllPopovers = function () {
 | 
				
			||||||
           $('[data-toggle=popover]').each(function() {
 | 
					            $('[data-toggle=popover]').each(function () {
 | 
				
			||||||
                $(this).popover('hide');
 | 
					                $(this).popover('hide');
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $(document).on('click', function(e) {
 | 
					        $(document).on('click', function (e) {
 | 
				
			||||||
            var $e = $(e.target);
 | 
					            var $e = $(e.target);
 | 
				
			||||||
            if($e.data('toggle') == 'popover'||$e.parents("[data-toggle=popover], .popover").length > 0){
 | 
					            if ($e.data('toggle') == 'popover' || $e.parents("[data-toggle=popover], .popover").length > 0) {
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            hideAllPopovers();
 | 
					            hideAllPopovers();
 | 
				
			||||||
@@ -161,6 +161,23 @@ function initUserSetting() {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function initRepository() {
 | 
				
			||||||
 | 
					    var $guide = $('.guide-box');
 | 
				
			||||||
 | 
					    if ($guide.length) {
 | 
				
			||||||
 | 
					        var $url = $('#guide-clone-url');
 | 
				
			||||||
 | 
					        $guide.find('button[data-url]').on("click",function () {
 | 
				
			||||||
 | 
					            var $this = $(this);
 | 
				
			||||||
 | 
					            if (!$this.hasClass('btn-primary')) {
 | 
				
			||||||
 | 
					                $guide.find('.btn-primary').removeClass('btn-primary').addClass("btn-default");
 | 
				
			||||||
 | 
					                $(this).addClass('btn-primary').removeClass('btn-default');
 | 
				
			||||||
 | 
					                $url.val($this.data("url"));
 | 
				
			||||||
 | 
					                $guide.find('span.clone-url').text($this.data('url'));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }).eq(0).trigger("click");
 | 
				
			||||||
 | 
					        // todo copy to clipboard
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(function ($) {
 | 
					(function ($) {
 | 
				
			||||||
    $(function () {
 | 
					    $(function () {
 | 
				
			||||||
        initCore();
 | 
					        initCore();
 | 
				
			||||||
@@ -171,5 +188,8 @@ function initUserSetting() {
 | 
				
			|||||||
        if (body.data("page") == "user") {
 | 
					        if (body.data("page") == "user") {
 | 
				
			||||||
            initUserSetting();
 | 
					            initUserSetting();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if ($('.gogs-repo-nav').length) {
 | 
				
			||||||
 | 
					            initRepository();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
})(jQuery);
 | 
					})(jQuery);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								routers/admin/admin.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								routers/admin/admin.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					// 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 admin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/gogits/gogs/modules/middleware"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Dashboard(ctx *middleware.Context) {
 | 
				
			||||||
 | 
						ctx.Data["Title"] = "Admin Dashboard"
 | 
				
			||||||
 | 
						ctx.HTML(200, "admin/dashboard")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Users(ctx *middleware.Context) {
 | 
				
			||||||
 | 
						ctx.Data["Title"] = "User Management"
 | 
				
			||||||
 | 
						ctx.HTML(200, "admin/users")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Repositories(ctx *middleware.Context) {
 | 
				
			||||||
 | 
						ctx.Data["Title"] = "Repository Management"
 | 
				
			||||||
 | 
						ctx.HTML(200, "admin/repos")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -15,10 +15,10 @@ func Home(ctx *middleware.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["PageIsHome"] = true
 | 
						ctx.Data["PageIsHome"] = true
 | 
				
			||||||
	ctx.HTML(200, "home", ctx.Data)
 | 
						ctx.HTML(200, "home")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Help(ctx *middleware.Context) {
 | 
					func Help(ctx *middleware.Context) {
 | 
				
			||||||
	ctx.Data["PageIsHelp"] = true
 | 
						ctx.Data["PageIsHelp"] = true
 | 
				
			||||||
	ctx.HTML(200, "help", ctx.Data)
 | 
						ctx.HTML(200, "help")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,5 +21,5 @@ func TemplatePreview(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
	ctx.Data["Code"] = "2014031910370000009fff6782aadb2162b4a997acb69d4400888e0b9274657374"
 | 
						ctx.Data["Code"] = "2014031910370000009fff6782aadb2162b4a997acb69d4400888e0b9274657374"
 | 
				
			||||||
	ctx.Data["ActiveCodeLives"] = base.Service.ActiveCodeLives / 60
 | 
						ctx.Data["ActiveCodeLives"] = base.Service.ActiveCodeLives / 60
 | 
				
			||||||
	ctx.Data["ResetPwdCodeLives"] = base.Service.ResetPwdCodeLives / 60
 | 
						ctx.Data["ResetPwdCodeLives"] = base.Service.ResetPwdCodeLives / 60
 | 
				
			||||||
	ctx.HTML(200, params["_1"], ctx.Data)
 | 
						ctx.HTML(200, params["_1"])
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) {
 | 
				
			|||||||
	ctx.Data["Licenses"] = models.Licenses
 | 
						ctx.Data["Licenses"] = models.Licenses
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Req.Method == "GET" {
 | 
						if ctx.Req.Method == "GET" {
 | 
				
			||||||
		ctx.HTML(200, "repo/create", ctx.Data)
 | 
							ctx.HTML(200, "repo/create")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -45,7 +45,7 @@ func SettingPost(ctx *middleware.Context) {
 | 
				
			|||||||
	case "delete":
 | 
						case "delete":
 | 
				
			||||||
		if len(ctx.Repo.Repository.Name) == 0 || ctx.Repo.Repository.Name != ctx.Query("repository") {
 | 
							if len(ctx.Repo.Repository.Name) == 0 || ctx.Repo.Repository.Name != ctx.Query("repository") {
 | 
				
			||||||
			ctx.Data["ErrorMsg"] = "Please make sure you entered repository name is correct."
 | 
								ctx.Data["ErrorMsg"] = "Please make sure you entered repository name is correct."
 | 
				
			||||||
			ctx.HTML(200, "repo/setting", ctx.Data)
 | 
								ctx.HTML(200, "repo/setting")
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ func Branches(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
	ctx.Data["Branches"] = brs
 | 
						ctx.Data["Branches"] = brs
 | 
				
			||||||
	ctx.Data["IsRepoToolbarBranches"] = true
 | 
						ctx.Data["IsRepoToolbarBranches"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(200, "repo/branches", ctx.Data)
 | 
						ctx.HTML(200, "repo/branches")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Single(ctx *middleware.Context, params martini.Params) {
 | 
					func Single(ctx *middleware.Context, params martini.Params) {
 | 
				
			||||||
@@ -59,6 +59,8 @@ func Single(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.Data["IsRepoToolbarSource"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Branches.
 | 
						// Branches.
 | 
				
			||||||
	brs, err := models.GetBranches(params["username"], params["reponame"])
 | 
						brs, err := models.GetBranches(params["username"], params["reponame"])
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -67,7 +69,7 @@ func Single(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	} else if len(brs) == 0 {
 | 
						} else if len(brs) == 0 {
 | 
				
			||||||
		ctx.Data["IsBareRepo"] = true
 | 
							ctx.Data["IsBareRepo"] = true
 | 
				
			||||||
		ctx.HTML(200, "repo/single", ctx.Data)
 | 
							ctx.HTML(200, "repo/single")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -175,9 +177,8 @@ func Single(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Paths"] = Paths
 | 
						ctx.Data["Paths"] = Paths
 | 
				
			||||||
	ctx.Data["Treenames"] = treenames
 | 
						ctx.Data["Treenames"] = treenames
 | 
				
			||||||
	ctx.Data["IsRepoToolbarSource"] = true
 | 
					 | 
				
			||||||
	ctx.Data["BranchLink"] = branchLink
 | 
						ctx.Data["BranchLink"] = branchLink
 | 
				
			||||||
	ctx.HTML(200, "repo/single", ctx.Data)
 | 
						ctx.HTML(200, "repo/single")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Setting(ctx *middleware.Context, params martini.Params) {
 | 
					func Setting(ctx *middleware.Context, params martini.Params) {
 | 
				
			||||||
@@ -186,6 +187,8 @@ func Setting(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.Data["IsRepoToolbarSetting"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Branches.
 | 
						// Branches.
 | 
				
			||||||
	brs, err := models.GetBranches(params["username"], params["reponame"])
 | 
						brs, err := models.GetBranches(params["username"], params["reponame"])
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -194,7 +197,7 @@ func Setting(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	} else if len(brs) == 0 {
 | 
						} else if len(brs) == 0 {
 | 
				
			||||||
		ctx.Data["IsBareRepo"] = true
 | 
							ctx.Data["IsBareRepo"] = true
 | 
				
			||||||
		ctx.HTML(200, "repo/setting", ctx.Data)
 | 
							ctx.HTML(200, "repo/setting")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -204,8 +207,7 @@ func Setting(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Title"] = title + " - settings"
 | 
						ctx.Data["Title"] = title + " - settings"
 | 
				
			||||||
	ctx.Data["IsRepoToolbarSetting"] = true
 | 
						ctx.HTML(200, "repo/setting")
 | 
				
			||||||
	ctx.HTML(200, "repo/setting", ctx.Data)
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Commits(ctx *middleware.Context, params martini.Params) {
 | 
					func Commits(ctx *middleware.Context, params martini.Params) {
 | 
				
			||||||
@@ -229,17 +231,17 @@ func Commits(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
	ctx.Data["Reponame"] = params["reponame"]
 | 
						ctx.Data["Reponame"] = params["reponame"]
 | 
				
			||||||
	ctx.Data["CommitCount"] = commits.Len()
 | 
						ctx.Data["CommitCount"] = commits.Len()
 | 
				
			||||||
	ctx.Data["Commits"] = commits
 | 
						ctx.Data["Commits"] = commits
 | 
				
			||||||
	ctx.HTML(200, "repo/commits", ctx.Data)
 | 
						ctx.HTML(200, "repo/commits")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Issues(ctx *middleware.Context) {
 | 
					func Issues(ctx *middleware.Context) {
 | 
				
			||||||
	ctx.Data["IsRepoToolbarIssues"] = true
 | 
						ctx.Data["IsRepoToolbarIssues"] = true
 | 
				
			||||||
	ctx.HTML(200, "repo/issues", ctx.Data)
 | 
						ctx.HTML(200, "repo/issues")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Pulls(ctx *middleware.Context) {
 | 
					func Pulls(ctx *middleware.Context) {
 | 
				
			||||||
	ctx.Data["IsRepoToolbarPulls"] = true
 | 
						ctx.Data["IsRepoToolbarPulls"] = true
 | 
				
			||||||
	ctx.HTML(200, "repo/pulls", ctx.Data)
 | 
						ctx.HTML(200, "repo/pulls")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Action(ctx *middleware.Context, params martini.Params) {
 | 
					func Action(ctx *middleware.Context, params martini.Params) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,13 +24,13 @@ func Setting(ctx *middleware.Context, form auth.UpdateProfileForm) {
 | 
				
			|||||||
	ctx.Data["Owner"] = user
 | 
						ctx.Data["Owner"] = user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Req.Method == "GET" {
 | 
						if ctx.Req.Method == "GET" {
 | 
				
			||||||
		ctx.HTML(200, "user/setting", ctx.Data)
 | 
							ctx.HTML(200, "user/setting")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// below is for POST requests
 | 
						// below is for POST requests
 | 
				
			||||||
	if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) {
 | 
						if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) {
 | 
				
			||||||
		ctx.HTML(200, "user/setting", ctx.Data)
 | 
							ctx.HTML(200, "user/setting")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -45,7 +45,7 @@ func Setting(ctx *middleware.Context, form auth.UpdateProfileForm) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["IsSuccess"] = true
 | 
						ctx.Data["IsSuccess"] = true
 | 
				
			||||||
	ctx.HTML(200, "user/setting", ctx.Data)
 | 
						ctx.HTML(200, "user/setting")
 | 
				
			||||||
	log.Trace("%s User setting updated: %s", ctx.Req.RequestURI, ctx.User.LowerName)
 | 
						log.Trace("%s User setting updated: %s", ctx.Req.RequestURI, ctx.User.LowerName)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -55,7 +55,7 @@ func SettingPassword(ctx *middleware.Context, form auth.UpdatePasswdForm) {
 | 
				
			|||||||
	ctx.Data["IsUserPageSettingPasswd"] = true
 | 
						ctx.Data["IsUserPageSettingPasswd"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Req.Method == "GET" {
 | 
						if ctx.Req.Method == "GET" {
 | 
				
			||||||
		ctx.HTML(200, "user/password", ctx.Data)
 | 
							ctx.HTML(200, "user/password")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,7 +82,7 @@ func SettingPassword(ctx *middleware.Context, form auth.UpdatePasswdForm) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Owner"] = user
 | 
						ctx.Data["Owner"] = user
 | 
				
			||||||
	ctx.HTML(200, "user/password", ctx.Data)
 | 
						ctx.HTML(200, "user/password")
 | 
				
			||||||
	log.Trace("%s User password updated: %s", ctx.Req.RequestURI, ctx.User.LowerName)
 | 
						log.Trace("%s User password updated: %s", ctx.Req.RequestURI, ctx.User.LowerName)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -123,7 +123,7 @@ func SettingSSHKeys(ctx *middleware.Context, form auth.AddSSHKeyForm) {
 | 
				
			|||||||
	// Add new SSH key.
 | 
						// Add new SSH key.
 | 
				
			||||||
	if ctx.Req.Method == "POST" {
 | 
						if ctx.Req.Method == "POST" {
 | 
				
			||||||
		if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) {
 | 
							if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) {
 | 
				
			||||||
			ctx.HTML(200, "user/publickey", ctx.Data)
 | 
								ctx.HTML(200, "user/publickey")
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -155,7 +155,7 @@ func SettingSSHKeys(ctx *middleware.Context, form auth.AddSSHKeyForm) {
 | 
				
			|||||||
	ctx.Data["PageIsUserSetting"] = true
 | 
						ctx.Data["PageIsUserSetting"] = true
 | 
				
			||||||
	ctx.Data["IsUserPageSettingSSH"] = true
 | 
						ctx.Data["IsUserPageSettingSSH"] = true
 | 
				
			||||||
	ctx.Data["Keys"] = keys
 | 
						ctx.Data["Keys"] = keys
 | 
				
			||||||
	ctx.HTML(200, "user/publickey", ctx.Data)
 | 
						ctx.HTML(200, "user/publickey")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SettingNotification(ctx *middleware.Context) {
 | 
					func SettingNotification(ctx *middleware.Context) {
 | 
				
			||||||
@@ -163,7 +163,7 @@ func SettingNotification(ctx *middleware.Context) {
 | 
				
			|||||||
	ctx.Data["Title"] = "Notification"
 | 
						ctx.Data["Title"] = "Notification"
 | 
				
			||||||
	ctx.Data["PageIsUserSetting"] = true
 | 
						ctx.Data["PageIsUserSetting"] = true
 | 
				
			||||||
	ctx.Data["IsUserPageSettingNotify"] = true
 | 
						ctx.Data["IsUserPageSettingNotify"] = true
 | 
				
			||||||
	ctx.HTML(200, "user/notification", ctx.Data)
 | 
						ctx.HTML(200, "user/notification")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SettingSecurity(ctx *middleware.Context) {
 | 
					func SettingSecurity(ctx *middleware.Context) {
 | 
				
			||||||
@@ -171,5 +171,5 @@ func SettingSecurity(ctx *middleware.Context) {
 | 
				
			|||||||
	ctx.Data["Title"] = "Security"
 | 
						ctx.Data["Title"] = "Security"
 | 
				
			||||||
	ctx.Data["PageIsUserSetting"] = true
 | 
						ctx.Data["PageIsUserSetting"] = true
 | 
				
			||||||
	ctx.Data["IsUserPageSettingSecurity"] = true
 | 
						ctx.Data["IsUserPageSettingSecurity"] = true
 | 
				
			||||||
	ctx.HTML(200, "user/security", ctx.Data)
 | 
						ctx.HTML(200, "user/security")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ func Dashboard(ctx *middleware.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["Feeds"] = feeds
 | 
						ctx.Data["Feeds"] = feeds
 | 
				
			||||||
	ctx.HTML(200, "user/dashboard", ctx.Data)
 | 
						ctx.HTML(200, "user/dashboard")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Profile(ctx *middleware.Context, params martini.Params) {
 | 
					func Profile(ctx *middleware.Context, params martini.Params) {
 | 
				
			||||||
@@ -70,19 +70,19 @@ func Profile(ctx *middleware.Context, params martini.Params) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["PageIsUserProfile"] = true
 | 
						ctx.Data["PageIsUserProfile"] = true
 | 
				
			||||||
	ctx.HTML(200, "user/profile", ctx.Data)
 | 
						ctx.HTML(200, "user/profile")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SignIn(ctx *middleware.Context, form auth.LogInForm) {
 | 
					func SignIn(ctx *middleware.Context, form auth.LogInForm) {
 | 
				
			||||||
	ctx.Data["Title"] = "Log In"
 | 
						ctx.Data["Title"] = "Log In"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Req.Method == "GET" {
 | 
						if ctx.Req.Method == "GET" {
 | 
				
			||||||
		ctx.HTML(200, "user/signin", ctx.Data)
 | 
							ctx.HTML(200, "user/signin")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) {
 | 
						if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) {
 | 
				
			||||||
		ctx.HTML(200, "user/signin", ctx.Data)
 | 
							ctx.HTML(200, "user/signin")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -113,7 +113,7 @@ func SignUp(ctx *middleware.Context, form auth.RegisterForm) {
 | 
				
			|||||||
	ctx.Data["PageIsSignUp"] = true
 | 
						ctx.Data["PageIsSignUp"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Req.Method == "GET" {
 | 
						if ctx.Req.Method == "GET" {
 | 
				
			||||||
		ctx.HTML(200, "user/signup", ctx.Data)
 | 
							ctx.HTML(200, "user/signup")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -126,7 +126,7 @@ func SignUp(ctx *middleware.Context, form auth.RegisterForm) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.HasError() {
 | 
						if ctx.HasError() {
 | 
				
			||||||
		ctx.HTML(200, "user/signup", ctx.Data)
 | 
							ctx.HTML(200, "user/signup")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -153,12 +153,12 @@ func SignUp(ctx *middleware.Context, form auth.RegisterForm) {
 | 
				
			|||||||
	log.Trace("%s User created: %s", ctx.Req.RequestURI, strings.ToLower(form.UserName))
 | 
						log.Trace("%s User created: %s", ctx.Req.RequestURI, strings.ToLower(form.UserName))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Send confirmation e-mail.
 | 
						// Send confirmation e-mail.
 | 
				
			||||||
	if base.Service.RegisterEmailConfirm {
 | 
						if base.Service.RegisterEmailConfirm && u.Id > 1 {
 | 
				
			||||||
		mailer.SendRegisterMail(ctx.Render, u)
 | 
							mailer.SendRegisterMail(ctx.Render, u)
 | 
				
			||||||
		ctx.Data["IsSendRegisterMail"] = true
 | 
							ctx.Data["IsSendRegisterMail"] = true
 | 
				
			||||||
		ctx.Data["Email"] = u.Email
 | 
							ctx.Data["Email"] = u.Email
 | 
				
			||||||
		ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60
 | 
							ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60
 | 
				
			||||||
		ctx.Render.HTML(200, "user/active", ctx.Data)
 | 
							ctx.HTML(200, "user/active")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Redirect("/user/login")
 | 
						ctx.Redirect("/user/login")
 | 
				
			||||||
@@ -170,7 +170,7 @@ func Delete(ctx *middleware.Context) {
 | 
				
			|||||||
	ctx.Data["IsUserPageSettingDelete"] = true
 | 
						ctx.Data["IsUserPageSettingDelete"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Req.Method == "GET" {
 | 
						if ctx.Req.Method == "GET" {
 | 
				
			||||||
		ctx.HTML(200, "user/delete", ctx.Data)
 | 
							ctx.HTML(200, "user/delete")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -195,7 +195,7 @@ func Delete(ctx *middleware.Context) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(200, "user/delete", ctx.Data)
 | 
						ctx.HTML(200, "user/delete")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -218,21 +218,25 @@ func Feeds(ctx *middleware.Context, form auth.FeedsForm) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Issues(ctx *middleware.Context) {
 | 
					func Issues(ctx *middleware.Context) {
 | 
				
			||||||
	ctx.HTML(200, "user/issues", ctx.Data)
 | 
						ctx.HTML(200, "user/issues")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Pulls(ctx *middleware.Context) {
 | 
					func Pulls(ctx *middleware.Context) {
 | 
				
			||||||
	ctx.HTML(200, "user/pulls", ctx.Data)
 | 
						ctx.HTML(200, "user/pulls")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Stars(ctx *middleware.Context) {
 | 
					func Stars(ctx *middleware.Context) {
 | 
				
			||||||
	ctx.HTML(200, "user/stars", ctx.Data)
 | 
						ctx.HTML(200, "user/stars")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Activate(ctx *middleware.Context) {
 | 
					func Activate(ctx *middleware.Context) {
 | 
				
			||||||
	code := ctx.Query("code")
 | 
						code := ctx.Query("code")
 | 
				
			||||||
	if len(code) == 0 {
 | 
						if len(code) == 0 {
 | 
				
			||||||
		ctx.Data["IsActivatePage"] = true
 | 
							ctx.Data["IsActivatePage"] = true
 | 
				
			||||||
 | 
							if ctx.User.IsActive {
 | 
				
			||||||
 | 
								ctx.Error(404)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		// Resend confirmation e-mail.
 | 
							// Resend confirmation e-mail.
 | 
				
			||||||
		if base.Service.RegisterEmailConfirm {
 | 
							if base.Service.RegisterEmailConfirm {
 | 
				
			||||||
			ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60
 | 
								ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60
 | 
				
			||||||
@@ -240,7 +244,7 @@ func Activate(ctx *middleware.Context) {
 | 
				
			|||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			ctx.Data["ServiceNotEnabled"] = true
 | 
								ctx.Data["ServiceNotEnabled"] = true
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx.Render.HTML(200, "user/active", ctx.Data)
 | 
							ctx.HTML(200, "user/active")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -259,5 +263,5 @@ func Activate(ctx *middleware.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["IsActivateFailed"] = true
 | 
						ctx.Data["IsActivateFailed"] = true
 | 
				
			||||||
	ctx.Render.HTML(200, "user/active", ctx.Data)
 | 
						ctx.HTML(200, "user/active")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								templates/admin/dashboard.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								templates/admin/dashboard.tmpl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					{{template "base/head" .}}
 | 
				
			||||||
 | 
					{{template "base/navbar" .}}
 | 
				
			||||||
 | 
					<div id="gogs-body" class="container" data-page="admin">
 | 
				
			||||||
 | 
					    <div id="gogs-user-setting-nav" class="col-md-3">
 | 
				
			||||||
 | 
					        <ul class="list-group" data-init="tabs">
 | 
				
			||||||
 | 
					            <li class="list-group-item active"><a href="/admin"><i class="fa fa-tachometer fa-lg"></i> Dashboard</a></li>
 | 
				
			||||||
 | 
					            <li class="list-group-item"><a href="/admin/users"><i class="fa fa-users fa-lg"></i> Users</a></li>
 | 
				
			||||||
 | 
					            <li class="list-group-item"><a href="/admin/repos"><i class="fa fa-book fa-lg"></i> Repositories</a></li>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div id="gogs-admin-container" class="col-md-9">
 | 
				
			||||||
 | 
					        <div class="panel panel-default">
 | 
				
			||||||
 | 
					            <div class="panel-heading">
 | 
				
			||||||
 | 
					                Statistic
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="panel-body">
 | 
				
			||||||
 | 
					                Gogs database has 4 users, 3 repositories, 4 SSH keys.
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
							
								
								
									
										23
									
								
								templates/admin/repos.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								templates/admin/repos.tmpl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					{{template "base/head" .}}
 | 
				
			||||||
 | 
					{{template "base/navbar" .}}
 | 
				
			||||||
 | 
					<div id="gogs-body" class="container" data-page="admin">
 | 
				
			||||||
 | 
					    <div id="gogs-user-setting-nav" class="col-md-3">
 | 
				
			||||||
 | 
					        <ul class="list-group" data-init="tabs">
 | 
				
			||||||
 | 
					            <li class="list-group-item"><a href="/admin"><i class="fa fa-tachometer fa-lg"></i> Dashboard</a></li>
 | 
				
			||||||
 | 
					            <li class="list-group-item"><a href="/admin/users"><i class="fa fa-users fa-lg"></i> Users</a></li>
 | 
				
			||||||
 | 
					            <li class="list-group-item active"><a href="/admin/repos"><i class="fa fa-book fa-lg"></i> Repositories</a></li>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div id="gogs-admin-container" class="col-md-9">
 | 
				
			||||||
 | 
					        <div class="panel panel-default">
 | 
				
			||||||
 | 
					            <div class="panel-heading">
 | 
				
			||||||
 | 
					                Repository Management
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="panel-body">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
							
								
								
									
										23
									
								
								templates/admin/users.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								templates/admin/users.tmpl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					{{template "base/head" .}}
 | 
				
			||||||
 | 
					{{template "base/navbar" .}}
 | 
				
			||||||
 | 
					<div id="gogs-body" class="container" data-page="admin">
 | 
				
			||||||
 | 
					    <div id="gogs-user-setting-nav" class="col-md-3">
 | 
				
			||||||
 | 
					        <ul class="list-group" data-init="tabs">
 | 
				
			||||||
 | 
					            <li class="list-group-item"><a href="/admin"><i class="fa fa-tachometer fa-lg"></i> Dashboard</a></li>
 | 
				
			||||||
 | 
					            <li class="list-group-item active"><a href="/admin/users"><i class="fa fa-users fa-lg"></i> Users</a></li>
 | 
				
			||||||
 | 
					            <li class="list-group-item"><a href="/admin/repos"><i class="fa fa-book fa-lg"></i> Repositories</a></li>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div id="gogs-admin-container" class="col-md-9">
 | 
				
			||||||
 | 
					        <div class="panel panel-default">
 | 
				
			||||||
 | 
					            <div class="panel-heading">
 | 
				
			||||||
 | 
					                User Management
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="panel-body">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
@@ -10,6 +10,7 @@
 | 
				
			|||||||
            </a>
 | 
					            </a>
 | 
				
			||||||
            <a class="navbar-right gogs-nav-item{{if .PageIsNewRepo}} active{{end}}" href="/repo/create" data-toggle="tooltip" data-placement="bottom" title="New Repository"><i class="fa fa-plus fa-lg"></i></a>
 | 
					            <a class="navbar-right gogs-nav-item{{if .PageIsNewRepo}} active{{end}}" href="/repo/create" data-toggle="tooltip" data-placement="bottom" title="New Repository"><i class="fa fa-plus fa-lg"></i></a>
 | 
				
			||||||
            <a class="navbar-right gogs-nav-item{{if .PageIsUserSetting}} active{{end}}" href="/user/setting"  data-toggle="tooltip" data-placement="bottom" title="Setting"><i class="fa fa-cogs fa-lg"></i></a>
 | 
					            <a class="navbar-right gogs-nav-item{{if .PageIsUserSetting}} active{{end}}" href="/user/setting"  data-toggle="tooltip" data-placement="bottom" title="Setting"><i class="fa fa-cogs fa-lg"></i></a>
 | 
				
			||||||
 | 
					            {{if .IsAdmin}}<a class="navbar-right gogs-nav-item{{if .PageIsAdmin}} active{{end}}" href="/admin"  data-toggle="tooltip" data-placement="bottom" title="Admin"><i class="fa fa-gear fa-lg"></i></a>{{end}}
 | 
				
			||||||
            {{else}}<a id="gogs-nav-signin" class="gogs-nav-item navbar-right navbar-btn btn btn-danger" href="/user/login/">Sign in</a>{{end}}
 | 
					            {{else}}<a id="gogs-nav-signin" class="gogs-nav-item navbar-right navbar-btn btn btn-danger" href="/user/login/">Sign in</a>{{end}}
 | 
				
			||||||
        </nav>
 | 
					        </nav>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,20 +10,24 @@
 | 
				
			|||||||
            <li class="list-group-item"><a href="#">Notifications</a></li>-->
 | 
					            <li class="list-group-item"><a href="#">Notifications</a></li>-->
 | 
				
			||||||
        </ul>
 | 
					        </ul>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <div id="gogs-repo-setting-container" class="col-md-9">
 | 
					    <div id="gogs-repo-setting-container" class="col-md-9">
 | 
				
			||||||
        {{if .ErrorMsg}}<p class="alert alert-danger">{{.ErrorMsg}}</p>{{end}}
 | 
					        {{if .ErrorMsg}}<p class="alert alert-danger">{{.ErrorMsg}}</p>{{end}}
 | 
				
			||||||
        <div class="panel panel-default">
 | 
					        <div class="panel panel-default">
 | 
				
			||||||
            <div class="panel-heading">
 | 
					            <div class="panel-heading">
 | 
				
			||||||
                Repository Options
 | 
					                Repository Options
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="panel-body">
 | 
					            <div class="panel-body">
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="panel panel-warning">
 | 
					        <div class="panel panel-warning">
 | 
				
			||||||
            <div class="panel-heading">
 | 
					            <div class="panel-heading">
 | 
				
			||||||
                Danger Zone
 | 
					                Danger Zone
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            <div class="panel-body">
 | 
					            <div class="panel-body">
 | 
				
			||||||
                <button type="button" class="btn btn-default pull-right" href="#delete-repository-modal" data-toggle="modal">
 | 
					                <button type="button" class="btn btn-default pull-right" href="#delete-repository-modal" data-toggle="modal">
 | 
				
			||||||
                    Delete this repository
 | 
					                    Delete this repository
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
<div id="gogs-body" class="container">
 | 
					<div id="gogs-body" class="container">
 | 
				
			||||||
    <div id="gogs-source">
 | 
					    <div id="gogs-source">
 | 
				
			||||||
        {{if .IsBareRepo}}
 | 
					        {{if .IsBareRepo}}
 | 
				
			||||||
        Need to fill in some guide.
 | 
					        {{template "repo/single_bare" .}}
 | 
				
			||||||
        {{else}}
 | 
					        {{else}}
 | 
				
			||||||
        <div class="source-toolbar">
 | 
					        <div class="source-toolbar">
 | 
				
			||||||
            {{ $n := len .Treenames}}
 | 
					            {{ $n := len .Treenames}}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								templates/repo/single_bare.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								templates/repo/single_bare.tmpl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					<div class="panel panel-default guide-box">
 | 
				
			||||||
 | 
					    <div class="panel-heading guide-head">
 | 
				
			||||||
 | 
					        <h4>Quick Guide</h4>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="panel-body guide-content text-center">
 | 
				
			||||||
 | 
					        <h3>Clone this repository</h3>
 | 
				
			||||||
 | 
					        <div class="input-group col-md-8 col-md-offset-2 guide-buttons">
 | 
				
			||||||
 | 
					            <span class="input-group-btn">
 | 
				
			||||||
 | 
					                <button class="btn btn-default" data-url="{{.CloneLink.SSH}}" type="button">SSH</button>
 | 
				
			||||||
 | 
					                <button class="btn btn-default" data-url="{{.CloneLink.HTTPS}}" type="button">HTTPS</button>
 | 
				
			||||||
 | 
					            </span>
 | 
				
			||||||
 | 
					            <input type="text" class="form-control" id="guide-clone-url" value="" readonly/>
 | 
				
			||||||
 | 
					            <span class="input-group-btn">
 | 
				
			||||||
 | 
					                <button class="btn btn-default" type="button"><i class="fa fa-copy" data-toggle="tooltip" title="copy to clipboard" data-placement="top"></i></button>
 | 
				
			||||||
 | 
					            </span>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <p>We recommend every repository include a <strong>README</strong>, <strong>LICENSE</strong>, and <strong>.gitignore</strong>.</p>
 | 
				
			||||||
 | 
					        <hr/>
 | 
				
			||||||
 | 
					        <h3>Create a new repository on the command line</h3>
 | 
				
			||||||
 | 
					            <pre class="text-left"><code>touch README.md
 | 
				
			||||||
 | 
					git init
 | 
				
			||||||
 | 
					git add README.md
 | 
				
			||||||
 | 
					git commit -m "first commit"
 | 
				
			||||||
 | 
					git remote add origin <span class="clone-url"></span>
 | 
				
			||||||
 | 
					git push -u origin master</code></pre>
 | 
				
			||||||
 | 
					        <hr/>
 | 
				
			||||||
 | 
					        <h3>Push an existing repository from the command line</h3>
 | 
				
			||||||
 | 
					        <pre class="text-left"><code>git remote add origin <span class="clone-url"></span>
 | 
				
			||||||
 | 
					git push -u origin master</code></pre>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
@@ -15,9 +15,8 @@
 | 
				
			|||||||
                            <li><a href="/{{.RepositoryLink}}/release">Release</a></li>
 | 
					                            <li><a href="/{{.RepositoryLink}}/release">Release</a></li>
 | 
				
			||||||
                            <li><a href="//{{.RepositoryLink}}/wiki">Wiki</a></li>
 | 
					                            <li><a href="//{{.RepositoryLink}}/wiki">Wiki</a></li>
 | 
				
			||||||
                        </ul>
 | 
					                        </ul>
 | 
				
			||||||
                    </li>
 | 
					                    </li>{{end}}
 | 
				
			||||||
                </ul>
 | 
					                </ul>
 | 
				
			||||||
                {{end}}
 | 
					 | 
				
			||||||
                <ul class="nav navbar-nav navbar-right">
 | 
					                <ul class="nav navbar-nav navbar-right">
 | 
				
			||||||
                    {{if not .IsBareRepo}}
 | 
					                    {{if not .IsBareRepo}}
 | 
				
			||||||
                    <li class="dropdown">
 | 
					                    <li class="dropdown">
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								web.go
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								web.go
									
									
									
									
									
								
							@@ -21,6 +21,7 @@ import (
 | 
				
			|||||||
	"github.com/gogits/gogs/modules/log"
 | 
						"github.com/gogits/gogs/modules/log"
 | 
				
			||||||
	"github.com/gogits/gogs/modules/middleware"
 | 
						"github.com/gogits/gogs/modules/middleware"
 | 
				
			||||||
	"github.com/gogits/gogs/routers"
 | 
						"github.com/gogits/gogs/routers"
 | 
				
			||||||
 | 
						"github.com/gogits/gogs/routers/admin"
 | 
				
			||||||
	"github.com/gogits/gogs/routers/dev"
 | 
						"github.com/gogits/gogs/routers/dev"
 | 
				
			||||||
	"github.com/gogits/gogs/routers/repo"
 | 
						"github.com/gogits/gogs/routers/repo"
 | 
				
			||||||
	"github.com/gogits/gogs/routers/user"
 | 
						"github.com/gogits/gogs/routers/user"
 | 
				
			||||||
@@ -99,6 +100,11 @@ func runWeb(*cli.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	m.Get("/help", routers.Help)
 | 
						m.Get("/help", routers.Help)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						adminReq := middleware.AdminRequire()
 | 
				
			||||||
 | 
						m.Any("/admin", reqSignIn, adminReq, admin.Dashboard)
 | 
				
			||||||
 | 
						m.Any("/admin/users", reqSignIn, adminReq, admin.Users)
 | 
				
			||||||
 | 
						m.Any("/admin/repos", reqSignIn, adminReq, admin.Repositories)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.Post("/:username/:reponame/settings", reqSignIn, middleware.RepoAssignment(true), repo.SettingPost)
 | 
						m.Post("/:username/:reponame/settings", reqSignIn, middleware.RepoAssignment(true), repo.SettingPost)
 | 
				
			||||||
	m.Get("/:username/:reponame/settings", reqSignIn, middleware.RepoAssignment(true), repo.Setting)
 | 
						m.Get("/:username/:reponame/settings", reqSignIn, middleware.RepoAssignment(true), repo.Setting)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user