commit
17da2fd2e3
@ -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