Fix SSH key bug in windows
This commit is contained in:
parent
e385efcc22
commit
b3cfd9fe0c
6 changed files with 40 additions and 24 deletions
|
@ -19,6 +19,8 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Unknwon/com"
|
"github.com/Unknwon/com"
|
||||||
|
|
||||||
|
"github.com/gogits/gogs/modules/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -99,8 +101,8 @@ func AddPublicKey(key *PublicKey) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate fingerprint.
|
// Calculate fingerprint.
|
||||||
tmpPath := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
|
tmpPath := strings.Replace(filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
|
||||||
"id_rsa.pub")
|
"id_rsa.pub"), "\\", "/", -1)
|
||||||
os.MkdirAll(path.Dir(tmpPath), os.ModePerm)
|
os.MkdirAll(path.Dir(tmpPath), os.ModePerm)
|
||||||
if err = ioutil.WriteFile(tmpPath, []byte(key.Content), os.ModePerm); err != nil {
|
if err = ioutil.WriteFile(tmpPath, []byte(key.Content), os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -127,25 +129,11 @@ func AddPublicKey(key *PublicKey) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeletePublicKey deletes SSH key information both in database and authorized_keys file.
|
func rewriteAuthorizedKeys(key *PublicKey, p, tmpP string) error {
|
||||||
func DeletePublicKey(key *PublicKey) (err error) {
|
|
||||||
// Delete SSH key in database.
|
|
||||||
has, err := orm.Id(key.Id).Get(key)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
} else if !has {
|
|
||||||
return errors.New("Public key does not exist")
|
|
||||||
}
|
|
||||||
if _, err = orm.Delete(key); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete SSH key in SSH key file.
|
// Delete SSH key in SSH key file.
|
||||||
sshOpLocker.Lock()
|
sshOpLocker.Lock()
|
||||||
defer sshOpLocker.Unlock()
|
defer sshOpLocker.Unlock()
|
||||||
|
|
||||||
p := filepath.Join(sshPath, "authorized_keys")
|
|
||||||
tmpP := filepath.Join(sshPath, "authorized_keys.tmp")
|
|
||||||
fr, err := os.Open(p)
|
fr, err := os.Open(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -188,8 +176,29 @@ func DeletePublicKey(key *PublicKey) (err error) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if err = os.Remove(p); err != nil {
|
// DeletePublicKey deletes SSH key information both in database and authorized_keys file.
|
||||||
|
func DeletePublicKey(key *PublicKey) (err error) {
|
||||||
|
// Delete SSH key in database.
|
||||||
|
has, err := orm.Id(key.Id).Get(key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if !has {
|
||||||
|
return errors.New("Public key does not exist")
|
||||||
|
}
|
||||||
|
if _, err = orm.Delete(key); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
p := filepath.Join(sshPath, "authorized_keys")
|
||||||
|
tmpP := filepath.Join(sshPath, "authorized_keys.tmp")
|
||||||
|
log.Trace("ssh.DeletePublicKey(authorized_keys): %s", p)
|
||||||
|
|
||||||
|
if err = rewriteAuthorizedKeys(key, p, tmpP); err != nil {
|
||||||
|
return err
|
||||||
|
} else if err = os.Remove(p); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return os.Rename(tmpP, p)
|
return os.Rename(tmpP, p)
|
||||||
|
|
|
@ -372,7 +372,7 @@ func RepoPath(userName, repoName string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateRepository(repo *Repository) error {
|
func UpdateRepository(repo *Repository) error {
|
||||||
_, err := orm.Id(repo.Id).UseBool().Update(repo)
|
_, err := orm.Id(repo.Id).UseBool().Cols("description", "website").Update(repo)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -201,7 +201,7 @@ func VerifyUserActiveCode(code string) (user *User) {
|
||||||
|
|
||||||
// UpdateUser updates user's information.
|
// UpdateUser updates user's information.
|
||||||
func UpdateUser(user *User) (err error) {
|
func UpdateUser(user *User) (err error) {
|
||||||
_, err = orm.Id(user.Id).UseBool().Update(user)
|
_, err = orm.Id(user.Id).UseBool().Cols("website", "location").Update(user)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ func Toggle(options *ToggleOptions) martini.Handler {
|
||||||
ctx.Error(403)
|
ctx.Error(403)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
ctx.Data["PageIsAdmin"] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,10 +216,6 @@ func InitContext() martini.Handler {
|
||||||
ctx.Data["SignedUserId"] = user.Id
|
ctx.Data["SignedUserId"] = user.Id
|
||||||
ctx.Data["SignedUserName"] = user.LowerName
|
ctx.Data["SignedUserName"] = user.LowerName
|
||||||
ctx.Data["IsAdmin"] = ctx.User.IsAdmin
|
ctx.Data["IsAdmin"] = ctx.User.IsAdmin
|
||||||
|
|
||||||
if ctx.User.IsAdmin {
|
|
||||||
ctx.Data["PageIsAdmin"] = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// get or create csrf token
|
// get or create csrf token
|
||||||
|
|
|
@ -28,3 +28,13 @@ func Issues(ctx *middleware.Context, params martini.Params) {
|
||||||
|
|
||||||
ctx.HTML(200, "repo/issues")
|
ctx.HTML(200, "repo/issues")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CreateIssue(ctx *middleware.Context, params martini.Params) {
|
||||||
|
if !ctx.Repo.IsOwner {
|
||||||
|
ctx.Error(404)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// else if err = models.CreateIssue(userId, repoId, milestoneId, assigneeId, name, labels, mentions, content, isPull); err != nil {
|
||||||
|
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue