Merge branch 'dev' of github.com:gogits/gogs into dev
This commit is contained in:
commit
79ec08141a
12 changed files with 98 additions and 21 deletions
|
@ -2,5 +2,4 @@ language: go
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- 1.2
|
- 1.2
|
||||||
- 1.3
|
- 1.3
|
||||||
- tip
|
|
|
@ -5,7 +5,7 @@ Gogs(Go Git Service) is a painless self-hosted Git Service written in Go.
|
||||||
|
|
||||||
![Demo](https://gowalker.org/public/gogs_demo.gif)
|
![Demo](https://gowalker.org/public/gogs_demo.gif)
|
||||||
|
|
||||||
##### Current version: 0.5.2 Beta
|
##### Current version: 0.5.3 Beta
|
||||||
|
|
||||||
### NOTICES
|
### NOTICES
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务。
|
||||||
|
|
||||||
![Demo](https://gowalker.org/public/gogs_demo.gif)
|
![Demo](https://gowalker.org/public/gogs_demo.gif)
|
||||||
|
|
||||||
##### 当前版本:0.5.2 Beta
|
##### 当前版本:0.5.3 Beta
|
||||||
|
|
||||||
## 开发目的
|
## 开发目的
|
||||||
|
|
||||||
|
|
16
cmd/web.go
16
cmd/web.go
|
@ -97,9 +97,10 @@ func newMacaron() *macaron.Macaron {
|
||||||
Config: *setting.SessionConfig,
|
Config: *setting.SessionConfig,
|
||||||
}))
|
}))
|
||||||
m.Use(csrf.Generate(csrf.Options{
|
m.Use(csrf.Generate(csrf.Options{
|
||||||
Secret: setting.SecretKey,
|
Secret: setting.SecretKey,
|
||||||
SetCookie: true,
|
SetCookie: true,
|
||||||
Header: "X-Csrf-Token",
|
Header: "X-Csrf-Token",
|
||||||
|
CookiePath: setting.AppSubUrl,
|
||||||
}))
|
}))
|
||||||
m.Use(toolbox.Toolboxer(m, toolbox.Options{
|
m.Use(toolbox.Toolboxer(m, toolbox.Options{
|
||||||
HealthCheckFuncs: []*toolbox.HealthCheckFuncDesc{
|
HealthCheckFuncs: []*toolbox.HealthCheckFuncDesc{
|
||||||
|
@ -363,6 +364,15 @@ func runWeb(*cli.Context) {
|
||||||
r.Any("/:reponame/*", ignSignInAndCsrf, repo.Http)
|
r.Any("/:reponame/*", ignSignInAndCsrf, repo.Http)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// robots.txt
|
||||||
|
m.Get("/robots.txt", func(ctx *middleware.Context) {
|
||||||
|
if setting.HasRobotsTxt {
|
||||||
|
ctx.ServeFile(path.Join(setting.CustomPath, "robots.txt"))
|
||||||
|
} else {
|
||||||
|
ctx.Error(404)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// Not found handler.
|
// Not found handler.
|
||||||
m.NotFound(routers.NotFound)
|
m.NotFound(routers.NotFound)
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,50 @@ issues = Issues
|
||||||
|
|
||||||
cancel = Abbrechen
|
cancel = Abbrechen
|
||||||
|
|
||||||
|
[install]
|
||||||
|
install = Installation
|
||||||
|
title = Installation für erstmaligen Start
|
||||||
|
requite_db_desc = Gogs erfordert MySQL, PostgreSQL oder SQLite 3, aber SQLite3 ist in der offiziellen binären Version akiviert.
|
||||||
|
db_type = Datenbanktyp
|
||||||
|
host = Host
|
||||||
|
user = Benutzer
|
||||||
|
password = Passwort
|
||||||
|
db_name = Datenbankname
|
||||||
|
db_helper = Bitte verwenden InnoDB-Engine mit utf8_general_ci Zeichensatz für MySQL.
|
||||||
|
ssl_mode = SSL-Modus
|
||||||
|
path = Pfad
|
||||||
|
sqlite_helper = Der Dateipfad des SQLite3 Datenbank.
|
||||||
|
general_title = Allgemeine Einstellungen von Gogs
|
||||||
|
repo_path = Repository Root-Verzeichnispfad
|
||||||
|
repo_path_helper = Alle Git-Repositorys werden in diesem Verzeichnis gespeichert.
|
||||||
|
run_user = Ausführender Benutzer
|
||||||
|
run_user_helper = Der Benutzer muss die Zugriffsberechtigung für das Repository Root-Verzeichnis haben und der ausführende Benutzer von Gogs sein.
|
||||||
|
domain = Domain
|
||||||
|
domain_helper = Dies hat Auswirkung auf die SSH clone URLs.
|
||||||
|
app_url = Anwendungs-URL
|
||||||
|
app_url_helper = Dies hat Auswirkung auf die HTTP/HTTPS clone URLs und für die E-Mails.
|
||||||
|
email_title = E-Mail-Service-Einstellungen(Optional)
|
||||||
|
smtp_host = SMTP Host
|
||||||
|
mailer_user = Sender E-mail
|
||||||
|
mailer_password = Sender Passwort
|
||||||
|
notify_title = Benachrichtigungseinstellungen(Optional)
|
||||||
|
register_confirm = Registrierungsbestätigung aktvieren
|
||||||
|
mail_notify = E-Mail-Benachrichtgung aktivieren
|
||||||
|
admin_title = Konto-Einstellungen für den Administrator
|
||||||
|
admin_name = Benutzername
|
||||||
|
admin_password = Passwort
|
||||||
|
confirm_password = Passwort bestätigen
|
||||||
|
admin_email = E-Mail
|
||||||
|
install_gogs = Gogs installieren
|
||||||
|
test_git_failed = Fehler beim Test des 'git' Kommandos: %v
|
||||||
|
sqlite3_not_available = Deine Version unterstüzt nicht SQLite3, bitte downloade dir die offiziele binäre Version von http://gogs.io/docs/installation/install_from_binary.html, NICHT die gobuild Version.
|
||||||
|
invalid_db_setting = Datenbank-Einstellungen sind nicht korrekt: %v
|
||||||
|
invalid_repo_path = Repository Root-Verzeichnis ist ungültig: %v
|
||||||
|
run_user_not_match = Der ausführende Benutzer ist nicht der aktuelle Benutzer: %s -> %s
|
||||||
|
save_config_failed = Versuche die Konfiguration zu speichern ist fehlgeschlagen: %v
|
||||||
|
invalid_admin_setting = Admin-Konto Einstellungen sind ungültig: %v
|
||||||
|
install_success = Herzlich Willkommen! Wir sind froh, dass du dich für Gogs entschieden hast. Hab viel Vergnügen damit.
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder = Benutzername oder E-Mail
|
uname_holder = Benutzername oder E-Mail
|
||||||
password_holder = Passwort
|
password_holder = Passwort
|
||||||
|
@ -47,6 +91,9 @@ collaborative_repos = Gemeinschaftliche Repositorys
|
||||||
my_orgs = Meine Organisationen
|
my_orgs = Meine Organisationen
|
||||||
my_mirrors = Meine Spiegel
|
my_mirrors = Meine Spiegel
|
||||||
|
|
||||||
|
[explore]
|
||||||
|
repos = Repositories
|
||||||
|
|
||||||
[auth]
|
[auth]
|
||||||
create_new_account = Neues Konto erstellen
|
create_new_account = Neues Konto erstellen
|
||||||
register_hepler_msg = Du hast schon ein Konto? Jetzt anmelden!
|
register_hepler_msg = Du hast schon ein Konto? Jetzt anmelden!
|
||||||
|
@ -81,6 +128,7 @@ HttpsUrl = HTTPS-URL
|
||||||
PayloadUrl = Payload-URL
|
PayloadUrl = Payload-URL
|
||||||
TeamName = Teamname
|
TeamName = Teamname
|
||||||
AuthName = Authentifizierungsname
|
AuthName = Authentifizierungsname
|
||||||
|
AdminEmail = Admin E-mail
|
||||||
|
|
||||||
require_error = ` darf nicht leer sein.`
|
require_error = ` darf nicht leer sein.`
|
||||||
alpha_dash_error = ` kann ausschließlich alphanumerische Zeichen und "-_" enthalten.`
|
alpha_dash_error = ` kann ausschließlich alphanumerische Zeichen und "-_" enthalten.`
|
||||||
|
@ -125,6 +173,7 @@ ssh_keys = SSH-Schlüssel
|
||||||
social = Soziale Konten
|
social = Soziale Konten
|
||||||
orgs = Organisationen
|
orgs = Organisationen
|
||||||
delete = Konto löschen
|
delete = Konto löschen
|
||||||
|
uid = Uid
|
||||||
|
|
||||||
public_profile = Öffentliches Profil
|
public_profile = Öffentliches Profil
|
||||||
profile_desc = Deine E-Mail-Adresse ist öffentlich und dient dazu, dir Benachrichtigungen bezüglich deines Kontos und deiner Repositorys zu schicken.
|
profile_desc = Deine E-Mail-Adresse ist öffentlich und dient dazu, dir Benachrichtigungen bezüglich deines Kontos und deiner Repositorys zu schicken.
|
||||||
|
@ -178,7 +227,6 @@ create_repo = Repository erstellen
|
||||||
default_branch = Standard-Branch
|
default_branch = Standard-Branch
|
||||||
mirror_interval = Spiegel-Intervall (in Stunden)
|
mirror_interval = Spiegel-Intervall (in Stunden)
|
||||||
goget_meta = Go-Get Meta
|
goget_meta = Go-Get Meta
|
||||||
goget_meta_helper = This repository will be <span class="label label-blue label-radius">Go-Getable</span>
|
|
||||||
goget_meta_helper = Dieses Repository wird man mit <span class="label label-blue label-radius">go get</span> klonen können.
|
goget_meta_helper = Dieses Repository wird man mit <span class="label label-blue label-radius">go get</span> klonen können.
|
||||||
|
|
||||||
need_auth = Authorisierung benötigt
|
need_auth = Authorisierung benötigt
|
||||||
|
@ -210,11 +258,13 @@ settings.site = Offizielle Webseite
|
||||||
settings.update_settings = Aktualisierungseinstellungen
|
settings.update_settings = Aktualisierungseinstellungen
|
||||||
settings.transfer = Besitz übertragen
|
settings.transfer = Besitz übertragen
|
||||||
settings.transfer_desc = Übertrage dieses Repository einem anderen Benutzer oder einer Organisation.
|
settings.transfer_desc = Übertrage dieses Repository einem anderen Benutzer oder einer Organisation.
|
||||||
|
settings.new_owner_has_same_repo = Neuer Eigentümer hat bereits ein Repository mit dem gleichen Namen.
|
||||||
settings.delete = Repository löschen
|
settings.delete = Repository löschen
|
||||||
settings.delete_desc = Wenn dieses Repository gelöschet ist, gibt es keinen Weg zurück. Sei dir sicher!
|
settings.delete_desc = Wenn dieses Repository gelöschet ist, gibt es keinen Weg zurück. Sei dir sicher!
|
||||||
settings.update_settings_success = Repository-Optionen aktualisiert
|
settings.update_settings_success = Repository-Optionen aktualisiert
|
||||||
settings.transfer_owner = Neuer Besitzer
|
settings.transfer_owner = Neuer Besitzer
|
||||||
settings.make_transfer = übertragen
|
settings.make_transfer = übertragen
|
||||||
|
settings.transfer_succeed = Repository-Eigentum wurde erfolgreich übertragen.
|
||||||
settings.confirm_delete = Löschen
|
settings.confirm_delete = Löschen
|
||||||
settings.add_collaborator = Mitarbeiter hinzufügen
|
settings.add_collaborator = Mitarbeiter hinzufügen
|
||||||
settings.add_collaborator_success = Mitarbeiter hinzugefügt
|
settings.add_collaborator_success = Mitarbeiter hinzugefügt
|
||||||
|
@ -271,6 +321,7 @@ settings.delete = Organisation löschen
|
||||||
settings.delete_account = Diese Organisation löschen
|
settings.delete_account = Diese Organisation löschen
|
||||||
settings.delete_prompt = Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden!
|
settings.delete_prompt = Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden!
|
||||||
settings.confirm_delete_account = Löschen
|
settings.confirm_delete_account = Löschen
|
||||||
|
settings.hooks_desc = Add webhooks that will be triggered for <strong>all repositories</strong> under this organization.
|
||||||
|
|
||||||
members.public = Öffentlich
|
members.public = Öffentlich
|
||||||
members.public_helper = Privat machen
|
members.public_helper = Privat machen
|
||||||
|
@ -515,3 +566,16 @@ months = %d Monate %s
|
||||||
years = %d Jahre %s
|
years = %d Jahre %s
|
||||||
raw_seconds = Sekunden
|
raw_seconds = Sekunden
|
||||||
raw_minutes = Minuten
|
raw_minutes = Minuten
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
gogs.go
2
gogs.go
|
@ -17,7 +17,7 @@ import (
|
||||||
"github.com/gogits/gogs/modules/setting"
|
"github.com/gogits/gogs/modules/setting"
|
||||||
)
|
)
|
||||||
|
|
||||||
const APP_VER = "0.5.3.0919 Beta"
|
const APP_VER = "0.5.3.0921 Beta"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||||
|
|
|
@ -48,7 +48,7 @@ func Toggle(options *ToggleOptions) macaron.Handler {
|
||||||
if strings.HasSuffix(ctx.Req.RequestURI, "watch") {
|
if strings.HasSuffix(ctx.Req.RequestURI, "watch") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.SetCookie("redirect_to", "/"+url.QueryEscape(setting.AppSubUrl+ctx.Req.RequestURI))
|
ctx.SetCookie("redirect_to", "/"+url.QueryEscape(setting.AppSubUrl+ctx.Req.RequestURI), 0, setting.AppSubUrl)
|
||||||
ctx.Redirect(setting.AppSubUrl + "/user/login")
|
ctx.Redirect(setting.AppSubUrl + "/user/login")
|
||||||
return
|
return
|
||||||
} else if !ctx.User.IsActive && setting.Service.RegisterEmailConfirm {
|
} else if !ctx.User.IsActive && setting.Service.RegisterEmailConfirm {
|
||||||
|
|
|
@ -298,7 +298,7 @@ func RequireTrueOwner() macaron.Handler {
|
||||||
return func(ctx *Context) {
|
return func(ctx *Context) {
|
||||||
if !ctx.Repo.IsTrueOwner && !ctx.Repo.IsAdmin {
|
if !ctx.Repo.IsTrueOwner && !ctx.Repo.IsAdmin {
|
||||||
if !ctx.IsSigned {
|
if !ctx.IsSigned {
|
||||||
ctx.SetCookie("redirect_to", "/"+url.QueryEscape(setting.AppSubUrl+ctx.Req.RequestURI))
|
ctx.SetCookie("redirect_to", "/"+url.QueryEscape(setting.AppSubUrl+ctx.Req.RequestURI), 0, setting.AppSubUrl)
|
||||||
ctx.Redirect(setting.AppSubUrl + "/user/login")
|
ctx.Redirect(setting.AppSubUrl + "/user/login")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,6 +108,7 @@ var (
|
||||||
ProdMode bool
|
ProdMode bool
|
||||||
RunUser string
|
RunUser string
|
||||||
IsWindows bool
|
IsWindows bool
|
||||||
|
HasRobotsTxt bool
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -260,6 +261,8 @@ func NewConfigContext() {
|
||||||
|
|
||||||
Langs = Cfg.MustValueArray("i18n", "LANGS", ",")
|
Langs = Cfg.MustValueArray("i18n", "LANGS", ",")
|
||||||
Names = Cfg.MustValueArray("i18n", "NAMES", ",")
|
Names = Cfg.MustValueArray("i18n", "NAMES", ",")
|
||||||
|
|
||||||
|
HasRobotsTxt = com.IsFile(path.Join(CustomPath, "robots.txt"))
|
||||||
}
|
}
|
||||||
|
|
||||||
var Service struct {
|
var Service struct {
|
||||||
|
@ -380,6 +383,7 @@ func newSessionService() {
|
||||||
SessionConfig = new(session.Config)
|
SessionConfig = new(session.Config)
|
||||||
SessionConfig.ProviderConfig = strings.Trim(Cfg.MustValue("session", "PROVIDER_CONFIG"), "\" ")
|
SessionConfig.ProviderConfig = strings.Trim(Cfg.MustValue("session", "PROVIDER_CONFIG"), "\" ")
|
||||||
SessionConfig.CookieName = Cfg.MustValue("session", "COOKIE_NAME", "i_like_gogits")
|
SessionConfig.CookieName = Cfg.MustValue("session", "COOKIE_NAME", "i_like_gogits")
|
||||||
|
SessionConfig.CookiePath = AppSubUrl
|
||||||
SessionConfig.Secure = Cfg.MustBool("session", "COOKIE_SECURE")
|
SessionConfig.Secure = Cfg.MustBool("session", "COOKIE_SECURE")
|
||||||
SessionConfig.EnableSetCookie = Cfg.MustBool("session", "ENABLE_SET_COOKIE", true)
|
SessionConfig.EnableSetCookie = Cfg.MustBool("session", "ENABLE_SET_COOKIE", true)
|
||||||
SessionConfig.Gclifetime = Cfg.MustInt64("session", "GC_INTERVAL_TIME", 86400)
|
SessionConfig.Gclifetime = Cfg.MustInt64("session", "GC_INTERVAL_TIME", 86400)
|
||||||
|
|
|
@ -54,7 +54,7 @@ func Issues(ctx *middleware.Context) {
|
||||||
isShowClosed := ctx.Query("state") == "closed"
|
isShowClosed := ctx.Query("state") == "closed"
|
||||||
|
|
||||||
if viewType != "all" && !ctx.IsSigned {
|
if viewType != "all" && !ctx.IsSigned {
|
||||||
ctx.SetCookie("redirect_to", "/"+url.QueryEscape(setting.AppSubUrl+ctx.Req.RequestURI))
|
ctx.SetCookie("redirect_to", "/"+url.QueryEscape(setting.AppSubUrl+ctx.Req.RequestURI), 0, setting.AppSubUrl)
|
||||||
ctx.Redirect(setting.AppSubUrl + "/user/login")
|
ctx.Redirect(setting.AppSubUrl + "/user/login")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,8 +52,8 @@ func SignIn(ctx *middleware.Context) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if !isSucceed {
|
if !isSucceed {
|
||||||
log.Trace("auto-login cookie cleared: %s", uname)
|
log.Trace("auto-login cookie cleared: %s", uname)
|
||||||
ctx.SetCookie(setting.CookieUserName, "", -1)
|
ctx.SetCookie(setting.CookieUserName, "", -1, setting.AppSubUrl)
|
||||||
ctx.SetCookie(setting.CookieRememberName, "", -1)
|
ctx.SetCookie(setting.CookieRememberName, "", -1, setting.AppSubUrl)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -77,7 +77,7 @@ func SignIn(ctx *middleware.Context) {
|
||||||
ctx.Session.Set("uid", u.Id)
|
ctx.Session.Set("uid", u.Id)
|
||||||
ctx.Session.Set("uname", u.Name)
|
ctx.Session.Set("uname", u.Name)
|
||||||
if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
|
if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
|
||||||
ctx.SetCookie("redirect_to", "", -1)
|
ctx.SetCookie("redirect_to", "", -1, setting.AppSubUrl)
|
||||||
ctx.Redirect(redirectTo)
|
ctx.Redirect(redirectTo)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -113,9 +113,9 @@ func SignInPost(ctx *middleware.Context, form auth.SignInForm) {
|
||||||
|
|
||||||
if form.Remember {
|
if form.Remember {
|
||||||
days := 86400 * setting.LogInRememberDays
|
days := 86400 * setting.LogInRememberDays
|
||||||
ctx.SetCookie(setting.CookieUserName, u.Name, days)
|
ctx.SetCookie(setting.CookieUserName, u.Name, days, setting.AppSubUrl)
|
||||||
ctx.SetSuperSecureCookie(base.EncodeMd5(u.Rands+u.Passwd),
|
ctx.SetSuperSecureCookie(base.EncodeMd5(u.Rands+u.Passwd),
|
||||||
setting.CookieRememberName, u.Name, days)
|
setting.CookieRememberName, u.Name, days, setting.AppSubUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bind with social account.
|
// Bind with social account.
|
||||||
|
@ -135,7 +135,7 @@ func SignInPost(ctx *middleware.Context, form auth.SignInForm) {
|
||||||
ctx.Session.Set("uid", u.Id)
|
ctx.Session.Set("uid", u.Id)
|
||||||
ctx.Session.Set("uname", u.Name)
|
ctx.Session.Set("uname", u.Name)
|
||||||
if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
|
if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
|
||||||
ctx.SetCookie("redirect_to", "", -1)
|
ctx.SetCookie("redirect_to", "", -1, setting.AppSubUrl)
|
||||||
ctx.Redirect(redirectTo)
|
ctx.Redirect(redirectTo)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -149,8 +149,8 @@ func SignOut(ctx *middleware.Context) {
|
||||||
ctx.Session.Delete("socialId")
|
ctx.Session.Delete("socialId")
|
||||||
ctx.Session.Delete("socialName")
|
ctx.Session.Delete("socialName")
|
||||||
ctx.Session.Delete("socialEmail")
|
ctx.Session.Delete("socialEmail")
|
||||||
ctx.SetCookie(setting.CookieUserName, "", -1)
|
ctx.SetCookie(setting.CookieUserName, "", -1, setting.AppSubUrl)
|
||||||
ctx.SetCookie(setting.CookieRememberName, "", -1)
|
ctx.SetCookie(setting.CookieRememberName, "", -1, setting.AppSubUrl)
|
||||||
ctx.Redirect(setting.AppSubUrl + "/")
|
ctx.Redirect(setting.AppSubUrl + "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
0.5.3.0919 Beta
|
0.5.3.0921 Beta
|
Loading…
Reference in a new issue