From ee9bcf4d9ff41fb0cc02e53c2da2b9bfc520d54b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 17 Feb 2014 23:57:23 +0800 Subject: add publickey & access --- models/publickey.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 models/publickey.go (limited to 'models/publickey.go') diff --git a/models/publickey.go b/models/publickey.go new file mode 100644 index 00000000..bc9fbb33 --- /dev/null +++ b/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 +} -- cgit v1.2.3