diff options
Diffstat (limited to 'routers')
-rw-r--r-- | routers/install.go | 156 | ||||
-rw-r--r-- | routers/repo/commit.go | 8 | ||||
-rw-r--r-- | routers/repo/download.go | 8 | ||||
-rw-r--r-- | routers/repo/repo.go | 18 | ||||
-rw-r--r-- | routers/repo/view.go | 6 | ||||
-rw-r--r-- | routers/user/setting.go | 13 |
6 files changed, 102 insertions, 107 deletions
diff --git a/routers/install.go b/routers/install.go index a2491c4fc7..9c3f134d45 100644 --- a/routers/install.go +++ b/routers/install.go @@ -14,6 +14,7 @@ import ( "github.com/Unknwon/com" "github.com/Unknwon/macaron" "github.com/go-xorm/xorm" + "gopkg.in/ini.v1" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/auth" @@ -73,12 +74,7 @@ func GlobalInit() { checkRunMode() } -func renderDbOption(ctx *middleware.Context) { - ctx.Data["DbOptions"] = []string{"MySQL", "PostgreSQL", "SQLite3"} -} - -// @router /install [get] -func Install(ctx *middleware.Context, form auth.InstallForm) { +func InstallInit(ctx *middleware.Context) { if setting.InstallLock { ctx.Handle(404, "Install", errors.New("Installation is prohibited")) return @@ -87,46 +83,35 @@ func Install(ctx *middleware.Context, form auth.InstallForm) { ctx.Data["Title"] = ctx.Tr("install.install") ctx.Data["PageIsInstall"] = true - // FIXME: when i'm ckeching length here? should they all be 0 no matter when? - // Get and assign values to install form. - if len(form.DbHost) == 0 { - form.DbHost = models.DbCfg.Host - } - if len(form.DbUser) == 0 { - form.DbUser = models.DbCfg.User - } - if len(form.DbPasswd) == 0 { - form.DbPasswd = models.DbCfg.Pwd - } - if len(form.DatabaseName) == 0 { - form.DatabaseName = models.DbCfg.Name - } - if len(form.DatabasePath) == 0 { - form.DatabasePath = models.DbCfg.Path - } + ctx.Data["DbOptions"] = []string{"MySQL", "PostgreSQL", "SQLite3"} +} - if len(form.RepoRootPath) == 0 { - form.RepoRootPath = setting.RepoRootPath - } - if len(form.RunUser) == 0 { - // Note: it's not normall to use SSH in windows so current user can be first option(not git). - if setting.IsWindows && setting.RunUser == "git" { - form.RunUser = os.Getenv("USER") - if len(form.RunUser) == 0 { - form.RunUser = os.Getenv("USERNAME") - } - } else { - form.RunUser = setting.RunUser +func Install(ctx *middleware.Context) { + form := auth.InstallForm{} + + form.DbHost = models.DbCfg.Host + form.DbUser = models.DbCfg.User + form.DbPasswd = models.DbCfg.Passwd + form.DbName = models.DbCfg.Name + form.DbPath = models.DbCfg.Path + + form.RepoRootPath = setting.RepoRootPath + + // Note(unknwon): it's hard for Windows users change a running user, + // so just use current one if config says default. + if setting.IsWindows && setting.RunUser == "git" { + form.RunUser = os.Getenv("USER") + if len(form.RunUser) == 0 { + form.RunUser = os.Getenv("USERNAME") } - } - if len(form.Domain) == 0 { - form.Domain = setting.Domain - } - if len(form.AppUrl) == 0 { - form.AppUrl = setting.AppUrl + } else { + form.RunUser = setting.RunUser } - renderDbOption(ctx) + form.Domain = setting.Domain + form.HTTPPort = setting.HttpPort + form.AppUrl = setting.AppUrl + curDbOp := "" if models.EnableSQLite3 { curDbOp = "SQLite3" // Default when enabled. @@ -138,16 +123,7 @@ func Install(ctx *middleware.Context, form auth.InstallForm) { } func InstallPost(ctx *middleware.Context, form auth.InstallForm) { - if setting.InstallLock { - ctx.Handle(404, "InstallPost", errors.New("Installation is prohibited")) - return - } - - ctx.Data["Title"] = ctx.Tr("install.install") - ctx.Data["PageIsInstall"] = true - - renderDbOption(ctx) - ctx.Data["CurDbOption"] = form.Database + ctx.Data["CurDbOption"] = form.DbType if ctx.HasError() { ctx.HTML(200, INSTALL) @@ -162,18 +138,17 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) { // Pass basic check, now test configuration. // Test database setting. dbTypes := map[string]string{"MySQL": "mysql", "PostgreSQL": "postgres", "SQLite3": "sqlite3"} - models.DbCfg.Type = dbTypes[form.Database] + models.DbCfg.Type = dbTypes[form.DbType] models.DbCfg.Host = form.DbHost models.DbCfg.User = form.DbUser - models.DbCfg.Pwd = form.DbPasswd - models.DbCfg.Name = form.DatabaseName - models.DbCfg.SslMode = form.SslMode - models.DbCfg.Path = form.DatabasePath + models.DbCfg.Passwd = form.DbPasswd + models.DbCfg.Name = form.DbName + models.DbCfg.SSLMode = form.SSLMode + models.DbCfg.Path = form.DbPath // Set test engine. var x *xorm.Engine if err := models.NewTestEngine(x); err != nil { - // FIXME: should use core.QueryDriver (github.com/go-xorm/core) if strings.Contains(err.Error(), `Unknown database type: sqlite3`) { ctx.RenderWithErr(ctx.Tr("install.sqlite3_not_available", "http://gogs.io/docs/installation/install_from_binary.html"), INSTALL, &form) } else { @@ -194,7 +169,6 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) { if len(curUser) == 0 { curUser = os.Getenv("USERNAME") } - // Does not check run user when the install lock is off. if form.RunUser != curUser { ctx.Data["Err_RunUser"] = true ctx.RenderWithErr(ctx.Tr("install.run_user_not_match", form.RunUser, curUser), INSTALL, &form) @@ -202,47 +176,53 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) { } // Check admin password. - if form.AdminPasswd != form.ConfirmPasswd { + if form.AdminPasswd != form.AdminConfirmPasswd { ctx.Data["Err_AdminPasswd"] = true ctx.RenderWithErr(ctx.Tr("form.password_not_match"), INSTALL, form) return } + if form.AppUrl[len(form.AppUrl)-1] != '/' { + form.AppUrl += "/" + } + // Save settings. - setting.Cfg.Section("database").Key("DB_TYPE").SetValue(models.DbCfg.Type) - setting.Cfg.Section("database").Key("HOST").SetValue(models.DbCfg.Host) - setting.Cfg.Section("database").Key("NAME").SetValue(models.DbCfg.Name) - setting.Cfg.Section("database").Key("USER").SetValue(models.DbCfg.User) - setting.Cfg.Section("database").Key("PASSWD").SetValue(models.DbCfg.Pwd) - setting.Cfg.Section("database").Key("SSL_MODE").SetValue(models.DbCfg.SslMode) - setting.Cfg.Section("database").Key("PATH").SetValue(models.DbCfg.Path) - - setting.Cfg.Section("repository").Key("ROOT").SetValue(form.RepoRootPath) - setting.Cfg.Section("").Key("RUN_USER").SetValue(form.RunUser) - setting.Cfg.Section("server").Key("DOMAIN").SetValue(form.Domain) - setting.Cfg.Section("server").Key("ROOT_URL").SetValue(form.AppUrl) - - if len(strings.TrimSpace(form.SmtpHost)) > 0 { - setting.Cfg.Section("mailer").Key("ENABLED").SetValue("true") - setting.Cfg.Section("mailer").Key("HOST").SetValue(form.SmtpHost) - setting.Cfg.Section("mailer").Key("USER").SetValue(form.SmtpEmail) - setting.Cfg.Section("mailer").Key("PASSWD").SetValue(form.SmtpPasswd) - - setting.Cfg.Section("service").Key("REGISTER_EMAIL_CONFIRM").SetValue(com.ToStr(form.RegisterConfirm == "on")) - setting.Cfg.Section("service").Key("ENABLE_NOTIFY_MAIL").SetValue(com.ToStr(form.MailNotify == "on")) + cfg := ini.Empty() + cfg.Section("database").Key("DB_TYPE").SetValue(models.DbCfg.Type) + cfg.Section("database").Key("HOST").SetValue(models.DbCfg.Host) + cfg.Section("database").Key("NAME").SetValue(models.DbCfg.Name) + cfg.Section("database").Key("USER").SetValue(models.DbCfg.User) + cfg.Section("database").Key("PASSWD").SetValue(models.DbCfg.Passwd) + cfg.Section("database").Key("SSL_MODE").SetValue(models.DbCfg.SSLMode) + cfg.Section("database").Key("PATH").SetValue(models.DbCfg.Path) + + cfg.Section("repository").Key("ROOT").SetValue(form.RepoRootPath) + cfg.Section("").Key("RUN_USER").SetValue(form.RunUser) + cfg.Section("server").Key("DOMAIN").SetValue(form.Domain) + cfg.Section("server").Key("HTTP_PORT").SetValue(form.HTTPPort) + cfg.Section("server").Key("ROOT_URL").SetValue(form.AppUrl) + + if len(strings.TrimSpace(form.SMTPHost)) > 0 { + cfg.Section("mailer").Key("ENABLED").SetValue("true") + cfg.Section("mailer").Key("HOST").SetValue(form.SMTPHost) + cfg.Section("mailer").Key("USER").SetValue(form.SMTPEmail) + cfg.Section("mailer").Key("PASSWD").SetValue(form.SMTPPasswd) + + cfg.Section("service").Key("REGISTER_EMAIL_CONFIRM").SetValue(com.ToStr(form.RegisterConfirm == "on")) + cfg.Section("service").Key("ENABLE_NOTIFY_MAIL").SetValue(com.ToStr(form.MailNotify == "on")) } - setting.Cfg.Section("").Key("RUN_MODE").SetValue("prod") + cfg.Section("").Key("RUN_MODE").SetValue("prod") - setting.Cfg.Section("session").Key("PROVIDER").SetValue("file") + cfg.Section("session").Key("PROVIDER").SetValue("file") - setting.Cfg.Section("log").Key("MODE").SetValue("file") + cfg.Section("log").Key("MODE").SetValue("file") - setting.Cfg.Section("security").Key("INSTALL_LOCK").SetValue("true") - setting.Cfg.Section("security").Key("SECRET_KEY").SetValue(base.GetRandomString(15)) + cfg.Section("security").Key("INSTALL_LOCK").SetValue("true") + cfg.Section("security").Key("SECRET_KEY").SetValue(base.GetRandomString(15)) os.MkdirAll("custom/conf", os.ModePerm) - if err := setting.Cfg.SaveTo(path.Join(setting.CustomPath, "conf/app.ini")); err != nil { + if err := cfg.SaveTo(path.Join(setting.CustomPath, "conf/app.ini")); err != nil { ctx.RenderWithErr(ctx.Tr("install.save_config_failed", err), INSTALL, &form) return } @@ -264,5 +244,5 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) { log.Info("First-time run install finished!") ctx.Flash.Success(ctx.Tr("install.install_success")) - ctx.Redirect(setting.AppSubUrl + "/user/login") + ctx.Redirect(form.AppUrl + "user/login") } diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 619c6c815c..e92ec8c88c 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -37,7 +37,7 @@ func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List { newCommits := list.New() for e := oldCommits.Front(); e != nil; e = e.Next() { c := e.Value.(*git.Commit) - c.CommitMessage = string(base.RenderIssueIndexPattern([]byte(c.CommitMessage), repoLink)) + c.CommitMessage = c.CommitMessage newCommits.PushBack(c) } return newCommits @@ -206,9 +206,9 @@ func Diff(ctx *middleware.Context) { commitId := ctx.Repo.CommitId commit := ctx.Repo.Commit - commit.CommitMessage = string(base.RenderIssueIndexPattern([]byte(commit.CommitMessage), ctx.Repo.RepoLink)) + commit.CommitMessage = commit.CommitMessage diff, err := models.GetDiffCommit(models.RepoPath(userName, repoName), - commitId, setting.MaxGitDiffLines) + commitId, setting.Git.MaxGitDiffLines) if err != nil { ctx.Handle(404, "GetDiffCommit", err) return @@ -272,7 +272,7 @@ func CompareDiff(ctx *middleware.Context) { } diff, err := models.GetDiffRange(models.RepoPath(userName, repoName), beforeCommitId, - afterCommitId, setting.MaxGitDiffLines) + afterCommitId, setting.Git.MaxGitDiffLines) if err != nil { ctx.Handle(404, "GetDiffRange", err) return diff --git a/routers/repo/download.go b/routers/repo/download.go index 6367c40e28..c5e18e005b 100644 --- a/routers/repo/download.go +++ b/routers/repo/download.go @@ -25,16 +25,16 @@ func ServeBlob(ctx *middleware.Context, blob *git.Blob) error { buf = buf[:n] } - contentType, isTextFile := base.IsTextFile(buf) + _, isTextFile := base.IsTextFile(buf) _, isImageFile := base.IsImageFile(buf) - ctx.Resp.Header().Set("Content-Type", contentType) + ctx.Resp.Header().Set("Content-Type", "text/plain") if !isTextFile && !isImageFile { ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+path.Base(ctx.Repo.TreeName)) ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") } ctx.Resp.Write(buf) - io.Copy(ctx.Resp, dataRc) - return nil + _, err = io.Copy(ctx.Resp, dataRc) + return err } func SingleDownload(ctx *middleware.Context) { diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 70b0c05ece..48f7b09bc0 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -6,6 +6,7 @@ package repo import ( "fmt" + "net/url" "os" "path" "strings" @@ -180,11 +181,20 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) { } } - authStr := strings.Replace(fmt.Sprintf("://%s:%s", - form.AuthUserName, form.AuthPasswd), "@", "%40", -1) - url := strings.Replace(form.HttpsUrl, "://", authStr+"@", 1) + u, err := url.Parse(form.HttpsUrl) + + if err != nil || u.Scheme != "https" { + ctx.Data["Err_HttpsUrl"] = true + ctx.RenderWithErr(ctx.Tr("form.url_error"), MIGRATE, &form) + return + } + + if len(form.AuthUserName) > 0 || len(form.AuthPasswd) > 0 { + u.User = url.UserPassword(form.AuthUserName, form.AuthPasswd) + } + repo, err := models.MigrateRepository(ctxUser, form.RepoName, form.Description, form.Private, - form.Mirror, url) + form.Mirror, u.String()) if err == nil { log.Trace("Repository migrated: %s/%s", ctxUser.Name, form.RepoName) ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + form.RepoName) diff --git a/routers/repo/view.go b/routers/repo/view.go index 3722f04b44..cb689df6a0 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -98,7 +98,7 @@ func Home(ctx *middleware.Context) { readmeExist := base.IsMarkdownFile(blob.Name()) || base.IsReadmeFile(blob.Name()) ctx.Data["ReadmeExist"] = readmeExist if readmeExist { - ctx.Data["FileContent"] = string(base.RenderMarkdown(buf, "")) + ctx.Data["FileContent"] = string(base.RenderMarkdown(buf, branchLink)) } else { if err, content := base.ToUtf8WithErr(buf); err != nil { if err != nil { @@ -156,9 +156,9 @@ func Home(ctx *middleware.Context) { for _, f := range files { switch c := f[1].(type) { case *git.Commit: - c.CommitMessage = string(base.RenderIssueIndexPattern([]byte(c.CommitMessage), ctx.Repo.RepoLink)) + c.CommitMessage = c.CommitMessage case *git.SubModuleFile: - c.CommitMessage = string(base.RenderIssueIndexPattern([]byte(c.CommitMessage), ctx.Repo.RepoLink)) + c.CommitMessage = c.CommitMessage } } ctx.Data["Files"] = files diff --git a/routers/user/setting.go b/routers/user/setting.go index 419e84b395..953e61138f 100644 --- a/routers/user/setting.go +++ b/routers/user/setting.go @@ -325,10 +325,15 @@ func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) { return } - // Remove newline characters from form.KeyContent - cleanContent := strings.Replace(form.Content, "\n", "", -1) + // Parse openssh style string from form content + content, err := models.ParseKeyString(form.Content) + if err != nil { + ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error())) + ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh") + return + } - if ok, err := models.CheckPublicKeyString(cleanContent); !ok { + if ok, err := models.CheckPublicKeyString(content); !ok { if err == models.ErrKeyUnableVerify { ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key")) } else { @@ -341,7 +346,7 @@ func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) { k := &models.PublicKey{ OwnerId: ctx.User.Id, Name: form.SSHTitle, - Content: cleanContent, + Content: content, } if err := models.AddPublicKey(k); err != nil { if err == models.ErrKeyAlreadyExist { |