mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	ssh keys operation page ui
This commit is contained in:
		| @@ -14,7 +14,7 @@ DB_TYPE = mysql | |||||||
| HOST =  | HOST =  | ||||||
| NAME = gogs | NAME = gogs | ||||||
| USER = root | USER = root | ||||||
| PASSWD =  | PASSWD = fuxiaohei | ||||||
| PASSWD_jiahua = root | PASSWD_jiahua = root | ||||||
|  |  | ||||||
| [security] | [security] | ||||||
|   | |||||||
| @@ -28,6 +28,10 @@ body { | |||||||
|     margin: 0 .5em; |     margin: 0 .5em; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .list-group .list-group-item { | ||||||
|  |     background-color: transparent; | ||||||
|  | } | ||||||
|  |  | ||||||
| /* gogits nav header */ | /* gogits nav header */ | ||||||
| .gogs-masthead { | .gogs-masthead { | ||||||
|     background-color: #428bca; |     background-color: #428bca; | ||||||
| @@ -222,4 +226,74 @@ body { | |||||||
|  |  | ||||||
| #gogs-repo-create textarea[name=desc] { | #gogs-repo-create textarea[name=desc] { | ||||||
|     height: 8em; |     height: 8em; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* gogits user setting */ | ||||||
|  |  | ||||||
|  | #gogs-user-setting-nav > h4, #gogs-user-setting-container > h4 ,#gogs-ssh-keys > h4{ | ||||||
|  |     padding-bottom: 18px; | ||||||
|  |     margin-bottom: 18px; | ||||||
|  |     border-bottom: 1px solid #CCC; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-user-setting-nav .list-group .list-group-item a { | ||||||
|  |     margin-left: 0; | ||||||
|  |     padding: .6em; | ||||||
|  |     font-size: 14px; | ||||||
|  |     color: #3B73AF; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-user-setting-nav .list-group .list-group-item { | ||||||
|  |     background-color: transparent; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-user-setting-nav .list-group .list-group-item-success a { | ||||||
|  |     font-weight: bold; | ||||||
|  |     color: #444; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* gogits user ssh keys */ | ||||||
|  |  | ||||||
|  | #gogs-ssh-keys .list-group-item { | ||||||
|  |     line-height: 48px; | ||||||
|  |     border-bottom: 1px solid #DDD; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-ssh-keys .list-group-item:after{ | ||||||
|  |     clear: both; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-ssh-keys .list-group-item:hover a.delete{ | ||||||
|  |     display: block; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-ssh-keys .name { | ||||||
|  |     font-size: 14px; | ||||||
|  |     font-weight: bold; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-ssh-keys .list-group-item a.delete { | ||||||
|  |     float: right; | ||||||
|  |     color: white; | ||||||
|  |     cursor: pointer; | ||||||
|  |     margin-top: 10px; | ||||||
|  |     border-radius: 3px; | ||||||
|  |     display: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-ssh-keys .print { | ||||||
|  |     padding-left: 1em; | ||||||
|  |     color: #888; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-ssh-add { | ||||||
|  |     display: inline-block; | ||||||
|  |     color: white; | ||||||
|  |     cursor: pointer; | ||||||
|  |     margin-left: 0; | ||||||
|  |     border-radius: 3px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #gogs-ssh-form textarea{ | ||||||
|  |     height: 16em; | ||||||
| } | } | ||||||
| @@ -3,12 +3,7 @@ var Gogits = { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| (function ($) { | (function ($) { | ||||||
|     Gogits.showTooltips = function () { |  | ||||||
|         $("body").tooltip({ |  | ||||||
|             selector: "[data-toggle=tooltip]" |  | ||||||
|             //container: "body" |  | ||||||
|         }); |  | ||||||
|     }; |  | ||||||
|     Gogits.showTab = function (selector, index) { |     Gogits.showTab = function (selector, index) { | ||||||
|         if (!index) { |         if (!index) { | ||||||
|             index = 0; |             index = 0; | ||||||
| @@ -27,11 +22,29 @@ var Gogits = { | |||||||
|         }; |         }; | ||||||
|         $form.validate(options); |         $form.validate(options); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     // ----- init elements | ||||||
|  |     Gogits.initModals = function () { | ||||||
|  |         var modals = $("[data-toggle=modal]"); | ||||||
|  |         if (modals.length < 1) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         $.each(modals, function (i, item) { | ||||||
|  |             $(item).modal("hide"); | ||||||
|  |         }); | ||||||
|  |     }; | ||||||
|  |     Gogits.initTooltips = function () { | ||||||
|  |         $("body").tooltip({ | ||||||
|  |             selector: "[data-toggle=tooltip]" | ||||||
|  |             //container: "body" | ||||||
|  |         }); | ||||||
|  |     }; | ||||||
| })(jQuery); | })(jQuery); | ||||||
|  |  | ||||||
|  |  | ||||||
| function initCore() { | function initCore() { | ||||||
|     Gogits.showTooltips(); |     Gogits.initTooltips(); | ||||||
|  |     Gogits.initModals(); | ||||||
| } | } | ||||||
|  |  | ||||||
| function initRegister() { | function initRegister() { | ||||||
|   | |||||||
							
								
								
									
										54
									
								
								routers/user/setting.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								routers/user/setting.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | // Copyright 2014 The Gogs Authors. All rights reserved. | ||||||
|  | // Use of this source code is governed by a MIT-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package user | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogits/gogs/models" | ||||||
|  | 	"github.com/gogits/gogs/modules/auth" | ||||||
|  | 	"github.com/gogits/gogs/modules/base" | ||||||
|  | 	"github.com/gogits/gogs/modules/log" | ||||||
|  | 	"github.com/martini-contrib/render" | ||||||
|  | 	"github.com/martini-contrib/sessions" | ||||||
|  | 	"net/http" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func Setting(r render.Render, data base.TmplData, session sessions.Session) { | ||||||
|  | 	data["Title"] = "Setting" | ||||||
|  | 	data["PageIsUserSetting"] = true | ||||||
|  | 	r.HTML(200, "user/setting", data) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func SettingSSHKeys(r render.Render, data base.TmplData, req *http.Request, session sessions.Session) { | ||||||
|  | 	// add ssh key | ||||||
|  | 	if req.Method == "POST" { | ||||||
|  | 		k := &models.PublicKey{OwnerId: auth.SignedInId(session), | ||||||
|  | 			Name:    req.FormValue("keyname"), | ||||||
|  | 			Content: req.FormValue("key_content"), | ||||||
|  | 		} | ||||||
|  | 		err := models.AddPublicKey(k) | ||||||
|  | 		if err != nil { | ||||||
|  | 			data["ErrorMsg"] = err | ||||||
|  | 			log.Error("ssh.AddPublicKey: %v", err) | ||||||
|  | 			r.HTML(200, "base/error", data) | ||||||
|  | 			return | ||||||
|  | 		} else { | ||||||
|  | 			data["AddSSHKeySuccess"] = true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	// get keys | ||||||
|  | 	keys, err := models.ListPublicKey(auth.SignedInId(session)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		data["ErrorMsg"] = err | ||||||
|  | 		log.Error("ssh.ListPublicKey: %v", err) | ||||||
|  | 		r.HTML(200, "base/error", data) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// set to template | ||||||
|  | 	data["Title"] = "SSH Keys" | ||||||
|  | 	data["PageIsUserSetting"] = true | ||||||
|  | 	data["Keys"] = keys | ||||||
|  | 	r.HTML(200, "user/publickey", data) | ||||||
|  | } | ||||||
| @@ -10,7 +10,7 @@ | |||||||
|                 <img src="http://1.gravatar.com/avatar/{{.SignedAvatar}}?s=28" alt="user-avatar" title="username"/> |                 <img src="http://1.gravatar.com/avatar/{{.SignedAvatar}}?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="/user/publickey/list"  data-toggle="tooltip" data-placement="bottom" title="Setting"><i class="fa fa-cogs fa-lg"></i></a> |             <a class="navbar-right gogs-nav-item{{if .PageIsUserSetting}} active{{end}}" href="/user/setting"  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> | ||||||
|   | |||||||
							
								
								
									
										62
									
								
								templates/user/publickey.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								templates/user/publickey.tmpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | {{template "base/head" .}} | ||||||
|  | {{template "base/navbar" .}} | ||||||
|  | <div id="gogs-body" class="container"> | ||||||
|  |     <div id="gogs-user-setting-nav" class="col-md-3"> | ||||||
|  |         <h4>Account Setting</h4> | ||||||
|  |         <ul class="list-group"> | ||||||
|  |             <li class="list-group-item"><a href="/user/setting">Account Profile</a></li> | ||||||
|  |             <li class="list-group-item"><a href="#">Emails and Password</a></li> | ||||||
|  |             <li class="list-group-item"><a href="#">Notifications</a></li> | ||||||
|  |             <li class="list-group-item list-group-item-success"><a href="/user/setting/ssh/">SSH Keys</a></li> | ||||||
|  |             <li class="list-group-item"><a href="#">Security</a></li> | ||||||
|  |             <li class="list-group-item"><a href="#">Kill Myself</a></li> | ||||||
|  |         </ul> | ||||||
|  |     </div> | ||||||
|  |     <div id="gogs-user-setting-container" class="col-md-9"> | ||||||
|  |         <div id="gogs-ssh-keys"> | ||||||
|  |             <h4>SSH Keys</h4>{{if .AddSSHKeySuccess}} | ||||||
|  |             <p class="alert alert-success">New SSH Key is added !</p>{{end}} | ||||||
|  |             <ul id="gogs-ssh-keys-list" class="list-group"> | ||||||
|  |                 <li class="list-group-item"><span class="name">SSH Key's name</span></li>{{range .Keys}} | ||||||
|  |                 <li class="list-group-item"> | ||||||
|  |                     <span class="name">{{.Name}}</span> | ||||||
|  |                     <span class="print">(print code)</span> | ||||||
|  |                     <a href="#" class="btn btn-link btn-danger right delete" rel="{{.Id}}" data-del="{{.Id}}">Delete</a> | ||||||
|  |                 </li>{{end}} | ||||||
|  |                 <li class="list-group-item"> | ||||||
|  |                     <a class="btn btn-link btn-primary" href="#ssh-add-modal" id="gogs-ssh-add" data-toggle="modal">Add SSH Key</a> | ||||||
|  |                 </li> | ||||||
|  |             </ul> | ||||||
|  |             <div class="modal fade" id="ssh-add-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> | ||||||
|  |                 <div class="modal-dialog"> | ||||||
|  |                     <form class="modal-content form-horizontal" id="gogs-ssh-form" method="post" action="/user/setting/ssh/"> | ||||||
|  |                         <div class="modal-header"> | ||||||
|  |                             <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||||||
|  |                             <h4 class="modal-title" id="myModalLabel">Add SSH Key</h4> | ||||||
|  |                         </div> | ||||||
|  |                         <div class="modal-body"> | ||||||
|  |                             <div class="form-group"> | ||||||
|  |                                 <label class="col-md-3 control-label">The name of key<strong class="text-danger">*</strong></label> | ||||||
|  |                                 <div class="col-md-8"> | ||||||
|  |                                     <input name="keyname" class="form-control" placeholder="Type your preferred name" required="required"> | ||||||
|  |                                 </div> | ||||||
|  |                             </div> | ||||||
|  |                             <div class="form-group"> | ||||||
|  |                                 <label class="col-md-3 control-label">SSH Key<strong class="text-danger">*</strong></label> | ||||||
|  |                                 <div class="col-md-8"> | ||||||
|  |                                     <textarea name="key_content" class="form-control" placeholder="Type your key content" required="required"></textarea> | ||||||
|  |                                 </div> | ||||||
|  |                             </div> | ||||||
|  |                         </div> | ||||||
|  |                         <div class="modal-footer"> | ||||||
|  |                             <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> | ||||||
|  |                             <button type="submit" class="btn btn-primary">Save changes</button> | ||||||
|  |                         </div> | ||||||
|  |                     </form> | ||||||
|  |                 </div> | ||||||
|  |             </div> | ||||||
|  |             <p><strong>Need help?</strong> Check out our guide to <a href="https://help.github.com/articles/generating-ssh-keys" target="_blank">generating SSH keys</a> or troubleshoot <a href="https://help.github.com/ssh-issues/" target="_blank">common SSH Problems</a></p> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | {{template "base/footer" .}} | ||||||
							
								
								
									
										19
									
								
								templates/user/setting.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								templates/user/setting.tmpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | {{template "base/head" .}} | ||||||
|  | {{template "base/navbar" .}} | ||||||
|  | <div id="gogs-body" class="container"> | ||||||
|  |     <div id="gogs-user-setting-nav" class="col-md-3"> | ||||||
|  |         <h4>Account Setting</h4> | ||||||
|  |         <ul class="list-group"> | ||||||
|  |             <li class="list-group-item list-group-item-success"><a href="/user/setting">Account Profile</a></li> | ||||||
|  |             <li class="list-group-item"><a href="#">Emails and Password</a></li> | ||||||
|  |             <li class="list-group-item"><a href="#">Notifications</a></li> | ||||||
|  |             <li class="list-group-item"><a href="/user/setting/ssh/">SSH Keys</a></li> | ||||||
|  |             <li class="list-group-item"><a href="#">Security</a></li> | ||||||
|  |             <li class="list-group-item"><a href="#">Kill myself</a></li> | ||||||
|  |         </ul> | ||||||
|  |     </div> | ||||||
|  |     <div id="gogs-user-setting-container" class="col-md-9"> | ||||||
|  |         setting container | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | {{template "base/footer" .}} | ||||||
							
								
								
									
										8
									
								
								web.go
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								web.go
									
									
									
									
									
								
							| @@ -64,10 +64,14 @@ func runWeb(*cli.Context) { | |||||||
| 	m.Any("/user/logout", auth.SignInRequire(true), user.SignOut) | 	m.Any("/user/logout", auth.SignInRequire(true), user.SignOut) | ||||||
| 	m.Any("/user/sign_up", auth.SignOutRequire(), binding.BindIgnErr(auth.RegisterForm{}), user.SignUp) | 	m.Any("/user/sign_up", auth.SignOutRequire(), binding.BindIgnErr(auth.RegisterForm{}), user.SignUp) | ||||||
| 	m.Any("/user/delete", auth.SignInRequire(true), user.Delete) | 	m.Any("/user/delete", auth.SignInRequire(true), user.Delete) | ||||||
|  |  | ||||||
|  | 	m.Any("/user/setting",auth.SignInRequire(true),user.Setting) | ||||||
|  | 	m.Any("/user/setting/ssh",auth.SignInRequire(true),user.SettingSSHKeys) | ||||||
|  |  | ||||||
| 	m.Get("/user/:username", auth.SignInRequire(false), user.Profile) | 	m.Get("/user/:username", auth.SignInRequire(false), user.Profile) | ||||||
|  |  | ||||||
| 	m.Any("/user/publickey/add", auth.SignInRequire(true), user.AddPublicKey) | 	//m.Any("/user/publickey/add", auth.SignInRequire(true), user.AddPublicKey) | ||||||
| 	m.Any("/user/publickey/list", auth.SignInRequire(true), user.ListPublicKey) | 	//m.Any("/user/publickey/list", auth.SignInRequire(true), user.ListPublicKey) | ||||||
|  |  | ||||||
| 	m.Any("/repo/create", auth.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) | 	m.Any("/repo/create", auth.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) | ||||||
| 	m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete) | 	m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user