Browse Source

Fixed #209

pull/210/head
Unknown 11 years ago
parent
commit
688ec6ecbd
  1. 18
      cmd/dump.go
  2. 10
      cmd/fix.go
  3. 12
      cmd/serve.go
  4. 38
      cmd/web.go
  5. 3
      conf/app.ini
  6. 6
      gogs.go
  7. 3
      models/action.go
  8. 20
      models/models.go
  9. 36
      models/repo.go
  10. 9
      models/user.go
  11. 10
      modules/base/template.go
  12. 8
      modules/base/tool.go
  13. 220
      modules/bin/conf.go
  14. 10
      modules/log/log.go
  15. 21
      modules/mailer/mail.go
  16. 12
      modules/mailer/mailer.go
  17. 6
      modules/middleware/auth.go
  18. 5
      modules/middleware/context.go
  19. 4
      modules/middleware/logger.go
  20. 8
      modules/middleware/render.go
  21. 14
      modules/middleware/repo.go
  22. 293
      modules/setting/setting.go
  23. 52
      modules/social/social.go
  24. 43
      routers/admin/admin.go
  25. 3
      routers/api/v1/miscellaneous.go
  26. 4
      routers/dashboard.go
  27. 14
      routers/dev/template.go
  28. 68
      routers/install.go
  29. 7
      routers/repo/branch.go
  30. 24
      routers/repo/commit.go
  31. 21
      routers/repo/download.go
  32. 55
      routers/repo/git.go
  33. 27
      routers/repo/http.go
  34. 5
      routers/repo/issue.go
  35. 3
      routers/repo/setting.go
  36. 6
      routers/user/social.go
  37. 47
      routers/user/user.go

18
cmd/dump.go

