add ssh supports(unfinished)

This commit is contained in:
Lunny Xiao 2014-02-19 17:50:53 +08:00
parent 94311e187f
commit be0ba9ea88
8 changed files with 305 additions and 39 deletions

View file

@ -17,7 +17,7 @@ import (
var (
orm *xorm.Engine
repoRootPath string
RepoRootPath string
)
type Members struct {
@ -71,5 +71,9 @@ func setEngine() {
func init() {
setEngine()
orm.Sync(new(User))
err := orm.Sync(new(User), new(PublicKey), new(Repo), new(Access))
if err != nil {
log.Error("sync database struct error: %s", err)
os.Exit(1)
}
}

View file

@ -29,15 +29,22 @@ type Repo struct {
// check if repository is exist
func IsRepositoryExist(user *User, reposName string) (bool, error) {
repo := Repo{OwnerId: user.Id}
// TODO: get repository by nocase name
return orm.Where("lower_name = ?", strings.ToLower(reposName)).Get(&repo)
has, err := orm.Where("lower_name = ?", strings.ToLower(reposName)).Get(&repo)
if err != nil {
return has, err
}
s, err := os.Stat(filepath.Join(RepoRootPath, user.Name, reposName))
if err != nil {
return false, err
}
return s.IsDir(), nil
}
//
// create a repository for a user or orgnaziation
//
func CreateRepository(user *User, reposName string) (*Repo, error) {
p := filepath.Join(repoRootPath, user.Name)
p := filepath.Join(RepoRootPath, user.Name)
os.MkdirAll(p, os.ModePerm)
f := filepath.Join(p, reposName+".git")
_, err := git.InitRepository(f, false)
@ -108,7 +115,7 @@ func DeleteRepository(user *User, reposName string) (err error) {
session.Rollback()
return err
}
if err = os.RemoveAll(filepath.Join(repoRootPath, user.Name, reposName+".git")); err != nil {
if err = os.RemoveAll(filepath.Join(RepoRootPath, user.Name, reposName+".git")); err != nil {
// TODO: log and delete manully
return err
}

View file

@ -123,6 +123,19 @@ func (user *User) EncodePasswd() error {
return err
}
func GetUserByKeyId(keyId int64) (*User, error) {
user := new(User)
has, err := orm.Sql("select a.* from user as a, public_key as b where a.id = b.owner_id and b.id=?", keyId).Get(user)
if err != nil {
return nil, err
}
if !has {
err = errors.New("not exist key owner")
return nil, err
}
return user, nil
}
// LoginUserPlain validates user by raw user name and password.
func LoginUserPlain(name, passwd string) (*User, error) {
user := User{Name: name, Passwd: passwd}