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 }