mirror of https://github.com/gogits/gogs.git
Lunny Xiao
11 years ago
58 changed files with 1829 additions and 342 deletions
@ -0,0 +1,49 @@ |
|||||||
|
# Contributing to Gogs |
||||||
|
|
||||||
|
Want to hack on Gogs? Awesome! Here are instructions to get you |
||||||
|
started. They are probably not perfect, please let us know if anything |
||||||
|
feels wrong or incomplete. |
||||||
|
|
||||||
|
## Contribution guidelines |
||||||
|
|
||||||
|
### Pull requests are always welcome |
||||||
|
|
||||||
|
We are always thrilled to receive pull requests, and do our best to |
||||||
|
process them as fast as possible. Not sure if that typo is worth a pull |
||||||
|
request? Do it! We will appreciate it. |
||||||
|
|
||||||
|
If your pull request is not accepted on the first try, don't be |
||||||
|
discouraged! If there's a problem with the implementation, hopefully you |
||||||
|
received feedback on what to improve. |
||||||
|
|
||||||
|
We're trying very hard to keep Gogs lean and focused. We don't want it |
||||||
|
to do everything for everybody. This means that we might decide against |
||||||
|
incorporating a new feature. |
||||||
|
|
||||||
|
### Discuss your design on the mailing list |
||||||
|
|
||||||
|
We recommend discussing your plans [on the mailing |
||||||
|
list](https://groups.google.com/forum/#!forum/gogits) |
||||||
|
before starting to code - especially for more ambitious contributions. |
||||||
|
This gives other contributors a chance to point you in the right |
||||||
|
direction, give feedback on your design, and maybe point out if someone |
||||||
|
else is working on the same thing. |
||||||
|
|
||||||
|
We may close your pull request if not first discussed on the mailing |
||||||
|
list. We aren't doing this to be jerks. We are doing this to prevent |
||||||
|
people from spending large amounts of time on changes that may need |
||||||
|
to be designed or architected in a specific way, or may not align with |
||||||
|
the vision of the project. |
||||||
|
|
||||||
|
### Create issues... |
||||||
|
|
||||||
|
Any significant improvement should be documented as [a GitHub |
||||||
|
issue](https://github.com/gogits/gogs/issues) before anybody |
||||||
|
starts working on it. |
||||||
|
|
||||||
|
### ...but check for existing issues first! |
||||||
|
|
||||||
|
Please take a moment to check that an issue doesn't already exist |
||||||
|
documenting your bug report or improvement proposal. If it does, it |
||||||
|
never hurts to add a quick "+1" or "I have this problem too". This will |
||||||
|
help prioritize the most common problems and requests. |
@ -0,0 +1,13 @@ |
|||||||
|
# Compiled Object files |
||||||
|
*.slo |
||||||
|
*.lo |
||||||
|
*.o |
||||||
|
|
||||||
|
# Compiled Dynamic libraries |
||||||
|
*.so |
||||||
|
*.dylib |
||||||
|
|
||||||
|
# Compiled Static libraries |
||||||
|
*.lai |
||||||
|
*.la |
||||||
|
*.a |
@ -0,0 +1,201 @@ |
|||||||
|
The Artistic License 2.0 |
||||||
|
|
||||||
|
Copyright (c) 2014 |
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies |
||||||
|
of this license document, but changing it is not allowed. |
||||||
|
|
||||||
|
Preamble |
||||||
|
|
||||||
|
This license establishes the terms under which a given free software |
||||||
|
Package may be copied, modified, distributed, and/or redistributed. |
||||||
|
The intent is that the Copyright Holder maintains some artistic |
||||||
|
control over the development of that Package while still keeping the |
||||||
|
Package available as open source and free software. |
||||||
|
|
||||||
|
You are always permitted to make arrangements wholly outside of this |
||||||
|
license directly with the Copyright Holder of a given Package. If the |
||||||
|
terms of this license do not permit the full use that you propose to |
||||||
|
make of the Package, you should contact the Copyright Holder and seek |
||||||
|
a different licensing arrangement. |
||||||
|
|
||||||
|
Definitions |
||||||
|
|
||||||
|
"Copyright Holder" means the individual(s) or organization(s) |
||||||
|
named in the copyright notice for the entire Package. |
||||||
|
|
||||||
|
"Contributor" means any party that has contributed code or other |
||||||
|
material to the Package, in accordance with the Copyright Holder's |
||||||
|
procedures. |
||||||
|
|
||||||
|
"You" and "your" means any person who would like to copy, |
||||||
|
distribute, or modify the Package. |
||||||
|
|
||||||
|
"Package" means the collection of files distributed by the |
||||||
|
Copyright Holder, and derivatives of that collection and/or of |
||||||
|
those files. A given Package may consist of either the Standard |
||||||
|
Version, or a Modified Version. |
||||||
|
|
||||||
|
"Distribute" means providing a copy of the Package or making it |
||||||
|
accessible to anyone else, or in the case of a company or |
||||||
|
organization, to others outside of your company or organization. |
||||||
|
|
||||||
|
"Distributor Fee" means any fee that you charge for Distributing |
||||||
|
this Package or providing support for this Package to another |
||||||
|
party. It does not mean licensing fees. |
||||||
|
|
||||||
|
"Standard Version" refers to the Package if it has not been |
||||||
|
modified, or has been modified only in ways explicitly requested |
||||||
|
by the Copyright Holder. |
||||||
|
|
||||||
|
"Modified Version" means the Package, if it has been changed, and |
||||||
|
such changes were not explicitly requested by the Copyright |
||||||
|
Holder. |
||||||
|
|
||||||
|
"Original License" means this Artistic License as Distributed with |
||||||
|
the Standard Version of the Package, in its current version or as |
||||||
|
it may be modified by The Perl Foundation in the future. |
||||||
|
|
||||||
|
"Source" form means the source code, documentation source, and |
||||||
|
configuration files for the Package. |
||||||
|
|
||||||
|
"Compiled" form means the compiled bytecode, object code, binary, |
||||||
|
or any other form resulting from mechanical transformation or |
||||||
|
translation of the Source form. |
||||||
|
|
||||||
|
|
||||||
|
Permission for Use and Modification Without Distribution |
||||||
|
|
||||||
|
(1) You are permitted to use the Standard Version and create and use |
||||||
|
Modified Versions for any purpose without restriction, provided that |
||||||
|
you do not Distribute the Modified Version. |
||||||
|
|
||||||
|
|
||||||
|
Permissions for Redistribution of the Standard Version |
||||||
|
|
||||||
|
(2) You may Distribute verbatim copies of the Source form of the |
||||||
|
Standard Version of this Package in any medium without restriction, |
||||||
|
either gratis or for a Distributor Fee, provided that you duplicate |
||||||
|
all of the original copyright notices and associated disclaimers. At |
||||||
|
your discretion, such verbatim copies may or may not include a |
||||||
|
Compiled form of the Package. |
||||||
|
|
||||||
|
(3) You may apply any bug fixes, portability changes, and other |
||||||
|
modifications made available from the Copyright Holder. The resulting |
||||||
|
Package will still be considered the Standard Version, and as such |
||||||
|
will be subject to the Original License. |
||||||
|
|
||||||
|
|
||||||
|
Distribution of Modified Versions of the Package as Source |
||||||
|
|
||||||
|
(4) You may Distribute your Modified Version as Source (either gratis |
||||||
|
or for a Distributor Fee, and with or without a Compiled form of the |
||||||
|
Modified Version) provided that you clearly document how it differs |
||||||
|
from the Standard Version, including, but not limited to, documenting |
||||||
|
any non-standard features, executables, or modules, and provided that |
||||||
|
you do at least ONE of the following: |
||||||
|
|
||||||
|
(a) make the Modified Version available to the Copyright Holder |
||||||
|
of the Standard Version, under the Original License, so that the |
||||||
|
Copyright Holder may include your modifications in the Standard |
||||||
|
Version. |
||||||
|
|
||||||
|
(b) ensure that installation of your Modified Version does not |
||||||
|
prevent the user installing or running the Standard Version. In |
||||||
|
addition, the Modified Version must bear a name that is different |
||||||
|
from the name of the Standard Version. |
||||||
|
|
||||||
|
(c) allow anyone who receives a copy of the Modified Version to |
||||||
|
make the Source form of the Modified Version available to others |
||||||
|
under |
||||||
|
|
||||||
|
(i) the Original License or |
||||||
|
|
||||||
|
(ii) a license that permits the licensee to freely copy, |
||||||
|
modify and redistribute the Modified Version using the same |
||||||
|
licensing terms that apply to the copy that the licensee |
||||||
|
received, and requires that the Source form of the Modified |
||||||
|
Version, and of any works derived from it, be made freely |
||||||
|
available in that license fees are prohibited but Distributor |
||||||
|
Fees are allowed. |
||||||
|
|
||||||
|
|
||||||
|
Distribution of Compiled Forms of the Standard Version |
||||||
|
or Modified Versions without the Source |
||||||
|
|
||||||
|
(5) You may Distribute Compiled forms of the Standard Version without |
||||||
|
the Source, provided that you include complete instructions on how to |
||||||
|
get the Source of the Standard Version. Such instructions must be |
||||||
|
valid at the time of your distribution. If these instructions, at any |
||||||
|
time while you are carrying out such distribution, become invalid, you |
||||||
|
must provide new instructions on demand or cease further distribution. |
||||||
|
If you provide valid instructions or cease distribution within thirty |
||||||
|
days after you become aware that the instructions are invalid, then |
||||||
|
you do not forfeit any of your rights under this license. |
||||||
|
|
||||||
|
(6) You may Distribute a Modified Version in Compiled form without |
||||||
|
the Source, provided that you comply with Section 4 with respect to |
||||||
|
the Source of the Modified Version. |
||||||
|
|
||||||
|
|
||||||
|
Aggregating or Linking the Package |
||||||
|
|
||||||
|
(7) You may aggregate the Package (either the Standard Version or |
||||||
|
Modified Version) with other packages and Distribute the resulting |
||||||
|
aggregation provided that you do not charge a licensing fee for the |
||||||
|
Package. Distributor Fees are permitted, and licensing fees for other |
||||||
|
components in the aggregation are permitted. The terms of this license |
||||||
|
apply to the use and Distribution of the Standard or Modified Versions |
||||||
|
as included in the aggregation. |
||||||
|
|
||||||
|
(8) You are permitted to link Modified and Standard Versions with |
||||||
|
other works, to embed the Package in a larger work of your own, or to |
||||||
|
build stand-alone binary or bytecode versions of applications that |
||||||
|
include the Package, and Distribute the result without restriction, |
||||||
|
provided the result does not expose a direct interface to the Package. |
||||||
|
|
||||||
|
|
||||||
|
Items That are Not Considered Part of a Modified Version |
||||||
|
|
||||||
|
(9) Works (including, but not limited to, modules and scripts) that |
||||||
|
merely extend or make use of the Package, do not, by themselves, cause |
||||||
|
the Package to be a Modified Version. In addition, such works are not |
||||||
|
considered parts of the Package itself, and are not subject to the |
||||||
|
terms of this license. |
||||||
|
|
||||||
|
|
||||||
|
General Provisions |
||||||
|
|
||||||
|
(10) Any use, modification, and distribution of the Standard or |
||||||
|
Modified Versions is governed by this Artistic License. By using, |
||||||
|
modifying or distributing the Package, you accept this license. Do not |
||||||
|
use, modify, or distribute the Package, if you do not accept this |
||||||
|
license. |
||||||
|
|
||||||
|
(11) If your Modified Version has been derived from a Modified |
||||||
|
Version made by someone other than you, you are nevertheless required |
||||||
|
to ensure that your Modified Version complies with the requirements of |
||||||
|
this license. |
||||||
|
|
||||||
|
(12) This license does not grant you the right to use any trademark, |
||||||
|
service mark, tradename, or logo of the Copyright Holder. |
||||||
|
|
||||||
|
(13) This license includes the non-exclusive, worldwide, |
||||||
|
free-of-charge patent license to make, have made, use, offer to sell, |
||||||
|
sell, import and otherwise transfer the Package with respect to any |
||||||
|
patent claims licensable by the Copyright Holder that are necessarily |
||||||
|
infringed by the Package. If you institute patent litigation |
||||||
|
(including a cross-claim or counterclaim) against any party alleging |
||||||
|
that the Package constitutes direct or contributory patent |
||||||
|
infringement, then this Artistic License to you shall terminate on the |
||||||
|
date that such litigation is filed. |
||||||
|
|
||||||
|
(14) Disclaimer of Warranty: |
||||||
|
THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS |
||||||
|
IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED |
||||||
|
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR |
||||||
|
NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL |
||||||
|
LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL |
||||||
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL |
||||||
|
DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF |
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1,19 @@ |
|||||||
|
// 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 models |
||||||
|
|
||||||
|
type Issue struct { |
||||||
|
Id int64 |
||||||
|
RepoId int64 `xorm:"index"` |
||||||
|
PosterId int64 |
||||||
|
} |
||||||
|
|
||||||
|
type PullRequest struct { |
||||||
|
Id int64 |
||||||
|
} |
||||||
|
|
||||||
|
type Comment struct { |
||||||
|
Id int64 |
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
// 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/http" |
||||||
|
"reflect" |
||||||
|
|
||||||
|
"github.com/codegangsta/martini" |
||||||
|
|
||||||
|
"github.com/gogits/binding" |
||||||
|
|
||||||
|
"github.com/gogits/gogs/modules/base" |
||||||
|
"github.com/gogits/gogs/modules/log" |
||||||
|
) |
||||||
|
|
||||||
|
type AdminEditUserForm struct { |
||||||
|
Email string `form:"email" binding:"Required;Email;MaxSize(50)"` |
||||||
|
Website string `form:"website" binding:"MaxSize(50)"` |
||||||
|
Location string `form:"location" binding:"MaxSize(50)"` |
||||||
|
Avatar string `form:"avatar" binding:"Required;Email;MaxSize(50)"` |
||||||
|
Active string `form:"active"` |
||||||
|
Admin string `form:"admin"` |
||||||
|
} |
||||||
|
|
||||||
|
func (f *AdminEditUserForm) Name(field string) string { |
||||||
|
names := map[string]string{ |
||||||
|
"Email": "E-mail address", |
||||||
|
"Website": "Website", |
||||||
|
"Location": "Location", |
||||||
|
"Avatar": "Gravatar Email", |
||||||
|
} |
||||||
|
return names[field] |
||||||
|
} |
||||||
|
|
||||||
|
func (f *AdminEditUserForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { |
||||||
|
if req.Method == "GET" || errors.Count() == 0 { |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) |
||||||
|
data["HasError"] = true |
||||||
|
AssignForm(f, data) |
||||||
|
|
||||||
|
if len(errors.Overall) > 0 { |
||||||
|
for _, err := range errors.Overall { |
||||||
|
log.Error("AdminEditUserForm.Validate: %v", err) |
||||||
|
} |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
validate(errors, data, f) |
||||||
|
} |
@ -0,0 +1,77 @@ |
|||||||
|
// 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 ( |
||||||
|
"strings" |
||||||
|
|
||||||
|
"github.com/codegangsta/martini" |
||||||
|
|
||||||
|
"github.com/gogits/gogs/models" |
||||||
|
"github.com/gogits/gogs/modules/base" |
||||||
|
"github.com/gogits/gogs/modules/middleware" |
||||||
|
) |
||||||
|
|
||||||
|
func Dashboard(ctx *middleware.Context) { |
||||||
|
ctx.Data["Title"] = "Admin Dashboard" |
||||||
|
ctx.Data["PageIsDashboard"] = true |
||||||
|
ctx.Data["Stats"] = models.GetStatistic() |
||||||
|
ctx.HTML(200, "admin/dashboard") |
||||||
|
} |
||||||
|
|
||||||
|
func Users(ctx *middleware.Context) { |
||||||
|
ctx.Data["Title"] = "User Management" |
||||||
|
ctx.Data["PageIsUsers"] = true |
||||||
|
|
||||||
|
var err error |
||||||
|
ctx.Data["Users"], err = models.GetUsers(100, 0) |
||||||
|
if err != nil { |
||||||
|
ctx.Handle(200, "admin.Users", err) |
||||||
|
return |
||||||
|
} |
||||||
|
ctx.HTML(200, "admin/users") |
||||||
|
} |
||||||
|
|
||||||
|
func Repositories(ctx *middleware.Context) { |
||||||
|
ctx.Data["Title"] = "Repository Management" |
||||||
|
ctx.Data["PageIsRepos"] = true |
||||||
|
|
||||||
|
var err error |
||||||
|
ctx.Data["Repos"], err = models.GetRepos(100, 0) |
||||||
|
if err != nil { |
||||||
|
ctx.Handle(200, "admin.Repositories", err) |
||||||
|
return |
||||||
|
} |
||||||
|
ctx.HTML(200, "admin/repos") |
||||||
|
} |
||||||
|
|
||||||
|
func Config(ctx *middleware.Context) { |
||||||
|
ctx.Data["Title"] = "Server Configuration" |
||||||
|
ctx.Data["PageIsConfig"] = true |
||||||
|
|
||||||
|
ctx.Data["AppUrl"] = base.AppUrl |
||||||
|
ctx.Data["Domain"] = base.Domain |
||||||
|
ctx.Data["RunUser"] = base.RunUser |
||||||
|
ctx.Data["RunMode"] = strings.Title(martini.Env) |
||||||
|
ctx.Data["RepoRootPath"] = base.RepoRootPath |
||||||
|
|
||||||
|
ctx.Data["Service"] = base.Service |
||||||
|
|
||||||
|
ctx.Data["DbCfg"] = models.DbCfg |
||||||
|
|
||||||
|
ctx.Data["MailerEnabled"] = false |
||||||
|
if base.MailService != nil { |
||||||
|
ctx.Data["MailerEnabled"] = true |
||||||
|
ctx.Data["Mailer"] = base.MailService |
||||||
|
} |
||||||
|
|
||||||
|
ctx.Data["CacheAdapter"] = base.CacheAdapter |
||||||
|
ctx.Data["CacheConfig"] = base.CacheConfig |
||||||
|
|
||||||
|
ctx.Data["LogMode"] = base.LogMode |
||||||
|
ctx.Data["LogConfig"] = base.LogConfig |
||||||
|
|
||||||
|
ctx.HTML(200, "admin/config") |
||||||
|
} |
@ -0,0 +1,109 @@ |
|||||||
|
// 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 ( |
||||||
|
"strings" |
||||||
|
|
||||||
|
"github.com/codegangsta/martini" |
||||||
|
|
||||||
|
"github.com/gogits/gogs/models" |
||||||
|
"github.com/gogits/gogs/modules/auth" |
||||||
|
"github.com/gogits/gogs/modules/base" |
||||||
|
"github.com/gogits/gogs/modules/log" |
||||||
|
"github.com/gogits/gogs/modules/middleware" |
||||||
|
) |
||||||
|
|
||||||
|
func NewUser(ctx *middleware.Context, form auth.RegisterForm) { |
||||||
|
ctx.Data["Title"] = "New Account" |
||||||
|
ctx.Data["PageIsUsers"] = true |
||||||
|
|
||||||
|
if ctx.Req.Method == "GET" { |
||||||
|
ctx.HTML(200, "admin/users/new") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
if form.Password != form.RetypePasswd { |
||||||
|
ctx.Data["HasError"] = true |
||||||
|
ctx.Data["Err_Password"] = true |
||||||
|
ctx.Data["Err_RetypePasswd"] = true |
||||||
|
ctx.Data["ErrorMsg"] = "Password and re-type password are not same" |
||||||
|
auth.AssignForm(form, ctx.Data) |
||||||
|
} |
||||||
|
|
||||||
|
if ctx.HasError() { |
||||||
|
ctx.HTML(200, "admin/users/new") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
u := &models.User{ |
||||||
|
Name: form.UserName, |
||||||
|
Email: form.Email, |
||||||
|
Passwd: form.Password, |
||||||
|
IsActive: true, |
||||||
|
} |
||||||
|
|
||||||
|
var err error |
||||||
|
if u, err = models.RegisterUser(u); err != nil { |
||||||
|
switch err { |
||||||
|
case models.ErrUserAlreadyExist: |
||||||
|
ctx.RenderWithErr("Username has been already taken", "admin/users/new", &form) |
||||||
|
case models.ErrEmailAlreadyUsed: |
||||||
|
ctx.RenderWithErr("E-mail address has been already used", "admin/users/new", &form) |
||||||
|
case models.ErrUserNameIllegal: |
||||||
|
ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), "admin/users/new", &form) |
||||||
|
default: |
||||||
|
ctx.Handle(200, "admin.user.NewUser", err) |
||||||
|
} |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
log.Trace("%s User created by admin(%s): %s", ctx.Req.RequestURI, |
||||||
|
ctx.User.LowerName, strings.ToLower(form.UserName)) |
||||||
|
|
||||||
|
ctx.Redirect("/admin/users") |
||||||
|
} |
||||||
|
|
||||||
|
func EditUser(ctx *middleware.Context, params martini.Params, form auth.AdminEditUserForm) { |
||||||
|
ctx.Data["Title"] = "Edit Account" |
||||||
|
ctx.Data["PageIsUsers"] = true |
||||||
|
|
||||||
|
uid, err := base.StrTo(params["userid"]).Int() |
||||||
|
if err != nil { |
||||||
|
ctx.Handle(200, "admin.user.EditUser", err) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
u, err := models.GetUserById(int64(uid)) |
||||||
|
if err != nil { |
||||||
|
ctx.Handle(200, "admin.user.EditUser", err) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
if ctx.Req.Method == "GET" { |
||||||
|
ctx.Data["User"] = u |
||||||
|
ctx.HTML(200, "admin/users/edit") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
u.Email = form.Email |
||||||
|
u.Website = form.Website |
||||||
|
u.Location = form.Location |
||||||
|
u.Avatar = base.EncodeMd5(form.Avatar) |
||||||
|
u.AvatarEmail = form.Avatar |
||||||
|
u.IsActive = form.Active == "on" |
||||||
|
u.IsAdmin = form.Admin == "on" |
||||||
|
if err := models.UpdateUser(u); err != nil { |
||||||
|
ctx.Handle(200, "admin.user.EditUser", err) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
ctx.Data["IsSuccess"] = true |
||||||
|
ctx.Data["User"] = u |
||||||
|
ctx.HTML(200, "admin/users/edit") |
||||||
|
|
||||||
|
log.Trace("%s User profile updated by admin(%s): %s", ctx.Req.RequestURI, |
||||||
|
ctx.User.LowerName, ctx.User.LowerName) |
||||||
|
} |
@ -0,0 +1,93 @@ |
|||||||
|
{{template "base/head" .}} |
||||||
|
{{template "base/navbar" .}} |
||||||
|
<div id="gogs-body" class="container" data-page="admin"> |
||||||
|
{{template "admin/nav" .}} |
||||||
|
<div id="gogs-admin-container" class="col-md-9"> |
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
Server Configuration |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
<div><b>Application Name:</b> {{AppName}}</div> |
||||||
|
<div><b>Application Version:</b> {{AppVer}}</div> |
||||||
|
<div><b>Application URL:</b> {{.AppUrl}}</div> |
||||||
|
<div><b>Domain:</b> {{.Domain}}</div> |
||||||
|
<hr/> |
||||||
|
<div><b>Run User:</b> {{.RunUser}}</div> |
||||||
|
<div><b>Run Mode:</b> {{.RunMode}}</div> |
||||||
|
<hr/> |
||||||
|
<div><b>Repository Root Path:</b> {{.RepoRootPath}}</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
Database Configuration |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
<div><b>Type:</b> {{.DbCfg.Type}}</div> |
||||||
|
<div><b>Host:</b> {{.DbCfg.Host}}</div> |
||||||
|
<div><b>Name:</b> {{.DbCfg.Name}}</div> |
||||||
|
<div><b>User:</b> {{.DbCfg.User}}</div> |
||||||
|
<div><b>SslMode:</b> {{.DbCfg.SslMode}} (for "postgres" only)</div> |
||||||
|
<div><b>Path:</b> {{.DbCfg.Path}} (for "sqlite3" only)</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
Service Configuration |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
<div><b>Register Email Confirmation:</b> <i class="fa fa{{if .Service.RegisterEmailConfirm}}-check{{end}}-square-o"></i></div> |
||||||
|
<div><b>Disenable Registeration:</b> <i class="fa fa{{if .Service.DisenableRegisteration}}-check{{end}}-square-o"></i></div> |
||||||
|
<div><b>Require Sign In View:</b> <i class="fa fa{{if .Service.RequireSignInView}}-check{{end}}-square-o"></i></div> |
||||||
|
<hr/> |
||||||
|
<div><b>Active Code Lives:</b> {{.Service.ActiveCodeLives}} minutes</div> |
||||||
|
<div><b>Reset Password Code Lives:</b> {{.Service.ResetPwdCodeLives}} minutes</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
Mailer Configuration |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
<div><b>Enabled:</b> <i class="fa fa{{if .MailerEnabled}}-check{{end}}-square-o"></i></div> |
||||||
|
<div><b>Name:</b> {{.Mailer.Name}}</div> |
||||||
|
<div><b>Host:</b> {{.Mailer.Host}}</div> |
||||||
|
<div><b>User:</b> {{.Mailer.User}}</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
Cache Configuration |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
<div><b>Cache Adapter:</b> {{.CacheAdapter}}</div> |
||||||
|
<div><b>Cache Config:</b></div> |
||||||
|
<div style="padding-top: 5px;"><pre>{{.CacheConfig}}</pre></div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
Log Configuration |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
<div><b>Log Mode:</b> {{.LogMode}}</div> |
||||||
|
<div><b>Log Config:</b></div> |
||||||
|
<div style="padding-top: 5px;"><pre>{{.LogConfig}}</pre></div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{{template "base/footer" .}} |
@ -0,0 +1,26 @@ |
|||||||
|
{{template "base/head" .}} |
||||||
|
{{template "base/navbar" .}} |
||||||
|
<div id="gogs-body" class="container" data-page="admin"> |
||||||
|
{{template "admin/nav" .}} |
||||||
|
<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 <b>{{.Stats.Counter.User}}</b> users, <b>{{.Stats.Counter.PublicKey}}</b> SSH keys, <b>{{.Stats.Counter.Repo}}</b> repositories, <b>{{.Stats.Counter.Watch}}</b> watches, <b>{{.Stats.Counter.Action}}</b> actions, and <b>{{.Stats.Counter.Access}}</b> accesses. |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
System Status |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{{template "base/footer" .}} |
@ -0,0 +1,8 @@ |
|||||||
|
<div id="gogs-user-setting-nav" class="col-md-3 gogs-admin-nav"> |
||||||
|
<ul class="list-group" data-init="tabs"> |
||||||
|
<li class="list-group-item{{if .PageIsDashboard}} active{{end}}"><a href="/admin"><i class="fa fa-tachometer fa-lg"></i> Dashboard</a></li> |
||||||
|
<li class="list-group-item{{if .PageIsUsers}} active{{end}}"><a href="/admin/users"><i class="fa fa-users fa-lg"></i> Users</a></li> |
||||||
|
<li class="list-group-item{{if .PageIsRepos}} active{{end}}"><a href="/admin/repos"><i class="fa fa-book fa-lg"></i> Repositories</a></li> |
||||||
|
<li class="list-group-item{{if .PageIsConfig}} active{{end}}"><a href="/admin/config"><i class="fa fa-cogs fa-lg"></i> Configuration</a></li> |
||||||
|
</ul> |
||||||
|
</div> |
@ -0,0 +1,42 @@ |
|||||||
|
{{template "base/head" .}} |
||||||
|
{{template "base/navbar" .}} |
||||||
|
<div id="gogs-body" class="container" data-page="admin"> |
||||||
|
{{template "admin/nav" .}} |
||||||
|
<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"> |
||||||
|
<table class="table table-striped"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>Id</th> |
||||||
|
<th>Owner</th> |
||||||
|
<th>Name</th> |
||||||
|
<th>Private</th> |
||||||
|
<th>Watches</th> |
||||||
|
<th>Forks</th> |
||||||
|
<th>Created</th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
{{range .Repos}} |
||||||
|
<tr> |
||||||
|
<td>{{.Id}}</td> |
||||||
|
<th>{{.UserName}}</th> |
||||||
|
<td><a href="/{{.UserName}}/{{.Name}}">{{.Name}}</a></td> |
||||||
|
<td><i class="fa fa{{if .Private}}-check{{end}}-square-o"></i></td> |
||||||
|
<td>{{.NumWatches}}</td> |
||||||
|
<td>{{.NumForks}}</td> |
||||||
|
<td>{{DateFormat .Created "M d, Y"}}</td> |
||||||
|
</tr> |
||||||
|
{{end}} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{{template "base/footer" .}} |
@ -0,0 +1,45 @@ |
|||||||
|
{{template "base/head" .}} |
||||||
|
{{template "base/navbar" .}} |
||||||
|
<div id="gogs-body" class="container" data-page="admin"> |
||||||
|
{{template "admin/nav" .}} |
||||||
|
<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"> |
||||||
|
<a href="/admin/users/new" class="btn btn-primary">New Account</a> |
||||||
|
<table class="table table-striped"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>Id</th> |
||||||
|
<th>Name</th> |
||||||
|
<th>E-mail</th> |
||||||
|
<th>Actived</th> |
||||||
|
<th>Admin</th> |
||||||
|
<th>Repos</th> |
||||||
|
<th>Join</th> |
||||||
|
<th>Edit</th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
{{range .Users}} |
||||||
|
<tr> |
||||||
|
<td>{{.Id}}</td> |
||||||
|
<td><a href="/user/{{.Name}}">{{.Name}}</a></td> |
||||||
|
<td>{{.Email}}</td> |
||||||
|
<td><i class="fa fa{{if .IsActive}}-check{{end}}-square-o"></i></td> |
||||||
|
<td><i class="fa fa{{if .IsAdmin}}-check{{end}}-square-o"></i></td> |
||||||
|
<td>{{.NumRepos}}</td> |
||||||
|
<td>{{DateFormat .Created "M d, Y"}}</td> |
||||||
|
<td><a href="/admin/users/{{.Id}}"><i class="fa fa-pencil-square-o"></i></a></td> |
||||||
|
</tr> |
||||||
|
{{end}} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{{template "base/footer" .}} |
@ -0,0 +1,83 @@ |
|||||||
|
{{template "base/head" .}} |
||||||
|
{{template "base/navbar" .}} |
||||||
|
<div id="gogs-body" class="container" data-page="admin"> |
||||||
|
{{template "admin/nav" .}} |
||||||
|
<div id="gogs-admin-container" class="col-md-9"> |
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
Edit Account |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
<br/> |
||||||
|
<form action="/admin/users/{{.User.Id}}" method="post" class="form-horizontal"> |
||||||
|
{{if .IsSuccess}}<p class="alert alert-success">Account profile has been successfully updated.</p>{{else if .HasError}}<p class="alert alert-danger form-error">{{.ErrorMsg}}</p>{{end}} |
||||||
|
<input type="hidden" value="{{.User.Id}}" name="userId"/> |
||||||
|
<div class="form-group"> |
||||||
|
<label class="col-md-3 control-label">Username: </label> |
||||||
|
<label class="control-label">{{.User.Name}}</label> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group {{if .Err_Email}}has-error has-feedback{{end}}"> |
||||||
|
<label class="col-md-3 control-label">Email<strong class="text-danger">*</strong></label> |
||||||
|
<div class="col-md-7"> |
||||||
|
<input name="email" class="form-control" placeholder="Type account's e-mail address" value="{{.User.Email}}" required="required"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group"> |
||||||
|
<label class="col-md-3 control-label">Website</label> |
||||||
|
<div class="col-md-7"> |
||||||
|
<input name="website" class="form-control" placeholder="Type account's website URL" value="{{.User.Website}}"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group"> |
||||||
|
<label class="col-md-3 control-label">Location</label> |
||||||
|
<div class="col-md-7"> |
||||||
|
<input name="location" class="form-control" placeholder="Type account's current location" value="{{.User.Location}}"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group {{if .Err_Avatar}}has-error has-feedback{{end}}"> |
||||||
|
<label class="col-md-3 control-label">Gravatar Email<strong class="text-danger">*</strong></label> |
||||||
|
<div class="col-md-7"> |
||||||
|
<input name="avatar" class="form-control" placeholder="Type account's Gravatar e-mail address" required="required" value="{{.User.AvatarEmail}}"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group"> |
||||||
|
<div class="col-md-7 col-md-offset-3"> |
||||||
|
<div class="checkbox"> |
||||||
|
<label> |
||||||
|
<input type="checkbox" name="active" {{if .User.IsActive}}checked{{end}}> |
||||||
|
<strong>This account has activated</strong> |
||||||
|
</label> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group"> |
||||||
|
<div class="col-md-7 col-md-offset-3"> |
||||||
|
<div class="checkbox"> |
||||||
|
<label> |
||||||
|
<input type="checkbox" name="admin" {{if .User.IsAdmin}}checked{{end}}> |
||||||
|
<strong>This account has administor permisson</strong> |
||||||
|
</label> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<hr/> |
||||||
|
<div class="form-group"> |
||||||
|
<div class="col-md-offset-3 col-md-6"> |
||||||
|
<button type="submit" class="btn btn-lg btn-primary btn-block">Update account profile</button> |
||||||
|
<!-- <a type="button" href="/admin/users/{{.User.Id}}/delete" class="btn btn-lg btn-danger btn-block">Delete this account</a> --> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</form> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{{template "base/footer" .}} |
@ -0,0 +1,54 @@ |
|||||||
|
{{template "base/head" .}} |
||||||
|
{{template "base/navbar" .}} |
||||||
|
<div id="gogs-body" class="container" data-page="admin"> |
||||||
|
{{template "admin/nav" .}} |
||||||
|
<div id="gogs-admin-container" class="col-md-9"> |
||||||
|
<div class="panel panel-default"> |
||||||
|
<div class="panel-heading"> |
||||||
|
New Account |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="panel-body"> |
||||||
|
<br/> |
||||||
|
<form action="/admin/users/new" method="post" class="form-horizontal"> |
||||||
|
<div class="alert alert-danger form-error{{if .HasError}}{{else}} hidden{{end}}">{{.ErrorMsg}}</div> |
||||||
|
<div class="form-group {{if .Err_UserName}}has-error has-feedback{{end}}"> |
||||||
|
<label class="col-md-3 control-label">Username: </label> |
||||||
|
<div class="col-md-7"> |
||||||
|
<input name="username" class="form-control" placeholder="Type account's username" value="{{.username}}" required="required"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group {{if .Err_Email}}has-error has-feedback{{end}}"> |
||||||
|
<label class="col-md-3 control-label">Email: </label> |
||||||
|
<div class="col-md-7"> |
||||||
|
<input name="email" class="form-control" placeholder="Type account's e-mail address" value="{{.email}}" required="required" title="Email is not valid"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group {{if .Err_Password}}has-error has-feedback{{end}}"> |
||||||
|
<label class="col-md-3 control-label">Password: </label> |
||||||
|
<div class="col-md-7"> |
||||||
|
<input name="passwd" type="password" class="form-control" placeholder="Type account's password" required="required" title="Password must contain at least 6 characters"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="form-group {{if .Err_RetypePasswd}}has-error has-feedback{{end}}"> |
||||||
|
<label class="col-md-3 control-label">Re-type: </label> |
||||||
|
<div class="col-md-7"> |
||||||
|
<input name="retypepasswd" type="password" class="form-control" placeholder="Re-type account's password" required="required" title="Re-type Password must be same to Password"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<hr/> |
||||||
|
<div class="form-group"> |
||||||
|
<div class="col-md-offset-3 col-md-7"> |
||||||
|
<button type="submit" class="btn btn-lg btn-primary">Create new account</button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</form> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{{template "base/footer" .}} |
@ -0,0 +1,31 @@ |
|||||||
|
<div class="panel panel-default guide-box clone-group-btn"> |
||||||
|
<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-link="{{.CloneLink.SSH}}" type="button">SSH</button> |
||||||
|
<button class="btn btn-default" data-link="{{.CloneLink.HTTPS}}" type="button">HTTPS</button> |
||||||
|
</span> |
||||||
|
<input type="text" class="form-control clone-group-url" 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> |
Loading…
Reference in new issue