add publickey & access
This commit is contained in:
		
							parent
							
								
									b1c5adc2f2
								
							
						
					
					
						commit
						ee9bcf4d9f
					
				|  | @ -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}) | ||||
| } | ||||
|  | @ -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"` | ||||
|  |  | |||
|  | @ -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 | ||||
| } | ||||
|  | @ -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 | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue