Browse Source

finish delete ssh key and delete account. all with confirm.

slene 11 years ago
parent
commit
f6e32b1b08

+ 10 - 2
models/user.go

@@ -175,8 +175,8 @@ func DeleteUser(user *User) error {
 
 
 // EncodePasswd encodes password to safe format.
 // EncodePasswd encodes password to safe format.
 func (user *User) EncodePasswd() error {
 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
 	return err
 }
 }
 
 
@@ -184,6 +184,14 @@ func UserPath(userName string) string {
 	return filepath.Join(RepoRootPath, userName)
 	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) {
 func GetUserByKeyId(keyId int64) (*User, error) {
 	user := new(User)
 	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)
 	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)

+ 5 - 14
public/css/gogs.css

@@ -302,16 +302,16 @@ html, body {
 /* gogits user ssh keys */
 /* gogits user ssh keys */
 
 
 #gogs-ssh-keys .list-group-item {
 #gogs-ssh-keys .list-group-item {
-    line-height: 48px;
+    padding: 15px 0;
     border-bottom: 1px solid #DDD;
     border-bottom: 1px solid #DDD;
 }
 }
 
 
-#gogs-ssh-keys .list-group-item:after {
-    clear: both;
+#gogs-ssh-keys .list-group-item .delete {
+    margin: -5px 50px 0;
 }
 }
 
 
-#gogs-ssh-keys .list-group-item:hover a.delete {
-    display: block;
+#gogs-ssh-keys .list-group-item:after {
+    clear: both;
 }
 }
 
 
 #gogs-ssh-keys .name {
 #gogs-ssh-keys .name {
@@ -319,15 +319,6 @@ html, body {
     font-weight: bold;
     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 {
 #gogs-ssh-keys .print {
     padding-left: 1em;
     padding-left: 1em;
     color: #888;
     color: #888;

+ 11 - 10
public/js/app.js

@@ -99,15 +99,16 @@ function initRegister() {
 }
 }
 
 
 function initUserSetting(){
 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);
+                }
+            });
+        }
     });
     });
 }
 }

File diff suppressed because it is too large
+ 0 - 0
public/js/bootstrap.min.js


+ 17 - 7
routers/user/user.go

@@ -157,18 +157,28 @@ func Delete(ctx *middleware.Context) {
 		return
 		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
 		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
 			return
 		}
 		}
 	}
 	}
 
 
-	ctx.Render.Redirect("/", 302)
+	ctx.Render.HTML(200, "user/delete", ctx.Data)
 }
 }
 
 
 const (
 const (

+ 26 - 15
templates/user/delete.tmpl

@@ -13,22 +13,33 @@
         </ul>
         </ul>
     </div>
     </div>
     <div id="gogs-user-setting-container" class="col-md-9">
     <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">&times;</button>
+                    <h4 class="modal-title" id="myModalLabel">Delete Account</h4>
+                </div>
+
+                <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>
                 </div>
-            </div>
-        </form>
+            </form>
+        </div>
     </div>
     </div>
 </div>
 </div>
-<script>
-    $(function(){
-       $('#gogs-user-delete').on('submit',function(){
-           return confirm("Are you sure ?");
-       })
-    });
-</script>
 {{template "base/footer" .}}
 {{template "base/footer" .}}

+ 5 - 3
templates/user/publickey.tmpl

@@ -18,12 +18,14 @@
             <h4>SSH Keys</h4>{{if .AddSSHKeySuccess}}
             <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}}
             <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">
             <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">
                 <li class="list-group-item">
                     <span class="name">{{.Name}}</span>
                     <span class="name">{{.Name}}</span>
                     <span class="print">({{.Fingerprint}})</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">
                 <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>
                     <a class="btn btn-link btn-primary" href="#ssh-add-modal" id="gogs-ssh-add" data-toggle="modal">Add SSH Key</a>
                 </li>
                 </li>

Some files were not shown because too many files changed in this diff