@@ -77,6 +77,12 @@ func AddPublicKey(key *PublicKey) error { | |||||
return nil | return nil | ||||
} | } | ||||
func ListPublicKey(userId int64) ([]PublicKey, error) { | |||||
keys := make([]PublicKey, 0) | |||||
err := orm.Find(&keys, &PublicKey{OwnerId: userId}) | |||||
return keys, err | |||||
} | |||||
func SaveAuthorizedKeyFile(key *PublicKey) error { | func SaveAuthorizedKeyFile(key *PublicKey) error { | ||||
p := filepath.Join(sshPath, "authorized_keys") | p := filepath.Join(sshPath, "authorized_keys") | ||||
f, err := os.OpenFile(p, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) | f, err := os.OpenFile(p, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) | ||||
@@ -11,26 +11,46 @@ import ( | |||||
"github.com/martini-contrib/render" | "github.com/martini-contrib/render" | ||||
"github.com/gogits/gogs/models" | "github.com/gogits/gogs/models" | ||||
"github.com/martini-contrib/sessions" | |||||
) | ) | ||||
func AddPublicKey(req *http.Request, r render.Render) { | |||||
func AddPublicKey(req *http.Request, r render.Render, session sessions.Session) { | |||||
if req.Method == "GET" { | if req.Method == "GET" { | ||||
r.HTML(200, "user/publickey_add", map[string]interface{}{ | r.HTML(200, "user/publickey_add", map[string]interface{}{ | ||||
"Title": "Add Public Key", | |||||
"Title": "Add Public Key", | |||||
"IsSigned": IsSignedIn(session), | |||||
}) | }) | ||||
return | return | ||||
} | } | ||||
k := &models.PublicKey{OwnerId: 1, | |||||
k := &models.PublicKey{OwnerId: SignedInId(session), | |||||
Name: req.FormValue("keyname"), | Name: req.FormValue("keyname"), | ||||
Content: req.FormValue("key_content"), | Content: req.FormValue("key_content"), | ||||
} | } | ||||
err := models.AddPublicKey(k) | err := models.AddPublicKey(k) | ||||
if err != nil { | if err != nil { | ||||
r.HTML(403, "status/403", map[string]interface{}{ | r.HTML(403, "status/403", map[string]interface{}{ | ||||
"Title": fmt.Sprintf("%v", err), | |||||
"Title": fmt.Sprintf("%v", err), | |||||
"IsSigned": IsSignedIn(session), | |||||
}) | }) | ||||
} else { | } else { | ||||
r.HTML(200, "user/publickey_added", map[string]interface{}{}) | r.HTML(200, "user/publickey_added", map[string]interface{}{}) | ||||
} | } | ||||
} | } | ||||
func ListPublicKey(req *http.Request, r render.Render, session sessions.Session) { | |||||
keys, err := models.ListPublicKey(SignedInId(session)) | |||||
if err != nil { | |||||
r.HTML(200, "base/error", map[string]interface{}{ | |||||
"Error": fmt.Sprintf("%v", err), | |||||
"IsSigned": IsSignedIn(session), | |||||
}) | |||||
return | |||||
} | |||||
r.HTML(200, "user/publickey_list", map[string]interface{}{ | |||||
"Title": "repositories", | |||||
"Keys": keys, | |||||
"IsSigned": IsSignedIn(session), | |||||
}) | |||||
} |
@@ -10,7 +10,7 @@ | |||||
<img src="http://1.gravatar.com/avatar/{{.Avatar}}?s=28" alt="user-avatar" title="username"/> | <img src="http://1.gravatar.com/avatar/{{.Avatar}}?s=28" alt="user-avatar" title="username"/> | ||||
</a> | </a> | ||||
<a class="navbar-right gogs-nav-item" href="/repo/create" data-toggle="tooltip" data-placement="bottom" title="New Repository"><i class="fa fa-plus fa-lg"></i></a> | <a class="navbar-right gogs-nav-item" href="/repo/create" data-toggle="tooltip" data-placement="bottom" title="New Repository"><i class="fa fa-plus fa-lg"></i></a> | ||||
<a class="navbar-right gogs-nav-item" href="#" data-toggle="tooltip" data-placement="bottom" title="Setting"><i class="fa fa-cogs fa-lg"></i></a> | |||||
<a class="navbar-right gogs-nav-item" href="/user/publickey/list" data-toggle="tooltip" data-placement="bottom" title="Setting"><i class="fa fa-cogs fa-lg"></i></a> | |||||
{{else}}<a id="gogs-nav-signin" class="gogs-nav-item navbar-right navbar-btn btn btn-danger" href="/user/login/">Sign in</a>{{end}} | {{else}}<a id="gogs-nav-signin" class="gogs-nav-item navbar-right navbar-btn btn btn-danger" href="/user/login/">Sign in</a>{{end}} | ||||
</nav> | </nav> | ||||
</div> | </div> | ||||
@@ -1,6 +1,6 @@ | |||||
{{template "base/head" .}} | {{template "base/head" .}} | ||||
{{template "base/navbar" .}} | {{template "base/navbar" .}} | ||||
<div class="container"> | |||||
<div class="container" id="gogs-body"> | |||||
<form action="/user/publickey/add" method="post" class="form-horizontal"> | <form action="/user/publickey/add" method="post" class="form-horizontal"> | ||||
<div class="form-group"> | <div class="form-group"> | ||||
<label class="col-md-4 control-label">Name of this public key: </label> | <label class="col-md-4 control-label">Name of this public key: </label> | ||||
@@ -0,0 +1,12 @@ | |||||
{{template "base/head" .}} | |||||
{{template "base/navbar" .}} | |||||
<div class="container" id="gogs-body"> | |||||
<div><a href="/user/publickey/add">Add publick key</a></div> | |||||
<ul> | |||||
{{range .Keys}} | |||||
<li>{{.Name}}</li> | |||||
<li>{{.Content}}</li> | |||||
{{end}} | |||||
</ul> | |||||
</div> | |||||
{{template "base/footer" .}} |
@@ -65,6 +65,7 @@ func runWeb(*cli.Context) { | |||||
m.Get("/user/profile", user.Profile) // should be /username | m.Get("/user/profile", user.Profile) // should be /username | ||||
m.Any("/user/delete", user.Delete) | m.Any("/user/delete", user.Delete) | ||||
m.Any("/user/publickey/add", user.AddPublicKey) | m.Any("/user/publickey/add", user.AddPublicKey) | ||||
m.Any("/user/publickey/list", user.ListPublicKey) | |||||
m.Any("/repo/create", repo.Create) | m.Any("/repo/create", repo.Create) | ||||
m.Any("/repo/delete", repo.Delete) | m.Any("/repo/delete", repo.Delete) | ||||
m.Any("/repo/list", repo.List) | m.Any("/repo/list", repo.List) | ||||