| @@ -2,5 +2,4 @@ language: go | |||
| go: | |||
| - 1.2 | |||
| - 1.3 | |||
| - tip | |||
| - 1.3 | |||
| @@ -5,7 +5,7 @@ Gogs(Go Git Service) is a painless self-hosted Git Service written in Go. | |||
|  | |||
| ##### Current version: 0.5.2 Beta | |||
| ##### Current version: 0.5.3 Beta | |||
| ### NOTICES | |||
| @@ -5,7 +5,7 @@ Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务。 | |||
|  | |||
| ##### 当前版本:0.5.2 Beta | |||
| ##### 当前版本:0.5.3 Beta | |||
| ## 开发目的 | |||
| @@ -97,9 +97,10 @@ func newMacaron() *macaron.Macaron { | |||
| Config: *setting.SessionConfig, | |||
| })) | |||
| m.Use(csrf.Generate(csrf.Options{ | |||
| Secret: setting.SecretKey, | |||
| SetCookie: true, | |||
| Header: "X-Csrf-Token", | |||
| Secret: setting.SecretKey, | |||
| SetCookie: true, | |||
| Header: "X-Csrf-Token", | |||
| CookiePath: setting.AppSubUrl, | |||
| })) | |||
| m.Use(toolbox.Toolboxer(m, toolbox.Options{ | |||
| HealthCheckFuncs: []*toolbox.HealthCheckFuncDesc{ | |||
| @@ -363,6 +364,15 @@ func runWeb(*cli.Context) { | |||
| 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. | |||
| m.NotFound(routers.NotFound) | |||
| @@ -38,6 +38,50 @@ issues = Issues | |||
| 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] | |||
| uname_holder = Benutzername oder E-Mail | |||
| password_holder = Passwort | |||
| @@ -47,6 +91,9 @@ collaborative_repos = Gemeinschaftliche Repositorys | |||
| my_orgs = Meine Organisationen | |||
| my_mirrors = Meine Spiegel | |||
| [explore] | |||
| repos = Repositories | |||
| [auth] | |||
| create_new_account = Neues Konto erstellen | |||
| register_hepler_msg = Du hast schon ein Konto? Jetzt anmelden! | |||
| @@ -81,6 +128,7 @@ HttpsUrl = HTTPS-URL | |||
| PayloadUrl = Payload-URL | |||
| TeamName = Teamname | |||
| AuthName = Authentifizierungsname | |||
| AdminEmail = Admin E-mail | |||
| require_error = ` darf nicht leer sein.` | |||
| alpha_dash_error = ` kann ausschließlich alphanumerische Zeichen und "-_" enthalten.` | |||
| @@ -125,6 +173,7 @@ ssh_keys = SSH-Schlüssel | |||
| social = Soziale Konten | |||
| orgs = Organisationen | |||
| delete = Konto löschen | |||
| uid = Uid | |||
| 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. | |||
| @@ -178,7 +227,6 @@ create_repo = Repository erstellen | |||
| default_branch = Standard-Branch | |||
| mirror_interval = Spiegel-Intervall (in Stunden) | |||
| 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. | |||
| need_auth = Authorisierung benötigt | |||
| @@ -210,11 +258,13 @@ settings.site = Offizielle Webseite | |||
| settings.update_settings = Aktualisierungseinstellungen | |||
| settings.transfer = Besitz übertragen | |||
| 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_desc = Wenn dieses Repository gelöschet ist, gibt es keinen Weg zurück. Sei dir sicher! | |||
| settings.update_settings_success = Repository-Optionen aktualisiert | |||
| settings.transfer_owner = Neuer Besitzer | |||
| settings.make_transfer = übertragen | |||
| settings.transfer_succeed = Repository-Eigentum wurde erfolgreich übertragen. | |||
| settings.confirm_delete = Löschen | |||
| settings.add_collaborator = Mitarbeiter hinzufügen | |||
| 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_prompt = Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden! | |||
| 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_helper = Privat machen | |||
| @@ -515,3 +566,16 @@ months = %d Monate %s | |||
| years = %d Jahre %s | |||
| raw_seconds = Sekunden | |||
| raw_minutes = Minuten | |||
| @@ -17,7 +17,7 @@ import ( | |||
| "github.com/gogits/gogs/modules/setting" | |||
| ) | |||
| const APP_VER = "0.5.3.0919 Beta" | |||
| const APP_VER = "0.5.3.0921 Beta" | |||
| func init() { | |||
| runtime.GOMAXPROCS(runtime.NumCPU()) | |||
| @@ -48,7 +48,7 @@ func Toggle(options *ToggleOptions) macaron.Handler { | |||
| if strings.HasSuffix(ctx.Req.RequestURI, "watch") { | |||
| 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") | |||
| return | |||
| } else if !ctx.User.IsActive && setting.Service.RegisterEmailConfirm { | |||
| @@ -298,7 +298,7 @@ func RequireTrueOwner() macaron.Handler { | |||
| return func(ctx *Context) { | |||
| if !ctx.Repo.IsTrueOwner && !ctx.Repo.IsAdmin { | |||
| 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") | |||
| return | |||
| } | |||
| @@ -108,6 +108,7 @@ var ( | |||
| ProdMode bool | |||
| RunUser string | |||
| IsWindows bool | |||
| HasRobotsTxt bool | |||
| ) | |||
| func init() { | |||
| @@ -260,6 +261,8 @@ func NewConfigContext() { | |||
| Langs = Cfg.MustValueArray("i18n", "LANGS", ",") | |||
| Names = Cfg.MustValueArray("i18n", "NAMES", ",") | |||
| HasRobotsTxt = com.IsFile(path.Join(CustomPath, "robots.txt")) | |||
| } | |||
| var Service struct { | |||
| @@ -380,6 +383,7 @@ func newSessionService() { | |||
| SessionConfig = new(session.Config) | |||
| SessionConfig.ProviderConfig = strings.Trim(Cfg.MustValue("session", "PROVIDER_CONFIG"), "\" ") | |||
| SessionConfig.CookieName = Cfg.MustValue("session", "COOKIE_NAME", "i_like_gogits") | |||
| SessionConfig.CookiePath = AppSubUrl | |||
| SessionConfig.Secure = Cfg.MustBool("session", "COOKIE_SECURE") | |||
| SessionConfig.EnableSetCookie = Cfg.MustBool("session", "ENABLE_SET_COOKIE", true) | |||
| SessionConfig.Gclifetime = Cfg.MustInt64("session", "GC_INTERVAL_TIME", 86400) | |||
| @@ -54,7 +54,7 @@ func Issues(ctx *middleware.Context) { | |||
| isShowClosed := ctx.Query("state") == "closed" | |||
| 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") | |||
| return | |||
| } | |||
| @@ -52,8 +52,8 @@ func SignIn(ctx *middleware.Context) { | |||
| defer func() { | |||
| if !isSucceed { | |||
| log.Trace("auto-login cookie cleared: %s", uname) | |||
| ctx.SetCookie(setting.CookieUserName, "", -1) | |||
| ctx.SetCookie(setting.CookieRememberName, "", -1) | |||
| ctx.SetCookie(setting.CookieUserName, "", -1, setting.AppSubUrl) | |||
| ctx.SetCookie(setting.CookieRememberName, "", -1, setting.AppSubUrl) | |||
| return | |||
| } | |||
| }() | |||
| @@ -77,7 +77,7 @@ func SignIn(ctx *middleware.Context) { | |||
| ctx.Session.Set("uid", u.Id) | |||
| ctx.Session.Set("uname", u.Name) | |||
| 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) | |||
| return | |||
| } | |||
| @@ -113,9 +113,9 @@ func SignInPost(ctx *middleware.Context, form auth.SignInForm) { | |||
| if form.Remember { | |||
| 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), | |||
| setting.CookieRememberName, u.Name, days) | |||
| setting.CookieRememberName, u.Name, days, setting.AppSubUrl) | |||
| } | |||
| // 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("uname", u.Name) | |||
| 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) | |||
| return | |||
| } | |||
| @@ -149,8 +149,8 @@ func SignOut(ctx *middleware.Context) { | |||
| ctx.Session.Delete("socialId") | |||
| ctx.Session.Delete("socialName") | |||
| ctx.Session.Delete("socialEmail") | |||
| ctx.SetCookie(setting.CookieUserName, "", -1) | |||
| ctx.SetCookie(setting.CookieRememberName, "", -1) | |||
| ctx.SetCookie(setting.CookieUserName, "", -1, setting.AppSubUrl) | |||
| ctx.SetCookie(setting.CookieRememberName, "", -1, setting.AppSubUrl) | |||
| ctx.Redirect(setting.AppSubUrl + "/") | |||
| } | |||
| @@ -1 +1 @@ | |||
| 0.5.3.0919 Beta | |||
| 0.5.3.0921 Beta | |||