]> source.dussan.org Git - gitea.git/commitdiff
Batch fix
authorUnknown <joe2010xtmf@163.com>
Fri, 21 Mar 2014 05:09:22 +0000 (01:09 -0400)
committerUnknown <joe2010xtmf@163.com>
Fri, 21 Mar 2014 05:09:22 +0000 (01:09 -0400)
14 files changed:
README.md
conf/app.ini
models/action.go
models/models.go
models/repo.go
modules/base/conf.go
modules/base/template.go
routers/user/user.go
templates/admin/repos.tmpl
templates/admin/users.tmpl
templates/base/navbar.tmpl
templates/repo/single.tmpl
templates/user/signin.tmpl
templates/user/signup.tmpl

index 8c971fdb857e4403fc3de1278f07d2737f646d3a..3668ae899833c317bd9033de0c1cc12fa4fd2301 100644 (file)
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@ There are some very good products in this category such as [gitlab](http://gitla
 - Repository viewer.
 - Gravatar support.
 - Mail service(register).
-- Supports MySQL and PostgreSQL.
+- Supports MySQL, PostgreSQL and SQLite3(binary release only).
 
 ## Installation
 
index 658f7c01512e37fafe6ccb75caf76edc00f974e2..d38cd1f05e7b228e3fee7c152560163a3837bd0b 100644 (file)
@@ -18,7 +18,7 @@ HTTP_ADDR =
 HTTP_PORT = 3000
 
 [database]
-; Either "mysql" or "postgres", it's your choice
+; Either "mysql", "postgres" or "sqlite3"(binary release only), it's your choice
 DB_TYPE = mysql
 HOST = 
 NAME = gogs
@@ -26,6 +26,10 @@ USER = root
 PASSWD =
 ; For "postgres" only, either "disable", "require" or "verify-full"
 SSL_MODE = disable
+; For "sqlite3" only
+PATH = data/gogs.db
+
+[admin]
 
 [security]
 ; !!CHANGE THIS TO KEEP YOUR USER DATA SAFE!!
@@ -36,6 +40,8 @@ ACTIVE_CODE_LIVE_MINUTES = 180
 RESET_PASSWD_CODE_LIVE_MINUTES = 180
 ; User need to confirm e-mail for registration
 REGISTER_EMAIL_CONFIRM = false
+; Does not allow register and admin create account only
+DISENABLE_REGISTERATION = false
 
 [mailer]
 ENABLED = false
index b3be093533c91736d055a2ebc2ce7c035aa0208c..107d4b1057fde651a4f99141f2b1faff238e5d0f 100644 (file)
@@ -64,6 +64,10 @@ func CommitRepoAction(userId int64, userName string,
        watches = append(watches, Watch{UserId: userId})
 
        for i := range watches {
+               if userId == watches[i].UserId && i > 0 {
+                       continue // Do not add twice in case author watches his/her repository.
+               }
+
                _, err = orm.InsertOne(&Action{
                        UserId:      watches[i].UserId,
                        ActUserId:   userId,
index 214d1c767a15d7ced9e604bb07303a1349c27969..8df230975f3f12a4ad3f445194ce1b14f3e56fd3 100644 (file)
@@ -7,6 +7,7 @@ package models
 import (
        "fmt"
        "os"
+       "path"
 
        _ "github.com/go-sql-driver/mysql"
        _ "github.com/lib/pq"
@@ -23,6 +24,7 @@ func setEngine() {
        dbName := base.Cfg.MustValue("database", "NAME")
        dbUser := base.Cfg.MustValue("database", "USER")
        dbPwd := base.Cfg.MustValue("database", "PASSWD")
+       dbPath := base.Cfg.MustValue("database", "PATH", "data/gogs.db")
        sslMode := base.Cfg.MustValue("database", "SSL_MODE")
 
        var err error
@@ -33,6 +35,9 @@ func setEngine() {
        case "postgres":
                orm, err = xorm.NewEngine("postgres", fmt.Sprintf("user=%s password=%s dbname=%s sslmode=%s",
                        dbUser, dbPwd, dbName, sslMode))
+       case "sqlite3":
+               os.MkdirAll(path.Dir(dbPath), os.ModePerm)
+               orm, err = xorm.NewEngine("sqlite3", dbPath)
        default:
                fmt.Printf("Unknown database type: %s\n", dbType)
                os.Exit(2)
index f5ceaf7631f29b4b2af5eafff55ae779286b390f..93f68ceddfbba1a54a38963262b516e649f1613b 100644 (file)
@@ -323,11 +323,33 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep
        return nil
 }
 
+// UserRepo reporesents a repository with user name.
+type UserRepo struct {
+       *Repository
+       UserName string
+}
+
 // GetRepos returns given number of repository objects with offset.
-func GetRepos(num, offset int) ([]Repository, error) {
+func GetRepos(num, offset int) ([]UserRepo, error) {
        repos := make([]Repository, 0, num)
-       err := orm.Limit(num, offset).Asc("id").Find(&repos)
-       return repos, err
+       if err := orm.Limit(num, offset).Asc("id").Find(&repos); err != nil {
+               return nil, err
+       }
+
+       urepos := make([]UserRepo, len(repos))
+       for i := range repos {
+               urepos[i].Repository = &repos[i]
+               u := new(User)
+               has, err := orm.Id(urepos[i].Repository.OwnerId).Get(u)
+               if err != nil {
+                       return nil, err
+               } else if !has {
+                       return nil, ErrUserNotExist
+               }
+               urepos[i].UserName = u.Name
+       }
+
+       return urepos, nil
 }
 
 func RepoPath(userName, repoName string) string {
index 81f32bd591534bada628174a046f4e6c60e3faee..41b66b69f82ee4597335c693a503c00a4c02ea6a 100644 (file)
@@ -39,9 +39,10 @@ var (
 )
 
 var Service struct {
-       RegisterEmailConfirm bool
-       ActiveCodeLives      int
-       ResetPwdCodeLives    int
+       RegisterEmailConfirm   bool
+       DisenableRegisteration bool
+       ActiveCodeLives        int
+       ResetPwdCodeLives      int
 }
 
 func exeDir() (string, error) {
@@ -68,6 +69,7 @@ var logLevels = map[string]string{
 func newService() {
        Service.ActiveCodeLives = Cfg.MustInt("service", "ACTIVE_CODE_LIVE_MINUTES", 180)
        Service.ResetPwdCodeLives = Cfg.MustInt("service", "RESET_PASSWD_CODE_LIVE_MINUTES", 180)
+       Service.DisenableRegisteration = Cfg.MustBool("service", "DISENABLE_REGISTERATION", false)
 }
 
 func newLogService() {
index e596d1dada650151d936f60abb901f0d45bfaffd..8d95dbeab711acb185a999caae7be2911ed1c4e5 100644 (file)
@@ -33,6 +33,10 @@ func List(l *list.List) chan interface{} {
        return c
 }
 
+var mailDomains = map[string]string{
+       "gmail.com": "gmail.com",
+}
+
 var TemplateFuncs template.FuncMap = map[string]interface{}{
        "AppName": func() string {
                return AppName
@@ -56,7 +60,12 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{
        "DateFormat": DateFormat,
        "List":       List,
        "Mail2Domain": func(mail string) string {
-               return "mail." + strings.Split(mail, "@")[1]
+               suffix := strings.SplitN(mail, "@", 2)[1]
+               domain, ok := mailDomains[suffix]
+               if !ok {
+                       return "mail." + suffix
+               }
+               return domain
        },
        "SubStr": func(str string, start, length int) string {
                return str[start : start+length]
index ea6922591e0b2cc041bb318c9b4b36725d599347..40b594ab806af01eb7481f8d77fad36753faf1f5 100644 (file)
@@ -112,6 +112,12 @@ func SignUp(ctx *middleware.Context, form auth.RegisterForm) {
        ctx.Data["Title"] = "Sign Up"
        ctx.Data["PageIsSignUp"] = true
 
+       if base.Service.DisenableRegisteration {
+               ctx.Data["DisenableRegisteration"] = true
+               ctx.HTML(200, "user/signup")
+               return
+       }
+
        if ctx.Req.Method == "GET" {
                ctx.HTML(200, "user/signup")
                return
index 4522c66792454944bbbf285aa2776be564fef8a9..f4834c9060730dd83030f8693fe1e9331f99bc99 100644 (file)
@@ -20,6 +20,7 @@
                     <thead>
                         <tr>
                             <th>Id</th>
+                            <th>Owner</th>
                             <th>Name</th>
                             <th>Private</th>
                             <th>Watches</th>
@@ -31,7 +32,8 @@
                         {{range .Repos}}
                         <tr>
                             <td>{{.Id}}</td>
-                            <td>{{.Name}}</td>
+                            <th>{{.UserName}}</th>
+                            <td><a href="/{{.UserName}}/{{.Name}}">{{.Name}}</a></td>
                             <td><i class="fa fa{{if .Private}}-check{{end}}-square-o"></i></td>
                             <td>{{.NumWatches}}</td>
                             <td>{{.NumForks}}</td>
index c087f268f2881bd48223463db699bbe43a659a1b..b690e1771e1cb71ca828812adecd952a52057b5d 100644 (file)
@@ -32,7 +32,7 @@
                         {{range .Users}}
                         <tr>
                             <td>{{.Id}}</td>
-                            <td>{{.Name}}</td>
+                            <td><a href="/user/{{.Name}}">{{.Name}}</a></td>
                             <td>{{.Email}}</td>
                             <td><i class="fa fa{{if .IsActive}}-check{{end}}-square-o"></i></td>
                             <td><i class="fa fa{{if .IsAdmin}}-check{{end}}-square-o"></i></td>
index 9c064d07e760307908f814297d13b5eeb8a865fd..d775191a5adaf208a551ef969fb9a049612e26f5 100644 (file)
@@ -11,7 +11,8 @@
             <a class="navbar-right gogs-nav-item{{if .PageIsNewRepo}} active{{end}}" href="/repo/create" data-toggle="tooltip" data-placement="bottom" title="New Repository"><i class="fa fa-plus fa-lg"></i></a>
             <a class="navbar-right gogs-nav-item{{if .PageIsUserSetting}} active{{end}}" href="/user/setting"  data-toggle="tooltip" data-placement="bottom" title="Setting"><i class="fa fa-cogs fa-lg"></i></a>
             {{if .IsAdmin}}<a class="navbar-right gogs-nav-item{{if .PageIsAdmin}} active{{end}}" href="/admin"  data-toggle="tooltip" data-placement="bottom" title="Admin"><i class="fa fa-gear fa-lg"></i></a>{{end}}
-            {{else}}<a id="gogs-nav-signin" class="gogs-nav-item navbar-right navbar-btn btn btn-danger" href="/user/login/">Sign in</a>{{end}}
+            {{else}}<a id="gogs-nav-signin" class="gogs-nav-item navbar-right navbar-btn btn btn-success" href="/user/login/">Sign In</a>
+            <a id="gogs-nav-signup" class="gogs-nav-item navbar-right navbar-btn btn btn-info" href="/user/sign_up/">Sign Up</a>{{end}}
         </nav>
     </div>
 </div>
index 8a7b5e479b30328b2f46f62b5498f7db6464c91c..a1c3cfbb268bfbda56e27c62dfcb2eb3e48b2451 100644 (file)
@@ -15,7 +15,7 @@
                     <b class="caret"></b></a>
                 <ul class="dropdown-menu">
                     {{range .Branches}}
-                    <li><a {{if eq . $.Branchname}}class="current" {{end}}href="{{$.BranchLink}}">{{.}}</a></li>
+                    <li><a {{if eq . $.Branchname}}class="current" {{end}}href="/{{$.Username}}/{{$.Reponame}}/src/{{.}}">{{.}}</a></li>
                     {{end}}
                 </ul>
             </div>
index e60cedec88e8fa7c3d8b6cdf4983bd035d331b57..a49bf11405db3320b9958d14d83e3f85635e3ad4 100644 (file)
@@ -32,7 +32,7 @@
         </div>
 
         <div class="form-group text-center" id="gogs-social-login">
-            <a class="btn btn-default btn-lg">Social Login</a>
+            <a class="btn btn-danger btn-lg">Register new account</a>
         </div>
     </form>
 </div>
index 187364de8f601ddf63558ca8afe6b2ae77f5dc07..069d34a5b2c0a5bc9182401c4f73258b93517678 100644 (file)
@@ -2,6 +2,9 @@
 {{template "base/navbar" .}}
 <div class="container" id="gogs-body" data-page="user-signup">
        <form action="/user/sign_up" method="post" class="form-horizontal gogs-card" id="gogs-login-card">
+               {{if .DisenableRegisteration}}
+               Sorry, registeration has been disenabled, you can only get account from administrator.
+               {{else}}
         <h3>Sign Up</h3>
            <div class="alert alert-danger form-error{{if .HasError}}{{else}} hidden{{end}}">{{.ErrorMsg}}</div>
                <div class="form-group {{if .Err_UserName}}has-error has-feedback{{end}}">
@@ -43,6 +46,7 @@
                 <a href="/user/login">Already have an account? Sign in now!</a>
             </div>
            </div>
+           {{end}}
        </form>
 </div>
 {{template "base/footer" .}}
\ No newline at end of file