mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Fix SSH key bug in windows
This commit is contained in:
		@@ -19,6 +19,8 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Unknwon/com"
 | 
			
		||||
 | 
			
		||||
	"github.com/gogits/gogs/modules/log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
@@ -99,8 +101,8 @@ func AddPublicKey(key *PublicKey) (err error) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Calculate fingerprint.
 | 
			
		||||
	tmpPath := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
 | 
			
		||||
		"id_rsa.pub")
 | 
			
		||||
	tmpPath := strings.Replace(filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
 | 
			
		||||
		"id_rsa.pub"), "\\", "/", -1)
 | 
			
		||||
	os.MkdirAll(path.Dir(tmpPath), os.ModePerm)
 | 
			
		||||
	if err = ioutil.WriteFile(tmpPath, []byte(key.Content), os.ModePerm); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
@@ -127,25 +129,11 @@ func AddPublicKey(key *PublicKey) (err error) {
 | 
			
		||||
	return 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
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
func rewriteAuthorizedKeys(key *PublicKey, p, tmpP string) error {
 | 
			
		||||
	// Delete SSH key in SSH key file.
 | 
			
		||||
	sshOpLocker.Lock()
 | 
			
		||||
	defer sshOpLocker.Unlock()
 | 
			
		||||
 | 
			
		||||
	p := filepath.Join(sshPath, "authorized_keys")
 | 
			
		||||
	tmpP := filepath.Join(sshPath, "authorized_keys.tmp")
 | 
			
		||||
	fr, err := os.Open(p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
@@ -188,8 +176,29 @@ func DeletePublicKey(key *PublicKey) (err error) {
 | 
			
		||||
			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 os.Rename(tmpP, p)
 | 
			
		||||
 
 | 
			
		||||
@@ -372,7 +372,7 @@ func RepoPath(userName, repoName string) string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -201,7 +201,7 @@ func VerifyUserActiveCode(code string) (user *User) {
 | 
			
		||||
 | 
			
		||||
// UpdateUser updates user's information.
 | 
			
		||||
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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,7 @@ func Toggle(options *ToggleOptions) martini.Handler {
 | 
			
		||||
				ctx.Error(403)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			ctx.Data["PageIsAdmin"] = true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -216,10 +216,6 @@ func InitContext() martini.Handler {
 | 
			
		||||
			ctx.Data["SignedUserId"] = user.Id
 | 
			
		||||
			ctx.Data["SignedUserName"] = user.LowerName
 | 
			
		||||
			ctx.Data["IsAdmin"] = ctx.User.IsAdmin
 | 
			
		||||
 | 
			
		||||
			if ctx.User.IsAdmin {
 | 
			
		||||
				ctx.Data["PageIsAdmin"] = true
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// get or create csrf token
 | 
			
		||||
 
 | 
			
		||||
@@ -28,3 +28,13 @@ func Issues(ctx *middleware.Context, params martini.Params) {
 | 
			
		||||
 | 
			
		||||
	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 {
 | 
			
		||||
 | 
			
		||||
	// }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user