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);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
261
public/js/bootstrap.min.js
vendored
261
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>
|
||||
|
|
Reference in a new issue