@ -15,7 +15,7 @@ import (
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/setting"
) )
var CmdDump = cli.Command{ var CmdDump = cli.Command{
@ -28,14 +28,14 @@ It can be used for backup and capture Gogs server image to send to maintainer`,
} }
func runDump(*cli.Context) { func runDump(*cli.Context) {
base.NewConfigContext() setting.NewConfigContext()
models.LoadModelsConfig() models.LoadModelsConfig()
models.SetEngine() models.SetEngine()
log.Printf("Dumping local repositories...%s", base.RepoRootPath) log.Printf("Dumping local repositories...%s", setting.RepoRootPath)
zip.Verbose = false zip.Verbose = false
defer os.Remove("gogs-repo.zip") defer os.Remove("gogs-repo.zip")
if err := zip.PackTo(base.RepoRootPath, "gogs-repo.zip", true); err != nil { if err := zip.PackTo(setting.RepoRootPath, "gogs-repo.zip", true); err != nil {
log.Fatalf("Fail to dump local repositories: %v", err) log.Fatalf("Fail to dump local repositories: %v", err)
} }
@ -53,11 +53,11 @@ func runDump(*cli.Context) {
log.Fatalf("Fail to create %s: %v", fileName, err) log.Fatalf("Fail to create %s: %v", fileName, err)
} }
execDir, _ := base.ExecDir() workDir, _ := setting.WorkDir()
z.AddFile("gogs-repo.zip", path.Join(execDir, "gogs-repo.zip")) z.AddFile("gogs-repo.zip", path.Join(workDir, "gogs-repo.zip"))
z.AddFile("gogs-db.sql", path.Join(execDir, "gogs-db.sql")) z.AddFile("gogs-db.sql", path.Join(workDir, "gogs-db.sql"))
z.AddFile("custom/conf/app.ini", path.Join(execDir, "custom/conf/app.ini")) z.AddFile("custom/conf/app.ini", path.Join(workDir, "custom/conf/app.ini"))
z.AddDir("log", path.Join(execDir, "log")) z.AddDir("log", path.Join(workDir, "log"))
if err = z.Close(); err != nil { if err = z.Close(); err != nil {
os.Remove(fileName) os.Remove(fileName)
log.Fatalf("Fail to save %s: %v", fileName, err) log.Fatalf("Fail to save %s: %v", fileName, err)

10
cmd/fix.go

@ -10,7 +10,7 @@ import (
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/setting"
) )
var CmdFix = cli.Command{ var CmdFix = cli.Command{
@ -22,14 +22,14 @@ var CmdFix = cli.Command{
} }
func runFix(k *cli.Context) { func runFix(k *cli.Context) {
execDir, _ := base.ExecDir() workDir, _ := setting.WorkDir()
newLogger(execDir) newLogger(workDir)
base.NewConfigContext() setting.NewConfigContext()
models.LoadModelsConfig() models.LoadModelsConfig()
if models.UseSQLite3 { if models.UseSQLite3 {
os.Chdir(execDir) os.Chdir(workDir)
} }
models.SetEngine() models.SetEngine()

12
cmd/serve.go

@ -16,7 +16,7 @@ import (
qlog "github.com/qiniu/log" qlog "github.com/qiniu/log"
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/setting"
) )
var CmdServ = cli.Command{ var CmdServ = cli.Command{
@ -41,14 +41,14 @@ func newLogger(logPath string) {
} }
func setup(logPath string) { func setup(logPath string) {
execDir, _ := base.ExecDir() workDir, _ := setting.WorkDir()
newLogger(path.Join(execDir, logPath)) newLogger(path.Join(workDir, logPath))
base.NewConfigContext() setting.NewConfigContext()
models.LoadModelsConfig() models.LoadModelsConfig()
if models.UseSQLite3 { if models.UseSQLite3 {
os.Chdir(execDir) os.Chdir(workDir)
} }
models.SetEngine() models.SetEngine()
@ -182,7 +182,7 @@ func runServ(k *cli.Context) {
models.SetRepoEnvs(user.Id, user.Name, repoName, repoUserName) models.SetRepoEnvs(user.Id, user.Name, repoName, repoUserName)
gitcmd := exec.Command(verb, repoPath) gitcmd := exec.Command(verb, repoPath)
gitcmd.Dir = base.RepoRootPath gitcmd.Dir = setting.RepoRootPath
gitcmd.Stdout = os.Stdout gitcmd.Stdout = os.Stdout
gitcmd.Stdin = os.Stdin gitcmd.Stdin = os.Stdin
gitcmd.Stderr = os.Stderr gitcmd.Stderr = os.Stderr

38
cmd/web.go

@ -9,10 +9,10 @@ import (
"html/template" "html/template"
"net/http" "net/http"
"os" "os"
"path"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/go-martini/martini" "github.com/go-martini/martini"
qlog "github.com/qiniu/log"
"github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/auth/apiv1" "github.com/gogits/gogs/modules/auth/apiv1"
@ -21,6 +21,7 @@ import (
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/middleware/binding" "github.com/gogits/gogs/modules/middleware/binding"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/routers" "github.com/gogits/gogs/routers"
"github.com/gogits/gogs/routers/admin" "github.com/gogits/gogs/routers/admin"
"github.com/gogits/gogs/routers/api/v1" "github.com/gogits/gogs/routers/api/v1"
@ -43,7 +44,8 @@ func newMartini() *martini.ClassicMartini {
m := martini.New() m := martini.New()
m.Use(middleware.Logger()) m.Use(middleware.Logger())
m.Use(martini.Recovery()) m.Use(martini.Recovery())
m.Use(martini.Static("public", martini.StaticOptions{SkipLogging: !base.DisableRouterLog})) m.Use(martini.Static(path.Join(setting.StaticRootPath, "public"),
martini.StaticOptions{SkipLogging: !setting.DisableRouterLog}))
m.MapTo(r, (*martini.Routes)(nil)) m.MapTo(r, (*martini.Routes)(nil))
m.Action(r.Handle) m.Action(r.Handle)
return &martini.ClassicMartini{m, r} return &martini.ClassicMartini{m, r}
@ -56,13 +58,14 @@ func runWeb(*cli.Context) {
// Middlewares. // Middlewares.
m.Use(middleware.Renderer(middleware.RenderOptions{ m.Use(middleware.Renderer(middleware.RenderOptions{
Directory: path.Join(setting.StaticRootPath, "templates"),
Funcs: []template.FuncMap{base.TemplateFuncs}, Funcs: []template.FuncMap{base.TemplateFuncs},
IndentJSON: true, IndentJSON: true,
})) }))
m.Use(middleware.InitContext()) m.Use(middleware.InitContext())
reqSignIn := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true}) reqSignIn := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true})
ignSignIn := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: base.Service.RequireSignInView}) ignSignIn := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: setting.Service.RequireSignInView})
ignSignInAndCsrf := middleware.Toggle(&middleware.ToggleOptions{DisableCsrf: true}) ignSignInAndCsrf := middleware.Toggle(&middleware.ToggleOptions{DisableCsrf: true})
reqSignOut := middleware.Toggle(&middleware.ToggleOptions{SignOutRequire: true}) reqSignOut := middleware.Toggle(&middleware.ToggleOptions{SignOutRequire: true})
@ -241,22 +244,19 @@ func runWeb(*cli.Context) {
// Not found handler. // Not found handler.
m.NotFound(routers.NotFound) m.NotFound(routers.NotFound)
protocol := base.Cfg.MustValue("server", "PROTOCOL", "http") var err error
listenAddr := fmt.Sprintf("%s:%s", listenAddr := fmt.Sprintf("%s:%s", setting.HttpAddr, setting.HttpPort)
base.Cfg.MustValue("server", "HTTP_ADDR", "0.0.0.0"), log.Info("Listen: %v://%s", setting.Protocol, listenAddr)
base.Cfg.MustValue("server", "HTTP_PORT", "3000")) switch setting.Protocol {
case setting.HTTP:
if protocol == "http" { err = http.ListenAndServe(listenAddr, m)
log.Info("Listen: http://%s", listenAddr) case setting.HTTPS:
if err := http.ListenAndServe(listenAddr, m); err != nil { err = http.ListenAndServeTLS(listenAddr, setting.CertFile, setting.KeyFile, m)
qlog.Error(err.Error()) default:
} log.Fatal("Invalid protocol: %s", setting.Protocol)
} else if protocol == "https" {
log.Info("Listen: https://%s", listenAddr)
if err := http.ListenAndServeTLS(listenAddr, base.Cfg.MustValue("server", "CERT_FILE"),
base.Cfg.MustValue("server", "KEY_FILE"), m); err != nil {
qlog.Error(err.Error())
} }
if err != nil {
log.Fatal("Fail to start server: %v", err)
} }
qlog.Fatalf("Invalid protocol: %s", protocol)
} }

3
conf/app.ini

@ -25,6 +25,9 @@ DISABLE_ROUTER_LOG = false
; $ go run $GOROOT/src/pkg/crypto/tls/generate_cert.go -ca=true -duration=8760h0m0s -host=myhost.example.com ; $ go run $GOROOT/src/pkg/crypto/tls/generate_cert.go -ca=true -duration=8760h0m0s -host=myhost.example.com
CERT_FILE = custom/https/cert.pem CERT_FILE = custom/https/cert.pem
KEY_FILE = custom/https/key.pem KEY_FILE = custom/https/key.pem
; Upper level of template and static file path
; default is the path where Gogs is executed
STATIC_ROOT_PATH =
[database] [database]
; Either "mysql", "postgres" or "sqlite3", it's your choice ; Either "mysql", "postgres" or "sqlite3", it's your choice

6
gogs.go

@ -14,13 +14,13 @@ import (
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/gogits/gogs/cmd" "github.com/gogits/gogs/cmd"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/setting"
) )
const APP_VER = "0.3.5.0524 Alpha" const APP_VER = "0.3.5.0525 Alpha"
func init() { func init() {
base.AppVer = APP_VER setting.AppVer = APP_VER
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())
} }

3
models/action.go

@ -17,6 +17,7 @@ import (
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/hooks" "github.com/gogits/gogs/modules/hooks"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
) )
// Operation types of user action. // Operation types of user action.
@ -129,7 +130,7 @@ func CommitRepoAction(userId, repoUserId int64, userName, actEmail string,
return nil return nil
} }
repoLink := fmt.Sprintf("%s%s/%s", base.AppUrl, repoUserName, repoName) repoLink := fmt.Sprintf("%s%s/%s", setting.AppUrl, repoUserName, repoName)
commits := make([]*hooks.PayloadCommit, len(commit.Commits)) commits := make([]*hooks.PayloadCommit, len(commit.Commits))
for i, cmt := range commit.Commits { for i, cmt := range commit.Commits {
commits[i] = &hooks.PayloadCommit{ commits[i] = &hooks.PayloadCommit{

20
models/models.go

@ -14,7 +14,7 @@ import (
"github.com/go-xorm/xorm" "github.com/go-xorm/xorm"
_ "github.com/lib/pq" _ "github.com/lib/pq"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/setting"
) )
var ( var (
@ -39,16 +39,16 @@ func init() {
} }
func LoadModelsConfig() { func LoadModelsConfig() {
DbCfg.Type = base.Cfg.MustValue("database", "DB_TYPE") DbCfg.Type = setting.Cfg.MustValue("database", "DB_TYPE")
if DbCfg.Type == "sqlite3" { if DbCfg.Type == "sqlite3" {
UseSQLite3 = true UseSQLite3 = true
} }
DbCfg.Host = base.Cfg.MustValue("database", "HOST") DbCfg.Host = setting.Cfg.MustValue("database", "HOST")
DbCfg.Name = base.Cfg.MustValue("database", "NAME") DbCfg.Name = setting.Cfg.MustValue("database", "NAME")
DbCfg.User = base.Cfg.MustValue("database", "USER") DbCfg.User = setting.Cfg.MustValue("database", "USER")
DbCfg.Pwd = base.Cfg.MustValue("database", "PASSWD") DbCfg.Pwd = setting.Cfg.MustValue("database", "PASSWD")
DbCfg.SslMode = base.Cfg.MustValue("database", "SSL_MODE") DbCfg.SslMode = setting.Cfg.MustValue("database", "SSL_MODE")
DbCfg.Path = base.Cfg.MustValue("database", "PATH", "data/gogs.db") DbCfg.Path = setting.Cfg.MustValue("database", "PATH", "data/gogs.db")
} }
func NewTestEngine(x *xorm.Engine) (err error) { func NewTestEngine(x *xorm.Engine) (err error) {
@ -112,8 +112,8 @@ func SetEngine() (err error) {
// WARNNING: for serv command, MUST remove the output to os.stdout, // WARNNING: for serv command, MUST remove the output to os.stdout,
// so use log file to instead print to stdout. // so use log file to instead print to stdout.
execDir, _ := base.ExecDir() workDir, _ := setting.WorkDir()
logPath := execDir + "/log/xorm.log" logPath := workDir + "/log/xorm.log"
os.MkdirAll(path.Dir(logPath), os.ModePerm) os.MkdirAll(path.Dir(logPath), os.ModePerm)
f, err := os.Create(logPath) f, err := os.Create(logPath)

36
models/repo.go

@ -23,7 +23,9 @@ import (
"github.com/gogits/git" "github.com/gogits/git"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/bin"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
) )
var ( var (
@ -39,26 +41,28 @@ var (
LanguageIgns, Licenses []string LanguageIgns, Licenses []string
) )
func LoadRepoConfig() { // getAssetList returns corresponding asset list in 'conf'.
workDir, err := base.ExecDir() func getAssetList(prefix string) []string {
if err != nil { assets := make([]string, 0, 15)
qlog.Fatalf("Fail to get work directory: %s\n", err) for _, name := range bin.AssetNames() {
if strings.HasPrefix(name, prefix) {
assets = append(assets, name)
} }
}
return assets
}
func LoadRepoConfig() {
// Load .gitignore and license files. // Load .gitignore and license files.
types := []string{"gitignore", "license"} types := []string{"gitignore", "license"}
typeFiles := make([][]string, 2) typeFiles := make([][]string, 2)
for i, t := range types { for i, t := range types {
cfgPath := filepath.Join(workDir, "conf", t) files := getAssetList(path.Join("conf", t))
files, err := com.StatDir(cfgPath) customPath := path.Join(setting.CustomPath, "conf", t)
if err != nil { if com.IsDir(customPath) {
qlog.Fatalf("Fail to get default %s files: %v\n", t, err) customFiles, err := com.StatDir(customPath)
}
cfgPath = filepath.Join(workDir, "custom/conf/gitignore")
if com.IsDir(cfgPath) {
customFiles, err := com.StatDir(cfgPath)
if err != nil { if err != nil {
qlog.Fatalf("Fail to get custom %s files: %v\n", t, err) log.Fatal("Fail to get custom %s files: %v", t, err)
} }
for _, f := range customFiles { for _, f := range customFiles {
@ -192,7 +196,7 @@ func MirrorUpdate() {
return nil return nil
} }
repoPath := filepath.Join(base.RepoRootPath, m.RepoName+".git") repoPath := filepath.Join(setting.RepoRootPath, m.RepoName+".git")
_, stderr, err := com.ExecCmdDir(repoPath, "git", "remote", "update") _, stderr, err := com.ExecCmdDir(repoPath, "git", "remote", "update")
if err != nil { if err != nil {
return errors.New("git remote update: " + stderr) return errors.New("git remote update: " + stderr)
@ -434,7 +438,7 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep
rp := strings.NewReplacer("\\", "/", " ", "\\ ") rp := strings.NewReplacer("\\", "/", " ", "\\ ")
// hook/post-update // hook/post-update
if err := createHookUpdate(filepath.Join(repoPath, "hooks", "update"), if err := createHookUpdate(filepath.Join(repoPath, "hooks", "update"),
fmt.Sprintf("#!/usr/bin/env %s\n%s update $1 $2 $3\n", base.ScriptType, fmt.Sprintf("#!/usr/bin/env %s\n%s update $1 $2 $3\n", setting.ScriptType,
rp.Replace(appPath))); err != nil { rp.Replace(appPath))); err != nil {
return err return err
} }
@ -452,7 +456,7 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep
} }
// Clone to temprory path and do the init commit. // Clone to temprory path and do the init commit.
tmpDir := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond())) tmpDir := filepath.Join(os.TempDir(), base.ToStr(time.Now().Nanosecond()))
os.MkdirAll(tmpDir, os.ModePerm) os.MkdirAll(tmpDir, os.ModePerm)
_, stderr, err := com.ExecCmd("git", "clone", repoPath, tmpDir) _, stderr, err := com.ExecCmd("git", "clone", repoPath, tmpDir)

9
models/user.go

@ -18,6 +18,7 @@ import (
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
) )
// User types. // User types.
@ -73,9 +74,9 @@ func (user *User) HomeLink() string {
// AvatarLink returns the user gravatar link. // AvatarLink returns the user gravatar link.
func (user *User) AvatarLink() string { func (user *User) AvatarLink() string {
if base.DisableGravatar { if setting.DisableGravatar {
return "/img/avatar_default.jpg" return "/img/avatar_default.jpg"
} else if base.Service.EnableCacheAvatar { } else if setting.Service.EnableCacheAvatar {
return "/avatar/" + user.Avatar return "/avatar/" + user.Avatar
} }
return "//1.gravatar.com/avatar/" + user.Avatar return "//1.gravatar.com/avatar/" + user.Avatar
@ -197,7 +198,7 @@ func getVerifyUser(code string) (user *User) {
// verify active code when active account // verify active code when active account
func VerifyUserActiveCode(code string) (user *User) { func VerifyUserActiveCode(code string) (user *User) {
minutes := base.Service.ActiveCodeLives minutes := setting.Service.ActiveCodeLives
if user = getVerifyUser(code); user != nil { if user = getVerifyUser(code); user != nil {
// time limit code // time limit code
@ -340,7 +341,7 @@ func DeleteUser(user *User) error {
// UserPath returns the path absolute path of user repositories. // UserPath returns the path absolute path of user repositories.
func UserPath(userName string) string { func UserPath(userName string) string {
return filepath.Join(base.RepoRootPath, strings.ToLower(userName)) return filepath.Join(setting.RepoRootPath, strings.ToLower(userName))
} }
func GetUserByKeyId(keyId int64) (*User, error) { func GetUserByKeyId(keyId int64) (*User, error) {

10
modules/base/template.go

@ -13,6 +13,8 @@ import (
"runtime" "runtime"
"strings" "strings"
"time" "time"
"github.com/gogits/gogs/modules/setting"
) )
func Str2html(raw string) template.HTML { func Str2html(raw string) template.HTML {
@ -52,16 +54,16 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{
return runtime.Version() return runtime.Version()
}, },
"AppName": func() string { "AppName": func() string {
return AppName return setting.AppName
}, },
"AppVer": func() string { "AppVer": func() string {
return AppVer return setting.AppVer
}, },
"AppDomain": func() string { "AppDomain": func() string {
return Domain return setting.Domain
}, },
"CdnMode": func() bool { "CdnMode": func() bool {
return ProdMode && !OfflineMode return setting.ProdMode && !setting.OfflineMode
}, },
"LoadTimes": func(startTime time.Time) string { "LoadTimes": func(startTime time.Time) string {
return fmt.Sprint(time.Since(startTime).Nanoseconds()/1e6) + "ms" return fmt.Sprint(time.Since(startTime).Nanoseconds()/1e6) + "ms"

8
modules/base/tool.go

@ -16,6 +16,8 @@ import (
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/gogits/gogs/modules/setting"
) )
// Encode string to md5 hex value // Encode string to md5 hex value
@ -131,7 +133,7 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string
// create sha1 encode string // create sha1 encode string
sh := sha1.New() sh := sha1.New()
sh.Write([]byte(data + SecretKey + startStr + endStr + ToStr(minutes))) sh.Write([]byte(data + setting.SecretKey + startStr + endStr + ToStr(minutes)))
encoded := hex.EncodeToString(sh.Sum(nil)) encoded := hex.EncodeToString(sh.Sum(nil))
code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded) code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded)
@ -140,9 +142,9 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string
// AvatarLink returns avatar link by given e-mail. // AvatarLink returns avatar link by given e-mail.
func AvatarLink(email string) string { func AvatarLink(email string) string {
if DisableGravatar { if setting.DisableGravatar {
return "/img/avatar_default.jpg" return "/img/avatar_default.jpg"
} else if Service.EnableCacheAvatar { } else if setting.Service.EnableCacheAvatar {
return "/avatar/" + EncodeMd5(email) return "/avatar/" + EncodeMd5(email)
} }
return "//1.gravatar.com/avatar/" + EncodeMd5(email) return "//1.gravatar.com/avatar/" + EncodeMd5(email)

220
modules/bin/conf.go

@ -0,0 +1,220 @@
package bin
import (
"fmt"
"io/ioutil"
"strings"
)
// bindata_read reads the given file from disk. It returns an error on failure.
func bindata_read(path, name string) ([]byte, error) {
buf, err := ioutil.ReadFile(path)
if err != nil {
err = fmt.Errorf("Error reading asset %s at %s: %v", name, path, err)
}
return buf, err
}
// conf_app_ini reads file data from disk. It returns an error on failure.
func conf_app_ini() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/app.ini",
"conf/app.ini",
)
}
// conf_content_git_bare_zip reads file data from disk. It returns an error on failure.
func conf_content_git_bare_zip() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/content/git-bare.zip",
"conf/content/git-bare.zip",
)
}
// conf_etc_supervisord_conf reads file data from disk. It returns an error on failure.
func conf_etc_supervisord_conf() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/etc/supervisord.conf",
"conf/etc/supervisord.conf",
)
}
// conf_gitignore_android reads file data from disk. It returns an error on failure.
func conf_gitignore_android() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/Android",
"conf/gitignore/Android",
)
}
// conf_gitignore_c reads file data from disk. It returns an error on failure.
func conf_gitignore_c() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/C",
"conf/gitignore/C",
)
}
// conf_gitignore_c_sharp reads file data from disk. It returns an error on failure.
func conf_gitignore_c_sharp() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/C Sharp",
"conf/gitignore/C Sharp",
)
}
// conf_gitignore_c_ reads file data from disk. It returns an error on failure.
func conf_gitignore_c_() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/C++",
"conf/gitignore/C++",
)
}
// conf_gitignore_google_go reads file data from disk. It returns an error on failure.
func conf_gitignore_google_go() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/Google Go",
"conf/gitignore/Google Go",
)
}
// conf_gitignore_java reads file data from disk. It returns an error on failure.
func conf_gitignore_java() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/Java",
"conf/gitignore/Java",
)
}
// conf_gitignore_objective_c reads file data from disk. It returns an error on failure.
func conf_gitignore_objective_c() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/Objective-C",
"conf/gitignore/Objective-C",
)
}
// conf_gitignore_python reads file data from disk. It returns an error on failure.
func conf_gitignore_python() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/Python",
"conf/gitignore/Python",
)
}
// conf_gitignore_ruby reads file data from disk. It returns an error on failure.
func conf_gitignore_ruby() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/gitignore/Ruby",
"conf/gitignore/Ruby",
)
}
// conf_license_affero_gpl reads file data from disk. It returns an error on failure.
func conf_license_affero_gpl() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/license/Affero GPL",
"conf/license/Affero GPL",
)
}
// conf_license_apache_v2_license reads file data from disk. It returns an error on failure.
func conf_license_apache_v2_license() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/license/Apache v2 License",
"conf/license/Apache v2 License",
)
}
// conf_license_artistic_license_2_0 reads file data from disk. It returns an error on failure.
func conf_license_artistic_license_2_0() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/license/Artistic License 2.0",
"conf/license/Artistic License 2.0",
)
}
// conf_license_bsd_3_clause_license reads file data from disk. It returns an error on failure.
func conf_license_bsd_3_clause_license() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/license/BSD (3-Clause) License",
"conf/license/BSD (3-Clause) License",
)
}
// conf_license_gpl_v2 reads file data from disk. It returns an error on failure.
func conf_license_gpl_v2() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/license/GPL v2",
"conf/license/GPL v2",
)
}
// conf_license_mit_license reads file data from disk. It returns an error on failure.
func conf_license_mit_license() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/license/MIT License",
"conf/license/MIT License",
)
}
// conf_mysql_sql reads file data from disk. It returns an error on failure.
func conf_mysql_sql() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/mysql.sql",
"conf/mysql.sql",
)
}
// conf_supervisor_ini reads file data from disk. It returns an error on failure.
func conf_supervisor_ini() ([]byte, error) {
return bindata_read(
"/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs/conf/supervisor.ini",
"conf/supervisor.ini",
)
}
// Asset loads and returns the asset for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func Asset(name string) ([]byte, error) {
cannonicalName := strings.Replace(name, "\\", "/", -1)
if f, ok := _bindata[cannonicalName]; ok {
return f()
}
return nil, fmt.Errorf("Asset %s not found", name)
}
// AssetNames returns the names of the assets.
func AssetNames() []string {
names := make([]string, 0, len(_bindata))
for name := range _bindata {
names = append(names, name)
}
return names
}
// _bindata is a table, holding each asset generator, mapped to its name.
var _bindata = map[string]func() ([]byte, error){
"conf/app.ini": conf_app_ini,
"conf/content/git-bare.zip": conf_content_git_bare_zip,
"conf/etc/supervisord.conf": conf_etc_supervisord_conf,
"conf/gitignore/Android": conf_gitignore_android,
"conf/gitignore/C": conf_gitignore_c,
"conf/gitignore/C Sharp": conf_gitignore_c_sharp,
"conf/gitignore/C++": conf_gitignore_c_,
"conf/gitignore/Google Go": conf_gitignore_google_go,
"conf/gitignore/Java": conf_gitignore_java,
"conf/gitignore/Objective-C": conf_gitignore_objective_c,
"conf/gitignore/Python": conf_gitignore_python,
"conf/gitignore/Ruby": conf_gitignore_ruby,
"conf/license/Affero GPL": conf_license_affero_gpl,
"conf/license/Apache v2 License": conf_license_apache_v2_license,
"conf/license/Artistic License 2.0": conf_license_artistic_license_2_0,
"conf/license/BSD (3-Clause) License": conf_license_bsd_3_clause_license,
"conf/license/GPL v2": conf_license_gpl_v2,
"conf/license/MIT License": conf_license_mit_license,
"conf/mysql.sql": conf_mysql_sql,
"conf/supervisor.ini": conf_supervisor_ini,
}

10
modules/log/log.go

@ -6,6 +6,8 @@
package log package log
import ( import (
"os"
"github.com/gogits/logs" "github.com/gogits/logs"
) )
@ -69,3 +71,11 @@ func Critical(format string, v ...interface{}) {
logger.Critical(format, v...) logger.Critical(format, v...)
} }
} }
func Fatal(format string, v ...interface{}) {
Error(format, v...)
for _, l := range loggers {
l.Close()
}
os.Exit(2)
}

21
modules/mailer/mail.go

@ -14,28 +14,29 @@ import (
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
) )
// Create New mail message use MailFrom and MailUser // Create New mail message use MailFrom and MailUser
func NewMailMessageFrom(To []string, from, subject, body string) Message { func NewMailMessageFrom(To []string, from, subject, body string) Message {
msg := NewHtmlMessage(To, from, subject, body) msg := NewHtmlMessage(To, from, subject, body)
msg.User = base.MailService.User msg.User = setting.MailService.User
return msg return msg
} }
// Create New mail message use MailFrom and MailUser // Create New mail message use MailFrom and MailUser
func NewMailMessage(To []string, subject, body string) Message { func NewMailMessage(To []string, subject, body string) Message {
return NewMailMessageFrom(To, base.MailService.User, subject, body) return NewMailMessageFrom(To, setting.MailService.User, subject, body)
} }
func GetMailTmplData(user *models.User) map[interface{}]interface{} { func GetMailTmplData(user *models.User) map[interface{}]interface{} {
data := make(map[interface{}]interface{}, 10) data := make(map[interface{}]interface{}, 10)
data["AppName"] = base.AppName data["AppName"] = setting.AppName
data["AppVer"] = base.AppVer data["AppVer"] = setting.AppVer
data["AppUrl"] = base.AppUrl data["AppUrl"] = setting.AppUrl
data["AppLogo"] = base.AppLogo data["AppLogo"] = setting.AppLogo
data["ActiveCodeLives"] = base.Service.ActiveCodeLives / 60 data["ActiveCodeLives"] = setting.Service.ActiveCodeLives / 60
data["ResetPwdCodeLives"] = base.Service.ResetPwdCodeLives / 60 data["ResetPwdCodeLives"] = setting.Service.ResetPwdCodeLives / 60
if user != nil { if user != nil {
data["User"] = user data["User"] = user
} }
@ -44,7 +45,7 @@ func GetMailTmplData(user *models.User) map[interface{}]interface{} {
// create a time limit code for user active // create a time limit code for user active
func CreateUserActiveCode(user *models.User, startInf interface{}) string { func CreateUserActiveCode(user *models.User, startInf interface{}) string {
minutes := base.Service.ActiveCodeLives minutes := setting.Service.ActiveCodeLives
data := base.ToStr(user.Id) + user.Email + user.LowerName + user.Passwd + user.Rands data := base.ToStr(user.Id) + user.Email + user.LowerName + user.Passwd + user.Rands
code := base.CreateTimeLimitCode(data, minutes, startInf) code := base.CreateTimeLimitCode(data, minutes, startInf)
@ -139,7 +140,7 @@ func SendIssueNotifyMail(user, owner *models.User, repo *models.Repository, issu
subject := fmt.Sprintf("[%s] %s(#%d)", repo.Name, issue.Name, issue.Index) subject := fmt.Sprintf("[%s] %s(#%d)", repo.Name, issue.Name, issue.Index)
content := fmt.Sprintf("%s<br>-<br> <a href=\"%s%s/%s/issues/%d\">View it on Gogs</a>.", content := fmt.Sprintf("%s<br>-<br> <a href=\"%s%s/%s/issues/%d\">View it on Gogs</a>.",
base.RenderSpecialLink([]byte(issue.Content), owner.Name+"/"+repo.Name), base.RenderSpecialLink([]byte(issue.Content), owner.Name+"/"+repo.Name),
base.AppUrl, owner.Name, repo.Name, issue.Index) setting.AppUrl, owner.Name, repo.Name, issue.Index)
msg := NewMailMessageFrom(tos, user.Email, subject, content) msg := NewMailMessageFrom(tos, user.Email, subject, content)
msg.Info = fmt.Sprintf("Subject: %s, send issue notify emails", subject) msg.Info = fmt.Sprintf("Subject: %s, send issue notify emails", subject)
SendAsync(&msg) SendAsync(&msg)

12
modules/mailer/mailer.go

@ -9,8 +9,8 @@ import (
"net/smtp" "net/smtp"
"strings" "strings"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
) )
type Message struct { type Message struct {
@ -41,7 +41,7 @@ func (m Message) Content() string {
var mailQueue chan *Message var mailQueue chan *Message
func NewMailerContext() { func NewMailerContext() {
mailQueue = make(chan *Message, base.Cfg.MustInt("mailer", "SEND_BUFFER_LEN", 10)) mailQueue = make(chan *Message, setting.Cfg.MustInt("mailer", "SEND_BUFFER_LEN", 10))
go processMailQueue() go processMailQueue()
} }
@ -67,7 +67,7 @@ func processMailQueue() {
// Direct Send mail message // Direct Send mail message
func Send(msg *Message) (int, error) { func Send(msg *Message) (int, error) {
log.Trace("Sending mails to: %s", strings.Join(msg.To, "; ")) log.Trace("Sending mails to: %s", strings.Join(msg.To, "; "))
host := strings.Split(base.MailService.Host, ":") host := strings.Split(setting.MailService.Host, ":")
// get message body // get message body
content := msg.Content() content := msg.Content()
@ -78,14 +78,14 @@ func Send(msg *Message) (int, error) {
return 0, fmt.Errorf("empty email body") return 0, fmt.Errorf("empty email body")
} }
auth := smtp.PlainAuth("", base.MailService.User, base.MailService.Passwd, host[0]) auth := smtp.PlainAuth("", setting.MailService.User, setting.MailService.Passwd, host[0])
if msg.Massive { if msg.Massive {
// send mail to multiple emails one by one // send mail to multiple emails one by one
num := 0 num := 0
for _, to := range msg.To { for _, to := range msg.To {
body := []byte("To: " + to + "\r\n" + content) body := []byte("To: " + to + "\r\n" + content)
err := smtp.SendMail(base.MailService.Host, auth, msg.From, []string{to}, body) err := smtp.SendMail(setting.MailService.Host, auth, msg.From, []string{to}, body)
if err != nil { if err != nil {
return num, err return num, err
} }
@ -96,7 +96,7 @@ func Send(msg *Message) (int, error) {
body := []byte("To: " + strings.Join(msg.To, ";") + "\r\n" + content) body := []byte("To: " + strings.Join(msg.To, ";") + "\r\n" + content)
// send to multiple emails in one message // send to multiple emails in one message
err := smtp.SendMail(base.MailService.Host, auth, msg.From, msg.To, body) err := smtp.SendMail(setting.MailService.Host, auth, msg.From, msg.To, body)
if err != nil { if err != nil {
return 0, err return 0, err
} else { } else {

6
modules/middleware/auth.go

@ -10,7 +10,7 @@ import (
"github.com/go-martini/martini" "github.com/go-martini/martini"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/setting"
) )
type ToggleOptions struct { type ToggleOptions struct {
@ -23,7 +23,7 @@ type ToggleOptions struct {
func Toggle(options *ToggleOptions) martini.Handler { func Toggle(options *ToggleOptions) martini.Handler {
return func(ctx *Context) { return func(ctx *Context) {
// Cannot view any page before installation. // Cannot view any page before installation.
if !base.InstallLock { if !setting.InstallLock {
ctx.Redirect("/install") ctx.Redirect("/install")
return return
} }
@ -48,7 +48,7 @@ func Toggle(options *ToggleOptions) martini.Handler {
ctx.SetCookie("redirect_to", "/"+url.QueryEscape(ctx.Req.RequestURI)) ctx.SetCookie("redirect_to", "/"+url.QueryEscape(ctx.Req.RequestURI))
ctx.Redirect("/user/login") ctx.Redirect("/user/login")
return return
} else if !ctx.User.IsActive && base.Service.RegisterEmailConfirm { } else if !ctx.User.IsActive && setting.Service.RegisterEmailConfirm {
ctx.Data["Title"] = "Activate Your Account" ctx.Data["Title"] = "Activate Your Account"
ctx.HTML(200, "user/activate") ctx.HTML(200, "user/activate")
return return

5
modules/middleware/context.go

@ -28,6 +28,7 @@ import (
"github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
) )
// Context represents context of a request. // Context represents context of a request.
@ -325,14 +326,14 @@ func InitContext() martini.Handler {
// p: p, // p: p,
Req: r, Req: r,
Res: res, Res: res,
Cache: base.Cache, Cache: setting.Cache,
Render: rd, Render: rd,
} }
ctx.Data["PageStartTime"] = time.Now() ctx.Data["PageStartTime"] = time.Now()
// start session // start session
ctx.Session = base.SessionManager.SessionStart(res, r) ctx.Session = setting.SessionManager.SessionStart(res, r)
// Get flash. // Get flash.
values, err := url.ParseQuery(ctx.GetCookie("gogs_flash")) values, err := url.ParseQuery(ctx.GetCookie("gogs_flash"))

4
modules/middleware/logger.go

@ -13,7 +13,7 @@ import (
"github.com/go-martini/martini" "github.com/go-martini/martini"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/setting"
) )
var isWindows bool var isWindows bool
@ -24,7 +24,7 @@ func init() {
func Logger() martini.Handler { func Logger() martini.Handler {
return func(res http.ResponseWriter, req *http.Request, ctx martini.Context, log *log.Logger) { return func(res http.ResponseWriter, req *http.Request, ctx martini.Context, log *log.Logger) {
if base.DisableRouterLog { if setting.DisableRouterLog {
return return
} }

8
modules/middleware/render.go

@ -39,25 +39,17 @@ var helperFuncs = template.FuncMap{
type Delims struct { type Delims struct {
Left string Left string
Right string Right string
} }
type RenderOptions struct { type RenderOptions struct {
Directory string Directory string
Layout string Layout string
Extensions []string Extensions []string
Funcs []template.FuncMap Funcs []template.FuncMap
Delims Delims Delims Delims
Charset string Charset string
IndentJSON bool IndentJSON bool
HTMLContentType string HTMLContentType string
} }

14
modules/middleware/repo.go

@ -15,8 +15,8 @@ import (
"github.com/gogits/git" "github.com/gogits/git"
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
) )
func RepoAssignment(redirect bool, args ...bool) martini.Handler { func RepoAssignment(redirect bool, args ...bool) martini.Handler {
@ -159,17 +159,17 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler {
ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner
ctx.Data["BranchName"] = "" ctx.Data["BranchName"] = ""
if base.SshPort != 22 { if setting.SshPort != 22 {
ctx.Repo.CloneLink.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName) ctx.Repo.CloneLink.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", setting.RunUser, setting.Domain, user.LowerName, repo.LowerName)
} else { } else {
ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName) ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.Domain, user.LowerName, repo.LowerName)
} }
ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", base.AppUrl, user.LowerName, repo.LowerName) ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, user.LowerName, repo.LowerName)
ctx.Data["CloneLink"] = ctx.Repo.CloneLink ctx.Data["CloneLink"] = ctx.Repo.CloneLink
if ctx.Repo.Repository.IsGoget { if ctx.Repo.Repository.IsGoget {
ctx.Data["GoGetLink"] = fmt.Sprintf("%s%s/%s", base.AppUrl, user.LowerName, repo.LowerName) ctx.Data["GoGetLink"] = fmt.Sprintf("%s%s/%s", setting.AppUrl, user.LowerName, repo.LowerName)
ctx.Data["GoGetImport"] = fmt.Sprintf("%s/%s/%s", base.Domain, user.LowerName, repo.LowerName) ctx.Data["GoGetImport"] = fmt.Sprintf("%s/%s/%s", setting.Domain, user.LowerName, repo.LowerName)
} }
// when repo is bare, not valid branch // when repo is bare, not valid branch

293
modules/base/conf.go → modules/setting/setting.go

@ -2,7 +2,7 @@
// Use of this source code is governed by a MIT-style // Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
package base package setting
import ( import (
"fmt" "fmt"
@ -14,78 +14,171 @@ import (
"github.com/Unknwon/com" "github.com/Unknwon/com"
"github.com/Unknwon/goconfig" "github.com/Unknwon/goconfig"
qlog "github.com/qiniu/log"
"github.com/gogits/cache" "github.com/gogits/cache"
"github.com/gogits/session" "github.com/gogits/session"
"github.com/gogits/gogs/modules/bin"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
) )
// Mailer represents mail service. type Scheme string
type Mailer struct {
Name string
Host string
User, Passwd string
}
type OauthInfo struct {
ClientId, ClientSecret string
Scopes string
AuthUrl, TokenUrl string
}
// Oauther represents oauth service. const (
type Oauther struct { HTTP Scheme = "http"
GitHub, Google, Tencent, HTTPS Scheme = "https"
Twitter, Weibo bool )
OauthInfos map[string]*OauthInfo
}
var ( var (
// App settings.
AppVer string AppVer string
AppName string AppName string
AppLogo string AppLogo string
AppUrl string AppUrl string
// Server settings.
Protocol Scheme
Domain string
HttpAddr, HttpPort string
SshPort int SshPort int
OfflineMode bool OfflineMode bool
DisableRouterLog bool DisableRouterLog bool
ProdMode bool CertFile, KeyFile string
Domain string StaticRootPath string
SecretKey string
RunUser string
RepoRootPath string
ScriptType string
// Security settings.
InstallLock bool InstallLock bool
SecretKey string
LogInRememberDays int LogInRememberDays int
CookieUserName string CookieUserName string
CookieRememberName string CookieRememberName string
Cfg *goconfig.ConfigFile // Repository settings.
MailService *Mailer RepoRootPath string
OauthService *Oauther ScriptType string
// Picture settings.
PictureService string
DisableGravatar bool
// Log settings.
LogModes []string LogModes []string
LogConfigs []string LogConfigs []string
// Cache settings.
Cache cache.Cache Cache cache.Cache
CacheAdapter string CacheAdapter string
CacheConfig string CacheConfig string
EnableRedis bool
EnableMemcache bool
// Session settings.
SessionProvider string SessionProvider string
SessionConfig *session.Config SessionConfig *session.Config
SessionManager *session.Manager SessionManager *session.Manager
PictureService string // Global setting objects.
DisableGravatar bool Cfg *goconfig.ConfigFile
CustomPath string // Custom directory path.
EnableRedis bool ProdMode bool
EnableMemcache bool RunUser string
) )
// WorkDir returns absolute path of work directory.
func WorkDir() (string, error) {
file, err := exec.LookPath(os.Args[0])
if err != nil {
return "", err
}
p, err := filepath.Abs(file)
if err != nil {
return "", err
}
return path.Dir(strings.Replace(p, "\\", "/", -1)), nil
}
// NewConfigContext initializes configuration context.
func NewConfigContext() {
workDir, err := WorkDir()
if err != nil {
log.Fatal("Fail to get work directory: %v", err)
}
data, err := bin.Asset("conf/app.ini")
if err != nil {
log.Fatal("Fail to read 'conf/app.ini': %v", err)
}
Cfg, err = goconfig.LoadFromData(data)
if err != nil {
log.Fatal("Fail to parse 'conf/app.ini': %v", err)
}
CustomPath = os.Getenv("GOGS_CUSTOM")
if len(CustomPath) == 0 {
CustomPath = path.Join(workDir, "custom")
}
log.Trace("Custom path: %s", CustomPath)
cfgPath := path.Join(CustomPath, "conf/app.ini")
if com.IsFile(cfgPath) {
if err = Cfg.AppendFiles(cfgPath); err != nil {
log.Fatal("Fail to load custom 'conf/app.ini': %v", err)
}
} else {
log.Warn("No custom 'conf/app.ini' found")
}
AppName = Cfg.MustValue("", "APP_NAME", "Gogs: Go Git Service")
AppLogo = Cfg.MustValue("", "APP_LOGO", "img/favicon.png")
AppUrl = Cfg.MustValue("server", "ROOT_URL", "http://localhost:3000")
Protocol = HTTP
if Cfg.MustValue("server", "PROTOCOL") == "https" {
Protocol = HTTPS
CertFile = Cfg.MustValue("server", "CERT_FILE")
KeyFile = Cfg.MustValue("server", "KEY_FILE")
}
Domain = Cfg.MustValue("server", "DOMAIN", "localhost")
HttpAddr = Cfg.MustValue("server", "HTTP_ADDR", "0.0.0.0")
HttpPort = Cfg.MustValue("server", "HTTP_PORT", "3000")
SshPort = Cfg.MustInt("server", "SSH_PORT", 22)
OfflineMode = Cfg.MustBool("server", "OFFLINE_MODE")
DisableRouterLog = Cfg.MustBool("server", "DISABLE_ROUTER_LOG")
StaticRootPath = Cfg.MustValue("server", "STATIC_ROOT_PATH")
InstallLock = Cfg.MustBool("security", "INSTALL_LOCK")
SecretKey = Cfg.MustValue("security", "SECRET_KEY")
LogInRememberDays = Cfg.MustInt("security", "LOGIN_REMEMBER_DAYS")
CookieUserName = Cfg.MustValue("security", "COOKIE_USERNAME")
CookieRememberName = Cfg.MustValue("security", "COOKIE_REMEMBER_NAME")
RunUser = Cfg.MustValue("", "RUN_USER")
curUser := os.Getenv("USER")
if len(curUser) == 0 {
curUser = os.Getenv("USERNAME")
}
// Does not check run user when the install lock is off.
if InstallLock && RunUser != curUser {
log.Fatal("Expect user(%s) but current user is: %s", RunUser, curUser)
}
// Determine and create root git reposiroty path.
homeDir, err := com.HomeDir()
if err != nil {
log.Fatal("Fail to get home directory: %v", err)
}
RepoRootPath = Cfg.MustValue("repository", "ROOT", filepath.Join(homeDir, "gogs-repositories"))
if err = os.MkdirAll(RepoRootPath, os.ModePerm); err != nil {
log.Fatal("Fail to create repository root path(%s): %v", RepoRootPath, err)
}
ScriptType = Cfg.MustValue("repository", "SCRIPT_TYPE", "bash")
PictureService = Cfg.MustValueRange("picture", "SERVICE", "server",
[]string{"server"})
DisableGravatar = Cfg.MustBool("picture", "DISABLE_GRAVATAR")
}
var Service struct { var Service struct {
RegisterEmailConfirm bool RegisterEmailConfirm bool
DisableRegistration bool DisableRegistration bool
@ -97,17 +190,12 @@ var Service struct {
LdapAuth bool LdapAuth bool
} }
// ExecDir returns absolute path execution(binary) path. func newService() {
func ExecDir() (string, error) { Service.ActiveCodeLives = Cfg.MustInt("service", "ACTIVE_CODE_LIVE_MINUTES", 180)
file, err := exec.LookPath(os.Args[0]) Service.ResetPwdCodeLives = Cfg.MustInt("service", "RESET_PASSWD_CODE_LIVE_MINUTES", 180)
if err != nil { Service.DisableRegistration = Cfg.MustBool("service", "DISABLE_REGISTRATION")
return "", err Service.RequireSignInView = Cfg.MustBool("service", "REQUIRE_SIGNIN_VIEW")
} Service.EnableCacheAvatar = Cfg.MustBool("service", "ENABLE_CACHE_AVATAR")
p, err := filepath.Abs(file)
if err != nil {
return "", err
}
return path.Dir(strings.Replace(p, "\\", "/", -1)), nil
} }
var logLevels = map[string]string{ var logLevels = map[string]string{
@ -119,14 +207,6 @@ var logLevels = map[string]string{
"Critical": "5", "Critical": "5",
} }
func newService() {
Service.ActiveCodeLives = Cfg.MustInt("service", "ACTIVE_CODE_LIVE_MINUTES", 180)
Service.ResetPwdCodeLives = Cfg.MustInt("service", "RESET_PASSWD_CODE_LIVE_MINUTES", 180)
Service.DisableRegistration = Cfg.MustBool("service", "DISABLE_REGISTRATION", false)
Service.RequireSignInView = Cfg.MustBool("service", "REQUIRE_SIGNIN_VIEW", false)
Service.EnableCacheAvatar = Cfg.MustBool("service", "ENABLE_CACHE_AVATAR", false)
}
func newLogService() { func newLogService() {
log.Info("%s %s", AppName, AppVer) log.Info("%s %s", AppName, AppVer)
@ -137,7 +217,7 @@ func newLogService() {
mode = strings.TrimSpace(mode) mode = strings.TrimSpace(mode)
modeSec := "log." + mode modeSec := "log." + mode
if _, err := Cfg.GetSection(modeSec); err != nil { if _, err := Cfg.GetSection(modeSec); err != nil {
qlog.Fatalf("Unknown log mode: %s\n", mode) log.Fatal("Unknown log mode: %s", mode)
} }
// Log level. // Log level.
@ -145,7 +225,7 @@ func newLogService() {
[]string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"}) []string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"})
level, ok := logLevels[levelName] level, ok := logLevels[levelName]
if !ok { if !ok {
qlog.Fatalf("Unknown log level: %s\n", levelName) log.Fatal("Unknown log level: %s", levelName)
} }
// Generate log configuration. // Generate log configuration.
@ -165,8 +245,8 @@ func newLogService() {
Cfg.MustInt(modeSec, "MAX_DAYS", 7)) Cfg.MustInt(modeSec, "MAX_DAYS", 7))
case "conn": case "conn":
LogConfigs[i] = fmt.Sprintf(`{"level":"%s","reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level, LogConfigs[i] = fmt.Sprintf(`{"level":"%s","reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level,
Cfg.MustBool(modeSec, "RECONNECT_ON_MSG", false), Cfg.MustBool(modeSec, "RECONNECT_ON_MSG"),
Cfg.MustBool(modeSec, "RECONNECT", false), Cfg.MustBool(modeSec, "RECONNECT"),
Cfg.MustValueRange(modeSec, "PROTOCOL", "tcp", []string{"tcp", "unix", "udp"}), Cfg.MustValueRange(modeSec, "PROTOCOL", "tcp", []string{"tcp", "unix", "udp"}),
Cfg.MustValue(modeSec, "ADDR", ":7020")) Cfg.MustValue(modeSec, "ADDR", ":7020"))
case "smtp": case "smtp":
@ -202,13 +282,13 @@ func newCacheService() {
case "redis", "memcache": case "redis", "memcache":
CacheConfig = fmt.Sprintf(`{"conn":"%s"}`, Cfg.MustValue("cache", "HOST")) CacheConfig = fmt.Sprintf(`{"conn":"%s"}`, Cfg.MustValue("cache", "HOST"))
default: default:
qlog.Fatalf("Unknown cache adapter: %s\n", CacheAdapter) log.Fatal("Unknown cache adapter: %s", CacheAdapter)
} }
var err error var err error
Cache, err = cache.NewCache(CacheAdapter, CacheConfig) Cache, err = cache.NewCache(CacheAdapter, CacheConfig)
if err != nil { if err != nil {
qlog.Fatalf("Init cache system failed, adapter: %s, config: %s, %v\n", log.Fatal("Init cache system failed, adapter: %s, config: %s, %v\n",
CacheAdapter, CacheConfig, err) CacheAdapter, CacheConfig, err)
} }
@ -237,13 +317,38 @@ func newSessionService() {
var err error var err error
SessionManager, err = session.NewManager(SessionProvider, *SessionConfig) SessionManager, err = session.NewManager(SessionProvider, *SessionConfig)
if err != nil { if err != nil {
qlog.Fatalf("Init session system failed, provider: %s, %v\n", log.Fatal("Init session system failed, provider: %s, %v",
SessionProvider, err) SessionProvider, err)
} }
log.Info("Session Service Enabled") log.Info("Session Service Enabled")
} }
// Mailer represents mail service.
type Mailer struct {
Name string
Host string
User, Passwd string
}
type OauthInfo struct {
ClientId, ClientSecret string
Scopes string
AuthUrl, TokenUrl string
}
// Oauther represents oauth service.
type Oauther struct {
GitHub, Google, Tencent,
Twitter, Weibo bool
OauthInfos map[string]*OauthInfo
}
var (
MailService *Mailer
OauthService *Oauther
)
func newMailService() { func newMailService() {
// Check mailer setting. // Check mailer setting.
if !Cfg.MustBool("mailer", "ENABLED") { if !Cfg.MustBool("mailer", "ENABLED") {
@ -281,69 +386,7 @@ func newNotifyMailService() {
log.Info("Notify Mail Service Enabled") log.Info("Notify Mail Service Enabled")
} }
func NewConfigContext() { func NewServices() {
workDir, err := ExecDir()
if err != nil {
qlog.Fatalf("Fail to get work directory: %s\n", err)
}
cfgPath := filepath.Join(workDir, "conf/app.ini")
Cfg, err = goconfig.LoadConfigFile(cfgPath)
if err != nil {
qlog.Fatalf("Cannot load config file(%s): %v\n", cfgPath, err)
}
Cfg.BlockMode = false
cfgPaths := []string{os.Getenv("GOGS_CONFIG"), filepath.Join(workDir, "custom/conf/app.ini")}
for _, cfgPath := range cfgPaths {
if com.IsFile(cfgPath) {
if err = Cfg.AppendFiles(cfgPath); err != nil {
qlog.Fatalf("Cannot load config file(%s): %v\n", cfgPath, err)
}
}
}
AppName = Cfg.MustValue("", "APP_NAME", "Gogs: Go Git Service")
AppLogo = Cfg.MustValue("", "APP_LOGO", "img/favicon.png")
AppUrl = Cfg.MustValue("server", "ROOT_URL")
Domain = Cfg.MustValue("server", "DOMAIN")
SshPort = Cfg.MustInt("server", "SSH_PORT", 22)
OfflineMode = Cfg.MustBool("server", "OFFLINE_MODE", false)
DisableRouterLog = Cfg.MustBool("server", "DISABLE_ROUTER_LOG", false)
SecretKey = Cfg.MustValue("security", "SECRET_KEY")
InstallLock = Cfg.MustBool("security", "INSTALL_LOCK", false)
RunUser = Cfg.MustValue("", "RUN_USER")
curUser := os.Getenv("USER")
if len(curUser) == 0 {
curUser = os.Getenv("USERNAME")
}
// Does not check run user when the install lock is off.
if InstallLock && RunUser != curUser {
qlog.Fatalf("Expect user(%s) but current user is: %s\n", RunUser, curUser)
}
LogInRememberDays = Cfg.MustInt("security", "LOGIN_REMEMBER_DAYS")
CookieUserName = Cfg.MustValue("security", "COOKIE_USERNAME")
CookieRememberName = Cfg.MustValue("security", "COOKIE_REMEMBER_NAME")
PictureService = Cfg.MustValue("picture", "SERVICE")
DisableGravatar = Cfg.MustBool("picture", "DISABLE_GRAVATAR", false)
// Determine and create root git reposiroty path.
homeDir, err := com.HomeDir()
if err != nil {
qlog.Fatalf("Fail to get home directory): %v\n", err)
}
RepoRootPath = Cfg.MustValue("repository", "ROOT", filepath.Join(homeDir, "gogs-repositories"))
if err = os.MkdirAll(RepoRootPath, os.ModePerm); err != nil {
qlog.Fatalf("Fail to create RepoRootPath(%s): %v\n", RepoRootPath, err)
}
ScriptType = Cfg.MustValue("repository", "SCRIPT_TYPE", "bash")
}
func NewBaseServices() {
newService() newService()
newLogService() newLogService()
newCacheService() newCacheService()

52
modules/social/social.go

@ -15,8 +15,8 @@ import (
oauth "github.com/gogits/oauth2" oauth "github.com/gogits/oauth2"
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
) )
type BasicUserInfo struct { type BasicUserInfo struct {
@ -40,67 +40,67 @@ var (
) )
func NewOauthService() { func NewOauthService() {
if !base.Cfg.MustBool("oauth", "ENABLED") { if !setting.Cfg.MustBool("oauth", "ENABLED") {
return return
} }
base.OauthService = &base.Oauther{} setting.OauthService = &setting.Oauther{}
base.OauthService.OauthInfos = make(map[string]*base.OauthInfo) setting.OauthService.OauthInfos = make(map[string]*setting.OauthInfo)
socialConfigs := make(map[string]*oauth.Config) socialConfigs := make(map[string]*oauth.Config)
allOauthes := []string{"github", "google", "qq", "twitter", "weibo"} allOauthes := []string{"github", "google", "qq", "twitter", "weibo"}
// Load all OAuth config data. // Load all OAuth config data.
for _, name := range allOauthes { for _, name := range allOauthes {
base.OauthService.OauthInfos[name] = &base.OauthInfo{ setting.OauthService.OauthInfos[name] = &setting.OauthInfo{
ClientId: base.Cfg.MustValue("oauth."+name, "CLIENT_ID"), ClientId: setting.Cfg.MustValue("oauth."+name, "CLIENT_ID"),
ClientSecret: base.Cfg.MustValue("oauth."+name, "CLIENT_SECRET"), ClientSecret: setting.Cfg.MustValue("oauth."+name, "CLIENT_SECRET"),
Scopes: base.Cfg.MustValue("oauth."+name, "SCOPES"), Scopes: setting.Cfg.MustValue("oauth."+name, "SCOPES"),
AuthUrl: base.Cfg.MustValue("oauth."+name, "AUTH_URL"), AuthUrl: setting.Cfg.MustValue("oauth."+name, "AUTH_URL"),
TokenUrl: base.Cfg.MustValue("oauth."+name, "TOKEN_URL"), TokenUrl: setting.Cfg.MustValue("oauth."+name, "TOKEN_URL"),
} }
socialConfigs[name] = &oauth.Config{ socialConfigs[name] = &oauth.Config{
ClientId: base.OauthService.OauthInfos[name].ClientId, ClientId: setting.OauthService.OauthInfos[name].ClientId,
ClientSecret: base.OauthService.OauthInfos[name].ClientSecret, ClientSecret: setting.OauthService.OauthInfos[name].ClientSecret,
RedirectURL: strings.TrimSuffix(base.AppUrl, "/") + SocialBaseUrl + name, RedirectURL: strings.TrimSuffix(setting.AppUrl, "/") + SocialBaseUrl + name,
Scope: base.OauthService.OauthInfos[name].Scopes, Scope: setting.OauthService.OauthInfos[name].Scopes,
AuthURL: base.OauthService.OauthInfos[name].AuthUrl, AuthURL: setting.OauthService.OauthInfos[name].AuthUrl,
TokenURL: base.OauthService.OauthInfos[name].TokenUrl, TokenURL: setting.OauthService.OauthInfos[name].TokenUrl,
} }
} }
enabledOauths := make([]string, 0, 10) enabledOauths := make([]string, 0, 10)
// GitHub. // GitHub.
if base.Cfg.MustBool("oauth.github", "ENABLED") { if setting.Cfg.MustBool("oauth.github", "ENABLED") {
base.OauthService.GitHub = true setting.OauthService.GitHub = true
newGitHubOauth(socialConfigs["github"]) newGitHubOauth(socialConfigs["github"])
enabledOauths = append(enabledOauths, "GitHub") enabledOauths = append(enabledOauths, "GitHub")
} }
// Google. // Google.
if base.Cfg.MustBool("oauth.google", "ENABLED") { if setting.Cfg.MustBool("oauth.google", "ENABLED") {
base.OauthService.Google = true setting.OauthService.Google = true
newGoogleOauth(socialConfigs["google"]) newGoogleOauth(socialConfigs["google"])
enabledOauths = append(enabledOauths, "Google") enabledOauths = append(enabledOauths, "Google")
} }
// QQ. // QQ.
if base.Cfg.MustBool("oauth.qq", "ENABLED") { if setting.Cfg.MustBool("oauth.qq", "ENABLED") {
base.OauthService.Tencent = true setting.OauthService.Tencent = true
newTencentOauth(socialConfigs["qq"]) newTencentOauth(socialConfigs["qq"])
enabledOauths = append(enabledOauths, "QQ") enabledOauths = append(enabledOauths, "QQ")
} }
// Twitter. // Twitter.
if base.Cfg.MustBool("oauth.twitter", "ENABLED") { if setting.Cfg.MustBool("oauth.twitter", "ENABLED") {
base.OauthService.Twitter = true setting.OauthService.Twitter = true
newTwitterOauth(socialConfigs["twitter"]) newTwitterOauth(socialConfigs["twitter"])
enabledOauths = append(enabledOauths, "Twitter") enabledOauths = append(enabledOauths, "Twitter")
} }
// Weibo. // Weibo.
if base.Cfg.MustBool("oauth.weibo", "ENABLED") { if setting.Cfg.MustBool("oauth.weibo", "ENABLED") {
base.OauthService.Weibo = true setting.OauthService.Weibo = true
newWeiboOauth(socialConfigs["weibo"]) newWeiboOauth(socialConfigs["weibo"])
enabledOauths = append(enabledOauths, "Weibo") enabledOauths = append(enabledOauths, "Weibo")
} }

43
routers/admin/admin.go

@ -15,6 +15,7 @@ import (
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
) )
var startTime = time.Now() var startTime = time.Now()
@ -177,46 +178,46 @@ func Config(ctx *middleware.Context) {
ctx.Data["Title"] = "Server Configuration" ctx.Data["Title"] = "Server Configuration"
ctx.Data["PageIsConfig"] = true ctx.Data["PageIsConfig"] = true
ctx.Data["AppUrl"] = base.AppUrl ctx.Data["AppUrl"] = setting.AppUrl
ctx.Data["Domain"] = base.Domain ctx.Data["Domain"] = setting.Domain
ctx.Data["OfflineMode"] = base.OfflineMode ctx.Data["OfflineMode"] = setting.OfflineMode
ctx.Data["DisableRouterLog"] = base.DisableRouterLog ctx.Data["DisableRouterLog"] = setting.DisableRouterLog
ctx.Data["RunUser"] = base.RunUser ctx.Data["RunUser"] = setting.RunUser
ctx.Data["RunMode"] = strings.Title(martini.Env) ctx.Data["RunMode"] = strings.Title(martini.Env)
ctx.Data["RepoRootPath"] = base.RepoRootPath ctx.Data["RepoRootPath"] = setting.RepoRootPath
ctx.Data["ScriptType"] = base.ScriptType ctx.Data["ScriptType"] = setting.ScriptType
ctx.Data["Service"] = base.Service ctx.Data["Service"] = setting.Service
ctx.Data["DbCfg"] = models.DbCfg ctx.Data["DbCfg"] = models.DbCfg
ctx.Data["MailerEnabled"] = false ctx.Data["MailerEnabled"] = false
if base.MailService != nil { if setting.MailService != nil {
ctx.Data["MailerEnabled"] = true ctx.Data["MailerEnabled"] = true
ctx.Data["Mailer"] = base.MailService ctx.Data["Mailer"] = setting.MailService
} }
ctx.Data["OauthEnabled"] = false ctx.Data["OauthEnabled"] = false
if base.OauthService != nil { if setting.OauthService != nil {
ctx.Data["OauthEnabled"] = true ctx.Data["OauthEnabled"] = true
ctx.Data["Oauther"] = base.OauthService ctx.Data["Oauther"] = setting.OauthService
} }
ctx.Data["CacheAdapter"] = base.CacheAdapter ctx.Data["CacheAdapter"] = setting.CacheAdapter
ctx.Data["CacheConfig"] = base.CacheConfig ctx.Data["CacheConfig"] = setting.CacheConfig
ctx.Data["SessionProvider"] = base.SessionProvider ctx.Data["SessionProvider"] = setting.SessionProvider
ctx.Data["SessionConfig"] = base.SessionConfig ctx.Data["SessionConfig"] = setting.SessionConfig
ctx.Data["PictureService"] = base.PictureService ctx.Data["PictureService"] = setting.PictureService
ctx.Data["DisableGravatar"] = base.DisableGravatar ctx.Data["DisableGravatar"] = setting.DisableGravatar
type logger struct { type logger struct {
Mode, Config string Mode, Config string
} }
loggers := make([]*logger, len(base.LogModes)) loggers := make([]*logger, len(setting.LogModes))
for i := range base.LogModes { for i := range setting.LogModes {
loggers[i] = &logger{base.LogModes[i], base.LogConfigs[i]} loggers[i] = &logger{setting.LogModes[i], setting.LogConfigs[i]}
} }
ctx.Data["Loggers"] = loggers ctx.Data["Loggers"] = loggers

3
routers/api/v1/miscellaneous.go

@ -11,6 +11,7 @@ import (
"github.com/gogits/gogs/modules/auth/apiv1" "github.com/gogits/gogs/modules/auth/apiv1"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
) )
const DOC_URL = "http://gogs.io/docs" const DOC_URL = "http://gogs.io/docs"
@ -25,7 +26,7 @@ func Markdown(ctx *middleware.Context, form apiv1.MarkdownForm) {
switch form.Mode { switch form.Mode {
case "gfm": case "gfm":
ctx.Write(base.RenderMarkdown([]byte(form.Text), ctx.Write(base.RenderMarkdown([]byte(form.Text),
base.AppUrl+strings.TrimPrefix(form.Context, "/"))) setting.AppUrl+strings.TrimPrefix(form.Context, "/")))
default: default:
ctx.Write(base.RenderRawMarkdown([]byte(form.Text), "")) ctx.Write(base.RenderRawMarkdown([]byte(form.Text), ""))
} }

4
routers/dashboard.go

@ -6,8 +6,8 @@ package routers
import ( import (
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/routers/user" "github.com/gogits/gogs/routers/user"
) )
@ -18,7 +18,7 @@ func Home(ctx *middleware.Context) {
} }
// Check auto-login. // Check auto-login.
userName := ctx.GetCookie(base.CookieUserName) userName := ctx.GetCookie(setting.CookieUserName)
if len(userName) != 0 { if len(userName) != 0 {
ctx.Redirect("/user/login") ctx.Redirect("/user/login")
return return

14
routers/dev/template.go

@ -8,19 +8,19 @@ import (
"github.com/go-martini/martini" "github.com/go-martini/martini"
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
) )
func TemplatePreview(ctx *middleware.Context, params martini.Params) { func TemplatePreview(ctx *middleware.Context, params martini.Params) {
ctx.Data["User"] = models.User{Name: "Unknown"} ctx.Data["User"] = models.User{Name: "Unknown"}
ctx.Data["AppName"] = base.AppName ctx.Data["AppName"] = setting.AppName
ctx.Data["AppVer"] = base.AppVer ctx.Data["AppVer"] = setting.AppVer
ctx.Data["AppUrl"] = base.AppUrl ctx.Data["AppUrl"] = setting.AppUrl
ctx.Data["AppLogo"] = base.AppLogo ctx.Data["AppLogo"] = setting.AppLogo
ctx.Data["Code"] = "2014031910370000009fff6782aadb2162b4a997acb69d4400888e0b9274657374" ctx.Data["Code"] = "2014031910370000009fff6782aadb2162b4a997acb69d4400888e0b9274657374"
ctx.Data["ActiveCodeLives"] = base.Service.ActiveCodeLives / 60 ctx.Data["ActiveCodeLives"] = setting.Service.ActiveCodeLives / 60
ctx.Data["ResetPwdCodeLives"] = base.Service.ResetPwdCodeLives / 60 ctx.Data["ResetPwdCodeLives"] = setting.Service.ResetPwdCodeLives / 60
ctx.Data["CurDbValue"] = "" ctx.Data["CurDbValue"] = ""
ctx.HTML(200, params["_1"]) ctx.HTML(200, params["_1"])
} }

68
routers/install.go

@ -8,6 +8,7 @@ import (
"errors" "errors"
"os" "os"
"os/exec" "os/exec"
"path"
"strings" "strings"
"github.com/Unknwon/goconfig" "github.com/Unknwon/goconfig"
@ -22,14 +23,15 @@ import (
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/mailer" "github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/social" "github.com/gogits/gogs/modules/social"
) )
func checkRunMode() { func checkRunMode() {
switch base.Cfg.MustValue("", "RUN_MODE") { switch setting.Cfg.MustValue("", "RUN_MODE") {
case "prod": case "prod":
martini.Env = martini.Prod martini.Env = martini.Prod
base.ProdMode = true setting.ProdMode = true
case "test": case "test":
martini.Env = martini.Test martini.Env = martini.Test
} }
@ -37,20 +39,20 @@ func checkRunMode() {
} }
func NewServices() { func NewServices() {
base.NewBaseServices() setting.NewServices()
social.NewOauthService() social.NewOauthService()
} }
// GlobalInit is for global configuration reload-able. // GlobalInit is for global configuration reload-able.
func GlobalInit() { func GlobalInit() {
base.NewConfigContext() setting.NewConfigContext()
mailer.NewMailerContext() mailer.NewMailerContext()
models.LoadModelsConfig() models.LoadModelsConfig()
models.LoadRepoConfig() models.LoadRepoConfig()
models.NewRepoContext() models.NewRepoContext()
NewServices() NewServices()
if base.InstallLock { if setting.InstallLock {
if err := models.NewEngine(); err != nil { if err := models.NewEngine(); err != nil {
qlog.Fatal(err) qlog.Fatal(err)
} }
@ -69,7 +71,7 @@ func renderDbOption(ctx *middleware.Context) {
} }
func Install(ctx *middleware.Context, form auth.InstallForm) { func Install(ctx *middleware.Context, form auth.InstallForm) {
if base.InstallLock { if setting.InstallLock {
ctx.Handle(404, "install.Install", errors.New("Installation is prohibited")) ctx.Handle(404, "install.Install", errors.New("Installation is prohibited"))
return return
} }
@ -95,16 +97,16 @@ func Install(ctx *middleware.Context, form auth.InstallForm) {
} }
if len(form.RepoRootPath) == 0 { if len(form.RepoRootPath) == 0 {
form.RepoRootPath = base.RepoRootPath form.RepoRootPath = setting.RepoRootPath
} }
if len(form.RunUser) == 0 { if len(form.RunUser) == 0 {
form.RunUser = base.RunUser form.RunUser = setting.RunUser
} }
if len(form.Domain) == 0 { if len(form.Domain) == 0 {
form.Domain = base.Domain form.Domain = setting.Domain
} }
if len(form.AppUrl) == 0 { if len(form.AppUrl) == 0 {
form.AppUrl = base.AppUrl form.AppUrl = setting.AppUrl
} }
renderDbOption(ctx) renderDbOption(ctx)
@ -119,7 +121,7 @@ func Install(ctx *middleware.Context, form auth.InstallForm) {
} }
func InstallPost(ctx *middleware.Context, form auth.InstallForm) { func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
if base.InstallLock { if setting.InstallLock {
ctx.Handle(404, "install.Install", errors.New("Installation is prohibited")) ctx.Handle(404, "install.Install", errors.New("Installation is prohibited"))
return return
} }
@ -181,35 +183,35 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
} }
// Save settings. // Save settings.
base.Cfg.SetValue("database", "DB_TYPE", models.DbCfg.Type) setting.Cfg.SetValue("database", "DB_TYPE", models.DbCfg.Type)
base.Cfg.SetValue("database", "HOST", models.DbCfg.Host) setting.Cfg.SetValue("database", "HOST", models.DbCfg.Host)
base.Cfg.SetValue("database", "NAME", models.DbCfg.Name) setting.Cfg.SetValue("database", "NAME", models.DbCfg.Name)
base.Cfg.SetValue("database", "USER", models.DbCfg.User) setting.Cfg.SetValue("database", "USER", models.DbCfg.User)
base.Cfg.SetValue("database", "PASSWD", models.DbCfg.Pwd) setting.Cfg.SetValue("database", "PASSWD", models.DbCfg.Pwd)
base.Cfg.SetValue("database", "SSL_MODE", models.DbCfg.SslMode) setting.Cfg.SetValue("database", "SSL_MODE", models.DbCfg.SslMode)
base.Cfg.SetValue("database", "PATH", models.DbCfg.Path) setting.Cfg.SetValue("database", "PATH", models.DbCfg.Path)
base.Cfg.SetValue("repository", "ROOT", form.RepoRootPath) setting.Cfg.SetValue("repository", "ROOT", form.RepoRootPath)
base.Cfg.SetValue("", "RUN_USER", form.RunUser) setting.Cfg.SetValue("", "RUN_USER", form.RunUser)
base.Cfg.SetValue("server", "DOMAIN", form.Domain) setting.Cfg.SetValue("server", "DOMAIN", form.Domain)
base.Cfg.SetValue("server", "ROOT_URL", form.AppUrl) setting.Cfg.SetValue("server", "ROOT_URL", form.AppUrl)
if len(strings.TrimSpace(form.SmtpHost)) > 0 { if len(strings.TrimSpace(form.SmtpHost)) > 0 {
base.Cfg.SetValue("mailer", "ENABLED", "true") setting.Cfg.SetValue("mailer", "ENABLED", "true")
base.Cfg.SetValue("mailer", "HOST", form.SmtpHost) setting.Cfg.SetValue("mailer", "HOST", form.SmtpHost)
base.Cfg.SetValue("mailer", "USER", form.SmtpEmail) setting.Cfg.SetValue("mailer", "USER", form.SmtpEmail)
base.Cfg.SetValue("mailer", "PASSWD", form.SmtpPasswd) setting.Cfg.SetValue("mailer", "PASSWD", form.SmtpPasswd)
base.Cfg.SetValue("service", "REGISTER_EMAIL_CONFIRM", base.ToStr(form.RegisterConfirm == "on")) setting.Cfg.SetValue("service", "REGISTER_EMAIL_CONFIRM", base.ToStr(form.RegisterConfirm == "on"))
base.Cfg.SetValue("service", "ENABLE_NOTIFY_MAIL", base.ToStr(form.MailNotify == "on")) setting.Cfg.SetValue("service", "ENABLE_NOTIFY_MAIL", base.ToStr(form.MailNotify == "on"))
} }
base.Cfg.SetValue("", "RUN_MODE", "prod") setting.Cfg.SetValue("", "RUN_MODE", "prod")
base.Cfg.SetValue("security", "INSTALL_LOCK", "true") setting.Cfg.SetValue("security", "INSTALL_LOCK", "true")
os.MkdirAll("custom/conf", os.ModePerm) os.MkdirAll("custom/conf", os.ModePerm)
if err := goconfig.SaveConfigFile(base.Cfg, "custom/conf/app.ini"); err != nil { if err := goconfig.SaveConfigFile(setting.Cfg, path.Join(setting.CustomPath, "conf/app.ini")); err != nil {
ctx.RenderWithErr("Fail to save configuration: "+err.Error(), "install", &form) ctx.RenderWithErr("Fail to save configuration: "+err.Error(), "install", &form)
return return
} }
@ -220,7 +222,7 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
if _, err := models.RegisterUser(&models.User{Name: form.AdminName, Email: form.AdminEmail, Passwd: form.AdminPasswd, if _, err := models.RegisterUser(&models.User{Name: form.AdminName, Email: form.AdminEmail, Passwd: form.AdminPasswd,
IsAdmin: true, IsActive: true}); err != nil { IsAdmin: true, IsActive: true}); err != nil {
if err != models.ErrUserAlreadyExist { if err != models.ErrUserAlreadyExist {
base.InstallLock = false setting.InstallLock = false
ctx.RenderWithErr("Admin account setting is invalid: "+err.Error(), "install", &form) ctx.RenderWithErr("Admin account setting is invalid: "+err.Error(), "install", &form)
return return
} }

7
routers/repo/branch.go

@ -11,9 +11,12 @@ import (
) )
func Branches(ctx *middleware.Context, params martini.Params) { func Branches(ctx *middleware.Context, params martini.Params) {
ctx.Data["Title"] = "Branches"
ctx.Data["IsRepoToolbarBranches"] = true
brs, err := ctx.Repo.GitRepo.GetBranches() brs, err := ctx.Repo.GitRepo.GetBranches()
if err != nil { if err != nil {
ctx.Handle(404, "repo.Branches", err) ctx.Handle(500, "repo.Branches", err)
return return
} else if len(brs) == 0 { } else if len(brs) == 0 {
ctx.Handle(404, "repo.Branches", nil) ctx.Handle(404, "repo.Branches", nil)
@ -21,7 +24,5 @@ func Branches(ctx *middleware.Context, params martini.Params) {
} }
ctx.Data["Branches"] = brs ctx.Data["Branches"] = brs
ctx.Data["IsRepoToolbarBranches"] = true
ctx.HTML(200, "repo/branches") ctx.HTML(200, "repo/branches")
} }

24
routers/repo/commit.go

@ -15,6 +15,8 @@ import (
) )
func Commits(ctx *middleware.Context, params martini.Params) { func Commits(ctx *middleware.Context, params martini.Params) {
ctx.Data["IsRepoToolbarCommits"] = true
userName := ctx.Repo.Owner.Name userName := ctx.Repo.Owner.Name
repoName := ctx.Repo.Repository.Name repoName := ctx.Repo.Repository.Name
@ -47,8 +49,8 @@ func Commits(ctx *middleware.Context, params martini.Params) {
nextPage = 0 nextPage = 0
} }
//both `git log branchName` and `git log commitId` work // Both `git log branchName` and `git log commitId` work.
commits, err := ctx.Repo.Commit.CommitsByRange(page) ctx.Data["Commits"], err = ctx.Repo.Commit.CommitsByRange(page)
if err != nil { if err != nil {
ctx.Handle(500, "repo.Commits(CommitsByRange)", err) ctx.Handle(500, "repo.Commits(CommitsByRange)", err)
return return
@ -57,14 +59,14 @@ func Commits(ctx *middleware.Context, params martini.Params) {
ctx.Data["Username"] = userName ctx.Data["Username"] = userName
ctx.Data["Reponame"] = repoName ctx.Data["Reponame"] = repoName
ctx.Data["CommitCount"] = commitsCount ctx.Data["CommitCount"] = commitsCount
ctx.Data["Commits"] = commits
ctx.Data["LastPageNum"] = lastPage ctx.Data["LastPageNum"] = lastPage
ctx.Data["NextPageNum"] = nextPage ctx.Data["NextPageNum"] = nextPage
ctx.Data["IsRepoToolbarCommits"] = true
ctx.HTML(200, "repo/commits") ctx.HTML(200, "repo/commits")
} }
func Diff(ctx *middleware.Context, params martini.Params) { func Diff(ctx *middleware.Context, params martini.Params) {
ctx.Data["IsRepoToolbarCommits"] = true
userName := ctx.Repo.Owner.Name userName := ctx.Repo.Owner.Name
repoName := ctx.Repo.Repository.Name repoName := ctx.Repo.Repository.Name
commitId := ctx.Repo.CommitId commitId := ctx.Repo.CommitId
@ -109,13 +111,15 @@ func Diff(ctx *middleware.Context, params martini.Params) {
ctx.Data["Diff"] = diff ctx.Data["Diff"] = diff
ctx.Data["Parents"] = parents ctx.Data["Parents"] = parents
ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0 ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0
ctx.Data["IsRepoToolbarCommits"] = true
ctx.Data["SourcePath"] = "/" + path.Join(userName, repoName, "src", commitId) ctx.Data["SourcePath"] = "/" + path.Join(userName, repoName, "src", commitId)
ctx.Data["RawPath"] = "/" + path.Join(userName, repoName, "raw", commitId) ctx.Data["RawPath"] = "/" + path.Join(userName, repoName, "raw", commitId)
ctx.HTML(200, "repo/diff") ctx.HTML(200, "repo/diff")
} }
func SearchCommits(ctx *middleware.Context, params martini.Params) { func SearchCommits(ctx *middleware.Context, params martini.Params) {
ctx.Data["IsSearchPage"] = true
ctx.Data["IsRepoToolbarCommits"] = true
keyword := ctx.Query("q") keyword := ctx.Query("q")
if len(keyword) == 0 { if len(keyword) == 0 {
ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchName) ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchName)
@ -145,12 +149,12 @@ func SearchCommits(ctx *middleware.Context, params martini.Params) {
ctx.Data["Reponame"] = repoName ctx.Data["Reponame"] = repoName
ctx.Data["CommitCount"] = commits.Len() ctx.Data["CommitCount"] = commits.Len()
ctx.Data["Commits"] = commits ctx.Data["Commits"] = commits
ctx.Data["IsSearchPage"] = true
ctx.Data["IsRepoToolbarCommits"] = true
ctx.HTML(200, "repo/commits") ctx.HTML(200, "repo/commits")
} }
func FileHistory(ctx *middleware.Context, params martini.Params) { func FileHistory(ctx *middleware.Context, params martini.Params) {
ctx.Data["IsRepoToolbarCommits"] = true
fileName := params["_1"] fileName := params["_1"]
if len(fileName) == 0 { if len(fileName) == 0 {
Commits(ctx, params) Commits(ctx, params)
@ -194,8 +198,8 @@ func FileHistory(ctx *middleware.Context, params martini.Params) {
nextPage = 0 nextPage = 0
} }
//both `git log branchName` and `git log commitId` work ctx.Data["Commits"], err = ctx.Repo.GitRepo.CommitsByFileAndRange(
commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange(branchName, fileName, page) branchName, fileName, page)
if err != nil { if err != nil {
ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err) ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err)
return return
@ -205,9 +209,7 @@ func FileHistory(ctx *middleware.Context, params martini.Params) {
ctx.Data["Reponame"] = repoName ctx.Data["Reponame"] = repoName
ctx.Data["FileName"] = fileName ctx.Data["FileName"] = fileName
ctx.Data["CommitCount"] = commitsCount ctx.Data["CommitCount"] = commitsCount
ctx.Data["Commits"] = commits
ctx.Data["LastPageNum"] = lastPage ctx.Data["LastPageNum"] = lastPage
ctx.Data["NextPageNum"] = nextPage ctx.Data["NextPageNum"] = nextPage
ctx.Data["IsRepoToolbarCommits"] = true
ctx.HTML(200, "repo/commits") ctx.HTML(200, "repo/commits")
} }

21
routers/repo/download.go

@ -18,18 +18,17 @@ import (
) )
func SingleDownload(ctx *middleware.Context, params martini.Params) { func SingleDownload(ctx *middleware.Context, params martini.Params) {
// Get tree path
treename := params["_1"] treename := params["_1"]
blob, err := ctx.Repo.Commit.GetBlobByPath(treename) blob, err := ctx.Repo.Commit.GetBlobByPath(treename)
if err != nil { if err != nil {
ctx.Handle(404, "repo.SingleDownload(GetBlobByPath)", err) ctx.Handle(500, "repo.SingleDownload(GetBlobByPath)", err)
return return
} }
data, err := blob.Data() data, err := blob.Data()
if err != nil { if err != nil {
ctx.Handle(404, "repo.SingleDownload(Data)", err) ctx.Handle(500, "repo.SingleDownload(Data)", err)
return return
} }
@ -47,8 +46,8 @@ func ZipDownload(ctx *middleware.Context, params martini.Params) {
commitId := ctx.Repo.CommitId commitId := ctx.Repo.CommitId
archivesPath := filepath.Join(ctx.Repo.GitRepo.Path, "archives/zip") archivesPath := filepath.Join(ctx.Repo.GitRepo.Path, "archives/zip")
if !com.IsDir(archivesPath) { if !com.IsDir(archivesPath) {
if err := os.MkdirAll(archivesPath, 0755); err != nil { if err := os.MkdirAll(archivesPath, 0655); err != nil {
ctx.Handle(404, "ZipDownload -> os.Mkdir(archivesPath)", err) ctx.Handle(500, "ZipDownload -> os.Mkdir(archivesPath)", err)
return return
} }
} }
@ -60,9 +59,8 @@ func ZipDownload(ctx *middleware.Context, params martini.Params) {
return return
} }
err := ctx.Repo.Commit.CreateArchive(archivePath, git.AT_ZIP) if err := ctx.Repo.Commit.CreateArchive(archivePath, git.AT_ZIP); err != nil {
if err != nil { ctx.Handle(500, "ZipDownload -> CreateArchive "+archivePath, err)
ctx.Handle(404, "ZipDownload -> CreateArchive "+archivePath, err)
return return
} }
@ -74,7 +72,7 @@ func TarGzDownload(ctx *middleware.Context, params martini.Params) {
archivesPath := filepath.Join(ctx.Repo.GitRepo.Path, "archives/targz") archivesPath := filepath.Join(ctx.Repo.GitRepo.Path, "archives/targz")
if !com.IsDir(archivesPath) { if !com.IsDir(archivesPath) {
if err := os.MkdirAll(archivesPath, 0755); err != nil { if err := os.MkdirAll(archivesPath, 0755); err != nil {
ctx.Handle(404, "TarGzDownload -> os.Mkdir(archivesPath)", err) ctx.Handle(500, "TarGzDownload -> os.Mkdir(archivesPath)", err)
return return
} }
} }
@ -86,9 +84,8 @@ func TarGzDownload(ctx *middleware.Context, params martini.Params) {
return return
} }
err := ctx.Repo.Commit.CreateArchive(archivePath, git.AT_TARGZ) if err := ctx.Repo.Commit.CreateArchive(archivePath, git.AT_TARGZ); err != nil {
if err != nil { ctx.Handle(500, "TarGzDownload -> CreateArchive "+archivePath, err)
ctx.Handle(404, "TarGzDownload -> CreateArchive "+archivePath, err)
return return
} }

55
routers/repo/git.go

@ -1,55 +0,0 @@
package repo
import (
"fmt"
"strings"
)
const advertise_refs = "--advertise-refs"
func command(cmd string, opts ...string) string {
return fmt.Sprintf("git %s %s", cmd, strings.Join(opts, " "))
}
/*func upload_pack(repository_path string, opts ...string) string {
cmd = "upload-pack"
opts = append(opts, "--stateless-rpc", repository_path)
return command(cmd, opts...)
}
func receive_pack(repository_path string, opts ...string) string {
cmd = "receive-pack"
opts = append(opts, "--stateless-rpc", repository_path)
return command(cmd, opts...)
}*/
/*func update_server_info(repository_path, opts = {}, &block)
cmd = "update-server-info"
args = []
opts.each {|k,v| args << command_options[k] if command_options.has_key?(k) }
opts[:args] = args
Dir.chdir(repository_path) do # "git update-server-info" does not take a parameter to specify the repository, so set the working directory to the repository
self.command(cmd, opts, &block)
end
end
def get_config_setting(repository_path, key)
path = get_config_location(repository_path)
raise "Config file could not be found for repository in #{repository_path}." unless path
self.command("config", {:args => ["-f #{path}", key]}).chomp
end
def get_config_location(repository_path)
non_bare = File.join(repository_path,'.git') # This is where the config file will be if the repository is non-bare
if File.exists?(non_bare) then # The repository is non-bare
non_bare_config = File.join(non_bare, 'config')
return non_bare_config if File.exists?(non_bare_config)
else # We are dealing with a bare repository
bare_config = File.join(repository_path, "config")
return bare_config if File.exists?(bare_config)
end
return nil
end
end
*/

27
routers/repo/http.go

@ -22,8 +22,8 @@ import (
"github.com/go-martini/martini" "github.com/go-martini/martini"
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
) )
func Http(ctx *middleware.Context, params martini.Params) { func Http(ctx *middleware.Context, params martini.Params) {
@ -59,7 +59,7 @@ func Http(ctx *middleware.Context, params martini.Params) {
// only public pull don't need auth // only public pull don't need auth
isPublicPull := !repo.IsPrivate && isPull isPublicPull := !repo.IsPrivate && isPull
var askAuth = !isPublicPull || base.Service.RequireSignInView var askAuth = !isPublicPull || setting.Service.RequireSignInView
var authUser *models.User var authUser *models.User
var authUsername, passwd string var authUsername, passwd string
@ -123,7 +123,7 @@ func Http(ctx *middleware.Context, params martini.Params) {
} }
} }
config := Config{base.RepoRootPath, "git", true, true, func(rpc string, input []byte) { config := Config{setting.RepoRootPath, "git", true, true, func(rpc string, input []byte) {
if rpc == "receive-pack" { if rpc == "receive-pack" {
firstLine := bytes.IndexRune(input, '\000') firstLine := bytes.IndexRune(input, '\000')
if firstLine > -1 { if firstLine > -1 {
@ -141,16 +141,6 @@ func Http(ctx *middleware.Context, params martini.Params) {
handler := HttpBackend(&config) handler := HttpBackend(&config)
handler(ctx.ResponseWriter, ctx.Req) handler(ctx.ResponseWriter, ctx.Req)
/* Webdav
dir := models.RepoPath(username, reponame)
prefix := path.Join("/", username, params["reponame"])
server := webdav.NewServer(
dir, prefix, true)
server.ServeHTTP(ctx.ResponseWriter, ctx.Req)
*/
} }
type route struct { type route struct {
@ -483,14 +473,3 @@ func hdrCacheForever(w http.ResponseWriter) {
w.Header().Set("Expires", fmt.Sprintf("%d", expires)) w.Header().Set("Expires", fmt.Sprintf("%d", expires))
w.Header().Set("Cache-Control", "public, max-age=31536000") w.Header().Set("Cache-Control", "public, max-age=31536000")
} }
// Main
/*
func main() {
http.HandleFunc("/", requestHandler())
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}*/

5
routers/repo/issue.go

@ -19,6 +19,7 @@ import (
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/mailer" "github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
) )
func Issues(ctx *middleware.Context) { func Issues(ctx *middleware.Context) {
@ -242,7 +243,7 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C
} }
// Mail watchers and mentions. // Mail watchers and mentions.
if base.Service.NotifyMail { if setting.Service.NotifyMail {
tos, err := mailer.SendIssueNotifyMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue) tos, err := mailer.SendIssueNotifyMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue)
if err != nil { if err != nil {
ctx.Handle(500, "issue.CreateIssue(SendIssueNotifyMail)", err) ctx.Handle(500, "issue.CreateIssue(SendIssueNotifyMail)", err)
@ -677,7 +678,7 @@ func Comment(ctx *middleware.Context, params martini.Params) {
} }
// Mail watchers and mentions. // Mail watchers and mentions.
if base.Service.NotifyMail { if setting.Service.NotifyMail {
issue.Content = content issue.Content = content
tos, err := mailer.SendIssueNotifyMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue) tos, err := mailer.SendIssueNotifyMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue)
if err != nil { if err != nil {

3
routers/repo/setting.go

@ -16,6 +16,7 @@ import (
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/mailer" "github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
) )
func Setting(ctx *middleware.Context) { func Setting(ctx *middleware.Context) {
@ -189,7 +190,7 @@ func CollaborationPost(ctx *middleware.Context) {
return return
} }
if base.Service.NotifyMail { if setting.Service.NotifyMail {
if err = mailer.SendCollaboratorMail(ctx.Render, u, ctx.User, ctx.Repo.Repository); err != nil { if err = mailer.SendCollaboratorMail(ctx.Render, u, ctx.User, ctx.Repo.Repository); err != nil {
ctx.Handle(500, "setting.CollaborationPost(SendCollaboratorMail)", err) ctx.Handle(500, "setting.CollaborationPost(SendCollaboratorMail)", err)
return return

6
routers/user/social.go

@ -14,9 +14,9 @@ import (
"github.com/go-martini/martini" "github.com/go-martini/martini"
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/social" "github.com/gogits/gogs/modules/social"
) )
@ -29,7 +29,7 @@ func extractPath(next string) string {
} }
func SocialSignIn(ctx *middleware.Context, params martini.Params) { func SocialSignIn(ctx *middleware.Context, params martini.Params) {
if base.OauthService == nil { if setting.OauthService == nil {
ctx.Handle(404, "social.SocialSignIn(oauth service not enabled)", nil) ctx.Handle(404, "social.SocialSignIn(oauth service not enabled)", nil)
return return
} }
@ -45,7 +45,7 @@ func SocialSignIn(ctx *middleware.Context, params martini.Params) {
code := ctx.Query("code") code := ctx.Query("code")
if code == "" { if code == "" {
// redirect to social login page // redirect to social login page
connect.SetRedirectUrl(strings.TrimSuffix(base.AppUrl, "/") + ctx.Req.URL.Path) connect.SetRedirectUrl(strings.TrimSuffix(setting.AppUrl, "/") + ctx.Req.URL.Path)
ctx.Redirect(connect.AuthCodeURL(next)) ctx.Redirect(connect.AuthCodeURL(next))
return return
} }

47
routers/user/user.go

@ -14,6 +14,7 @@ import (
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/mailer" "github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting"
) )
func SignIn(ctx *middleware.Context) { func SignIn(ctx *middleware.Context) {
@ -26,23 +27,23 @@ func SignIn(ctx *middleware.Context) {
} }
// Check auto-login. // Check auto-login.
userName := ctx.GetCookie(base.CookieUserName) userName := ctx.GetCookie(setting.CookieUserName)
if len(userName) == 0 { if len(userName) == 0 {
ctx.HTML(200, "user/signin") ctx.HTML(200, "user/signin")
return return
} }
if base.OauthService != nil { if setting.OauthService != nil {
ctx.Data["OauthEnabled"] = true ctx.Data["OauthEnabled"] = true
ctx.Data["OauthService"] = base.OauthService ctx.Data["OauthService"] = setting.OauthService
} }
isSucceed := false isSucceed := false
defer func() { defer func() {
if !isSucceed { if !isSucceed {
log.Trace("user.SignIn(auto-login cookie cleared): %s", userName) log.Trace("user.SignIn(auto-login cookie cleared): %s", userName)
ctx.SetCookie(base.CookieUserName, "", -1) ctx.SetCookie(setting.CookieUserName, "", -1)
ctx.SetCookie(base.CookieRememberName, "", -1) ctx.SetCookie(setting.CookieRememberName, "", -1)
return return
} }
}() }()
@ -54,7 +55,7 @@ func SignIn(ctx *middleware.Context) {
} }
secret := base.EncodeMd5(user.Rands + user.Passwd) secret := base.EncodeMd5(user.Rands + user.Passwd)
value, _ := ctx.GetSecureCookie(secret, base.CookieRememberName) value, _ := ctx.GetSecureCookie(secret, setting.CookieRememberName)
if value != user.Name { if value != user.Name {
ctx.HTML(200, "user/signin") ctx.HTML(200, "user/signin")
return return
@ -79,9 +80,9 @@ func SignInPost(ctx *middleware.Context, form auth.LogInForm) {
sid, isOauth := ctx.Session.Get("socialId").(int64) sid, isOauth := ctx.Session.Get("socialId").(int64)
if isOauth { if isOauth {
ctx.Data["IsSocialLogin"] = true ctx.Data["IsSocialLogin"] = true
} else if base.OauthService != nil { } else if setting.OauthService != nil {
ctx.Data["OauthEnabled"] = true ctx.Data["OauthEnabled"] = true
ctx.Data["OauthService"] = base.OauthService ctx.Data["OauthService"] = setting.OauthService
} }
if ctx.HasError() { if ctx.HasError() {
@ -103,9 +104,9 @@ func SignInPost(ctx *middleware.Context, form auth.LogInForm) {
if form.Remember { if form.Remember {
secret := base.EncodeMd5(user.Rands + user.Passwd) secret := base.EncodeMd5(user.Rands + user.Passwd)
days := 86400 * base.LogInRememberDays days := 86400 * setting.LogInRememberDays
ctx.SetCookie(base.CookieUserName, user.Name, days) ctx.SetCookie(setting.CookieUserName, user.Name, days)
ctx.SetSecureCookie(secret, base.CookieRememberName, user.Name, days) ctx.SetSecureCookie(secret, setting.CookieRememberName, user.Name, days)
} }
// Bind with social account. // Bind with social account.
@ -139,8 +140,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(base.CookieUserName, "", -1) ctx.SetCookie(setting.CookieUserName, "", -1)
ctx.SetCookie(base.CookieRememberName, "", -1) ctx.SetCookie(setting.CookieRememberName, "", -1)
ctx.Redirect("/") ctx.Redirect("/")
} }
@ -148,7 +149,7 @@ func SignUp(ctx *middleware.Context) {
ctx.Data["Title"] = "Sign Up" ctx.Data["Title"] = "Sign Up"
ctx.Data["PageIsSignUp"] = true ctx.Data["PageIsSignUp"] = true
if base.Service.DisableRegistration { if setting.Service.DisableRegistration {
ctx.Data["DisableRegistration"] = true ctx.Data["DisableRegistration"] = true
ctx.HTML(200, "user/signup") ctx.HTML(200, "user/signup")
return return
@ -186,7 +187,7 @@ func SignUpPost(ctx *middleware.Context, form auth.RegisterForm) {
ctx.Data["Title"] = "Sign Up" ctx.Data["Title"] = "Sign Up"
ctx.Data["PageIsSignUp"] = true ctx.Data["PageIsSignUp"] = true
if base.Service.DisableRegistration { if setting.Service.DisableRegistration {
ctx.Handle(403, "user.SignUpPost", nil) ctx.Handle(403, "user.SignUpPost", nil)
return return
} }
@ -212,7 +213,7 @@ func SignUpPost(ctx *middleware.Context, form auth.RegisterForm) {
Name: form.UserName, Name: form.UserName,
Email: form.Email, Email: form.Email,
Passwd: form.Password, Passwd: form.Password,
IsActive: !base.Service.RegisterEmailConfirm || isOauth, IsActive: !setting.Service.RegisterEmailConfirm || isOauth,
} }
var err error var err error
@ -243,11 +244,11 @@ func SignUpPost(ctx *middleware.Context, form auth.RegisterForm) {
} }
// Send confirmation e-mail, no need for social account. // Send confirmation e-mail, no need for social account.
if !isOauth && base.Service.RegisterEmailConfirm && u.Id > 1 { if !isOauth && setting.Service.RegisterEmailConfirm && u.Id > 1 {
mailer.SendRegisterMail(ctx.Render, u) mailer.SendRegisterMail(ctx.Render, u)
ctx.Data["IsSendRegisterMail"] = true ctx.Data["IsSendRegisterMail"] = true
ctx.Data["Email"] = u.Email ctx.Data["Email"] = u.Email
ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60 ctx.Data["Hours"] = setting.Service.ActiveCodeLives / 60
ctx.HTML(200, "user/activate") ctx.HTML(200, "user/activate")
if err = ctx.Cache.Put("MailResendLimit_"+u.LowerName, u.LowerName, 180); err != nil { if err = ctx.Cache.Put("MailResendLimit_"+u.LowerName, u.LowerName, 180); err != nil {
@ -304,11 +305,11 @@ func Activate(ctx *middleware.Context) {
return return
} }
// Resend confirmation e-mail. // Resend confirmation e-mail.
if base.Service.RegisterEmailConfirm { if setting.Service.RegisterEmailConfirm {
if ctx.Cache.IsExist("MailResendLimit_" + ctx.User.LowerName) { if ctx.Cache.IsExist("MailResendLimit_" + ctx.User.LowerName) {
ctx.Data["ResendLimited"] = true ctx.Data["ResendLimited"] = true
} else { } else {
ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60 ctx.Data["Hours"] = setting.Service.ActiveCodeLives / 60
mailer.SendActiveMail(ctx.Render, ctx.User) mailer.SendActiveMail(ctx.Render, ctx.User)
if err := ctx.Cache.Put("MailResendLimit_"+ctx.User.LowerName, ctx.User.LowerName, 180); err != nil { if err := ctx.Cache.Put("MailResendLimit_"+ctx.User.LowerName, ctx.User.LowerName, 180); err != nil {
@ -346,7 +347,7 @@ func Activate(ctx *middleware.Context) {
func ForgotPasswd(ctx *middleware.Context) { func ForgotPasswd(ctx *middleware.Context) {
ctx.Data["Title"] = "Forgot Password" ctx.Data["Title"] = "Forgot Password"
if base.MailService == nil { if setting.MailService == nil {
ctx.Data["IsResetDisable"] = true ctx.Data["IsResetDisable"] = true
ctx.HTML(200, "user/forgot_passwd") ctx.HTML(200, "user/forgot_passwd")
return return
@ -359,7 +360,7 @@ func ForgotPasswd(ctx *middleware.Context) {
func ForgotPasswdPost(ctx *middleware.Context) { func ForgotPasswdPost(ctx *middleware.Context) {
ctx.Data["Title"] = "Forgot Password" ctx.Data["Title"] = "Forgot Password"
if base.MailService == nil { if setting.MailService == nil {
ctx.Handle(403, "user.ForgotPasswdPost", nil) ctx.Handle(403, "user.ForgotPasswdPost", nil)
return return
} }
@ -388,7 +389,7 @@ func ForgotPasswdPost(ctx *middleware.Context) {
} }
ctx.Data["Email"] = email ctx.Data["Email"] = email
ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60 ctx.Data["Hours"] = setting.Service.ActiveCodeLives / 60
ctx.Data["IsResetSent"] = true ctx.Data["IsResetSent"] = true
ctx.HTML(200, "user/forgot_passwd") ctx.HTML(200, "user/forgot_passwd")
} }

Loading…
Cancel
Save