Переглянути джерело

Merge branch 'master' of github.com:gogits/gogs

Unknown 11 роки тому
батько
коміт
5da2ad7435
4 змінених файлів з 87 додано та 15 видалено
  1. 29 0
      models/access.go
  2. 1 13
      models/models.go
  3. 55 0
      models/publickey.go
  4. 2 2
      models/repo.go

+ 29 - 0
models/access.go

@@ -0,0 +1,29 @@
+package models
+
+import (
+	"strings"
+	"time"
+)
+
+const (
+	Readable = iota + 1
+	Writable
+)
+
+type Access struct {
+	Id       int64
+	UserName string    `xorm:"unique(s)"`
+	RepoName string    `xorm:"unique(s)"`
+	Mode     int       `xorm:"unique(s)"`
+	Created  time.Time `xorm:"created"`
+}
+
+func AddAccess(access *Access) error {
+	_, err := orm.Insert(access)
+	return err
+}
+
+// if one user can read or write one repository
+func HasAccess(userName, repoName, mode string) (bool, error) {
+	return orm.Get(&Access{0, strings.ToLower(userName), strings.ToLower(repoName), mode})
+}

+ 1 - 13
models/models.go

@@ -4,25 +4,13 @@
 
 package models
 
-import (
-	"time"
-
-	"github.com/lunny/xorm"
-)
+import "github.com/lunny/xorm"
 
 var (
 	orm          *xorm.Engine
 	repoRootPath string
 )
 
-type PublicKey struct {
-	Id      int64
-	Name    string    `xorm:"unique not null"`
-	Content string    `xorm:"text not null"`
-	Created time.Time `xorm:"created"`
-	Updated time.Time `xorm:"updated"`
-}
-
 type Members struct {
 	Id     int64
 	OrgId  int64 `xorm:"unique(s) index"`

+ 55 - 0
models/publickey.go

@@ -0,0 +1,55 @@
+package models
+
+import (
+	"fmt"
+	"os"
+	"path/filepath"
+	"time"
+)
+
+var (
+	publicKeyRootPath string
+	tmplPublicKey     = "### autogenerated by gitgos, DO NOT EDIT\n" +
+		"command=\"gitosis-serve %s\",no-port-forwarding," +
+		"no-X11-forwarding,no-agent-forwarding,no-pty %s"
+)
+
+type PublicKey struct {
+	Id      int64
+	OwnerId int64     `xorm:"index"`
+	Name    string    `xorm:"unique not null"`
+	Content string    `xorm:"text not null"`
+	Created time.Time `xorm:"created"`
+	Updated time.Time `xorm:"updated"`
+}
+
+func GenAuthorizedKey(user, key string) string {
+	return fmt.Sprintf(tmplPublicKey, user, key)
+}
+
+func AddPublicKey(key *PublicKey, user string) error {
+	_, err := orm.Insert(key)
+	if err != nil {
+		return err
+	}
+
+	err = SaveAuthorizedKeyFile(user, key.Content)
+	if err != nil {
+		_, err2 := orm.Delete(key)
+		if err2 != nil {
+			// TODO: logo the error
+		}
+		return err
+	}
+
+	return nil
+}
+
+func SaveAuthorizedKeyFile(user, key string) error {
+	f, err := os.Create(filepath.Join(publicKeyRootPath, user+".pub"))
+	if err != nil {
+		return err
+	}
+	_, err = f.WriteString(GenAuthorizedKey(user, key))
+	return err
+}

+ 2 - 2
models/repo.go

@@ -39,7 +39,7 @@ func IsRepositoryExist(user *User, reposName string) (bool, error) {
 func CreateRepository(user *User, reposName string) (*Repo, error) {
 	p := filepath.Join(repoRootPath, user.Name)
 	os.MkdirAll(p, os.ModePerm)
-	f := filepath.Join(p, reposName)
+	f := filepath.Join(p, reposName+".git")
 	_, err := git.InitRepository(f, false)
 	if err != nil {
 		return nil, err
@@ -108,7 +108,7 @@ func DeleteRepository(user *User, reposName string) (err error) {
 		session.Rollback()
 		return err
 	}
-	if err = os.RemoveAll(filepath.Join(repoRootPath, user.Name, reposName)); err != nil {
+	if err = os.RemoveAll(filepath.Join(repoRootPath, user.Name, reposName+".git")); err != nil {
 		// TODO: log and delete manully
 		return err
 	}