@@ -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,16 +302,16 @@ 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: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 { | |||
@@ -319,15 +319,6 @@ html, body { | |||
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); | |||
} | |||
}); | |||
} | |||
}); | |||
} |
@@ -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 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> | |||
</form> | |||
</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> | |||