finish delete ssh key and delete account. all with confirm.
This commit is contained in:
		
							parent
							
								
									0754dd2f95
								
							
						
					
					
						commit
						f6e32b1b08
					
				
					 7 changed files with 334 additions and 52 deletions
				
			
		|  | @ -175,8 +175,8 @@ func DeleteUser(user *User) error { | |||
| 
 | ||||
| // EncodePasswd encodes password to safe format.
 | ||||
| func (user *User) EncodePasswd() error { | ||||
| 	newPasswd, err := scrypt.Key([]byte(user.Passwd), []byte(UserPasswdSalt), 16384, 8, 1, 64) | ||||
| 	user.Passwd = fmt.Sprintf("%x", newPasswd) | ||||
| 	var err error | ||||
| 	user.Passwd, err = EncodePasswd(user.Passwd) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
|  | @ -184,6 +184,14 @@ func UserPath(userName string) string { | |||
| 	return filepath.Join(RepoRootPath, userName) | ||||
| } | ||||
| 
 | ||||
| func EncodePasswd(rawPasswd string) (string, error) { | ||||
| 	newPasswd, err := scrypt.Key([]byte(rawPasswd), []byte(UserPasswdSalt), 16384, 8, 1, 64) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	return fmt.Sprintf("%x", newPasswd), nil | ||||
| } | ||||
| 
 | ||||
| func GetUserByKeyId(keyId int64) (*User, error) { | ||||
| 	user := new(User) | ||||
| 	has, err := orm.Sql("select a.* from user as a, public_key as b where a.id = b.owner_id and b.id=?", keyId).Get(user) | ||||
|  |  | |||
|  | @ -302,32 +302,23 @@ html, body { | |||
| /* gogits user ssh keys */ | ||||
| 
 | ||||
| #gogs-ssh-keys .list-group-item { | ||||
|     line-height: 48px; | ||||
|     padding: 15px 0; | ||||
|     border-bottom: 1px solid #DDD; | ||||
| } | ||||
| 
 | ||||
| #gogs-ssh-keys .list-group-item .delete { | ||||
|     margin: -5px 50px 0; | ||||
| } | ||||
| 
 | ||||
| #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; | ||||
|  |  | |||
|  | @ -99,15 +99,16 @@ function initRegister() { | |||
| } | ||||
| 
 | ||||
| function initUserSetting(){ | ||||
|     $('#gogs-ssh-keys').on("click",".delete",function(){ | ||||
|         var $this = $(this); | ||||
|         Gogits.ajaxDelete("",{"id":$this.data("del")},function(json){ | ||||
|             if(json.ok){ | ||||
|                 window.location.reload(); | ||||
|             }else{ | ||||
|                 alert(json.err); | ||||
|             } | ||||
|         }); | ||||
|         return false; | ||||
|     $('#gogs-ssh-keys .delete').confirmation({ | ||||
|         singleton: true, | ||||
|         onConfirm: function(e, $this){ | ||||
|             Gogits.ajaxDelete("",{"id":$this.data("del")},function(json){ | ||||
|                 if(json.ok){ | ||||
|                     window.location.reload(); | ||||
|                 }else{ | ||||
|                     alert(json.err); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     }); | ||||
| } | ||||
							
								
								
									
										259
									
								
								public/js/bootstrap.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										259
									
								
								public/js/bootstrap.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -157,18 +157,28 @@ func Delete(ctx *middleware.Context) { | |||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if err := models.DeleteUser(ctx.User); err != nil { | ||||
| 	rawPasswd := ctx.Query("password") | ||||
| 	encodedPwd, _ := models.EncodePasswd(rawPasswd) | ||||
| 	if len(encodedPwd) == 0 || encodedPwd != ctx.User.Passwd { | ||||
| 		ctx.Data["HasError"] = true | ||||
| 		switch err.Error() { | ||||
| 		case models.ErrUserOwnRepos.Error(): | ||||
| 			ctx.Data["ErrorMsg"] = "Your account still have ownership of repository, you have to delete or transfer them first." | ||||
| 		default: | ||||
| 			ctx.Handle(200, "user.Delete", err) | ||||
| 		ctx.Data["ErrorMsg"] = "Your password error. Make sure you are owner of this account." | ||||
| 	} else { | ||||
| 		if err := models.DeleteUser(ctx.User); err != nil { | ||||
| 			ctx.Data["HasError"] = true | ||||
| 			switch err { | ||||
| 			case models.ErrUserOwnRepos: | ||||
| 				ctx.Data["ErrorMsg"] = "Your account still have ownership of repository, you have to delete or transfer them first." | ||||
| 			default: | ||||
| 				ctx.Handle(200, "user.Delete", err) | ||||
| 				return | ||||
| 			} | ||||
| 		} else { | ||||
| 			ctx.Render.Redirect("/") | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	ctx.Render.Redirect("/", 302) | ||||
| 	ctx.Render.HTML(200, "user/delete", ctx.Data) | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
|  |  | |||
|  | @ -13,22 +13,33 @@ | |||
|         </ul> | ||||
|     </div> | ||||
|     <div id="gogs-user-setting-container" class="col-md-9"> | ||||
|         <form action="/user/delete" method="post" class="form-horizontal" id="gogs-user-delete"> | ||||
|             <h4>Delete Account</h4> | ||||
|             <p class="alert alert-danger">{{if not .HasError}}The operation will delete your account permanently. Sorry to see you go, but we know you'll back soon.{{else}}{{.ErrorMsg}}{{end}}</p> | ||||
|             <div class="form-group"> | ||||
|                 <div class="col-md-3"> | ||||
|                     <button type="submit" class="btn btn-danger btn-lg">Delete Account</button> | ||||
|         <h4>Delete Account</h4> | ||||
|         <p class="alert alert-danger">{{if not .HasError}}The operation will delete your account permanently. Sorry to see you go, but we know you'll back soon.{{else}}{{.ErrorMsg}}{{end}}</p> | ||||
|         <div class="form-group"> | ||||
|             <button type="submit" class="btn btn-danger btn-lg" href="#delete-account-modal" id="gogs-delete-account" data-toggle="modal">Delete Account</button> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="modal fade" id="delete-account-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> | ||||
|         <div class="modal-dialog"> | ||||
|             <form action="/user/delete" method="post" class="modal-content" id="gogs-user-delete"> | ||||
|                 <div class="modal-header"> | ||||
|                     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||||
|                     <h4 class="modal-title" id="myModalLabel">Delete Account</h4> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </form> | ||||
| 
 | ||||
|                 <div class="modal-body"> | ||||
|                     <div class="form-group"> | ||||
|                         <label>Make sure your are owner of this account. Please enter your password.<strong class="text-danger">*</strong></label> | ||||
|                         <input name="password" class="form-control" type="password" placeholder="Type your account password" required="required"> | ||||
|                     </div> | ||||
|                 </div> | ||||
| 
 | ||||
|                 <div class="modal-footer"> | ||||
|                     <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> | ||||
|                     <button type="submit" class="btn btn-danger">Delete</button> | ||||
|                 </div> | ||||
|             </form> | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
| <script> | ||||
|     $(function(){ | ||||
|        $('#gogs-user-delete').on('submit',function(){ | ||||
|            return confirm("Are you sure ?"); | ||||
|        }) | ||||
|     }); | ||||
| </script> | ||||
| {{template "base/footer" .}} | ||||
|  | @ -18,12 +18,14 @@ | |||
|             <h4>SSH Keys</h4>{{if .AddSSHKeySuccess}} | ||||
|             <p class="alert alert-success">New SSH Key has been added !</p>{{else if .HasError}}<p class="alert alert-danger">{{.ErrorMsg}}</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">SSH Key's name</span></li> | ||||
|                 {{range .Keys}} | ||||
|                 <li class="list-group-item"> | ||||
|                     <span class="name">{{.Name}}</span> | ||||
|                     <span class="print">({{.Fingerprint}})</span> | ||||
|                     <a href="#" class="btn btn-link btn-danger right delete" rel="{{.Id}}" data-del="{{.Id}}">Delete</a> | ||||
|                 </li>{{end}} | ||||
|                     <button href="#" class="btn btn-danger delete pull-right" rel="{{.Id}}" data-del="{{.Id}}">Delete</button> | ||||
|                 </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> | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue