mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-08 03:29:43 +02:00
finish delete ssh key and delete account. all with confirm.
This commit is contained in:
1 parent
0754dd2f95
commit
f6e32b1b08
7 files changed
+334
-52
No files matched your search
+10
-2
@@ -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)
|
var err error
|
||||||
user.Passwd = fmt.Sprintf("%x", newPasswd)
|
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
@@ -302,32 +302,23 @@ 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 .delete {
|
||||||
|
margin: -5px 50px 0;
|
||||||
|
}
|
||||||
|
|
||||||
#gogs-ssh-keys .list-group-item:after {
|
#gogs-ssh-keys .list-group-item:after {
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
#gogs-ssh-keys .list-group-item:hover a.delete {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
#gogs-ssh-keys .name {
|
#gogs-ssh-keys .name {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
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
@@ -99,15 +99,16 @@ function initRegister() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function initUserSetting(){
|
function initUserSetting(){
|
||||||
$('#gogs-ssh-keys').on("click",".delete",function(){
|
$('#gogs-ssh-keys .delete').confirmation({
|
||||||
var $this = $(this);
|
singleton: true,
|
||||||
Gogits.ajaxDelete("",{"id":$this.data("del")},function(json){
|
onConfirm: function(e, $this){
|
||||||
if(json.ok){
|
Gogits.ajaxDelete("",{"id":$this.data("del")},function(json){
|
||||||
window.location.reload();
|
if(json.ok){
|
||||||
}else{
|
window.location.reload();
|
||||||
alert(json.err);
|
}else{
|
||||||
}
|
alert(json.err);
|
||||||
});
|
}
|
||||||
return false;
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Vendored
+260
-1
@@ -3,4 +3,263 @@
|
|||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2014 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
*/
|
*/
|
||||||
if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClasLine truncated
|
if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClasLine truncated
|
||||||
|
|
||||||
|
/* ===========================================================
|
||||||
|
* forked from bootstrap-confirmation.js
|
||||||
|
* http://ethaizone.github.io/Bootstrap-Confirmation/
|
||||||
|
* ===========================================================
|
||||||
|
* Copyright 2013 Nimit Suwannagate <ethaizone@hotmail.com>
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* =========================================================== */
|
||||||
|
!function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
//var for check event at body can have only one.
|
||||||
|
var event_body = false;
|
||||||
|
|
||||||
|
// CONFIRMATION PUBLIC CLASS DEFINITION
|
||||||
|
// ===============================
|
||||||
|
var Confirmation = function (element, options) {
|
||||||
|
var that = this;
|
||||||
|
|
||||||
|
this.init('confirmation', element, options);
|
||||||
|
|
||||||
|
|
||||||
|
$(element).on('show.bs.confirmation', function(e) {
|
||||||
|
that.options.onShow(e, this);
|
||||||
|
|
||||||
|
$(this).addClass('open');
|
||||||
|
|
||||||
|
var options = that.options;
|
||||||
|
var all = options.all_selector;
|
||||||
|
|
||||||
|
if(options.singleton) {
|
||||||
|
$(all+'.in').not(that.$element).confirmation('hide');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(element).on('hide.bs.confirmation', function(e) {
|
||||||
|
that.options.onHide(e, this);
|
||||||
|
|
||||||
|
$(this).removeClass('open');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(element).on('shown.bs.confirmation', function(e) {
|
||||||
|
var options = that.options;
|
||||||
|
var all = options.all_selector;
|
||||||
|
|
||||||
|
that.$element.on('click.dismiss.bs.confirmation', '[data-dismiss="confirmation"]', $.proxy(that.hide, that));
|
||||||
|
|
||||||
|
if(that.isPopout()) {
|
||||||
|
if(!event_body) {
|
||||||
|
event_body = $('body').on('click', function (e) {
|
||||||
|
if(that.$element.is(e.target)) return;
|
||||||
|
if(that.$element.has(e.target).length) return;
|
||||||
|
if($('.popover').has(e.target).length) return;
|
||||||
|
|
||||||
|
that.$element.confirmation('hide');
|
||||||
|
|
||||||
|
$('body').unbind(e);
|
||||||
|
|
||||||
|
event_body = false;
|
||||||
|
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(element).on('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$.fn.popover || !$.fn.tooltip) throw new Error('Confirmation requires popover.js and tooltip.js');
|
||||||
|
|
||||||
|
Confirmation.DEFAULTS = $.extend({}, $.fn.popover.Constructor.DEFAULTS, {
|
||||||
|
placement : 'top',
|
||||||
|
title : 'Are you sure?',
|
||||||
|
btnOkClass : 'btn btn-danger btn-sm',
|
||||||
|
btnOkLabel : 'Yes',
|
||||||
|
btnOkIcon : '',
|
||||||
|
btnCancelClass : 'btn btn-default btn-sm',
|
||||||
|
btnCancelLabel : 'Cancel',
|
||||||
|
btnCancelIcon : '',
|
||||||
|
href : '#',
|
||||||
|
target : '_self',
|
||||||
|
singleton : true,
|
||||||
|
popout : true,
|
||||||
|
onShow : function(event, element){},
|
||||||
|
onHide : function(event, element){},
|
||||||
|
onConfirm : function(event, element){},
|
||||||
|
onCancel : function(event, element){},
|
||||||
|
template : '<div class="popover"><div class="arrow"></div>'
|
||||||
|
+ '<h3 class="popover-title"></h3>'
|
||||||
|
+ '<div class="popover-content">'
|
||||||
|
+ '<div class="btn-group"><a data-apply="confirmation">Yes</a>'
|
||||||
|
+ ' <a data-dismiss="confirmation">No</a></div>'
|
||||||
|
+ '</div>'
|
||||||
|
+ '</div>'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// NOTE: CONFIRMATION EXTENDS popover.js
|
||||||
|
// ================================
|
||||||
|
Confirmation.prototype = $.extend({}, $.fn.popover.Constructor.prototype);
|
||||||
|
|
||||||
|
Confirmation.prototype.constructor = Confirmation;
|
||||||
|
|
||||||
|
Confirmation.prototype.getDefaults = function () {
|
||||||
|
return Confirmation.DEFAULTS;
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.setContent = function () {
|
||||||
|
var that = this;
|
||||||
|
var $tip = this.tip();
|
||||||
|
var title = this.getTitle();
|
||||||
|
var $btnOk = $tip.find('[data-apply="confirmation"]');
|
||||||
|
var $btnCancel = $tip.find('[data-dismiss="confirmation"]');
|
||||||
|
var options = this.options
|
||||||
|
|
||||||
|
$btnOk.addClass(this.getBtnOkClass())
|
||||||
|
.html(this.getBtnOkLabel())
|
||||||
|
.prepend($('<i></i>').addClass(this.getBtnOkIcon()), " ")
|
||||||
|
.attr('href', this.getHref())
|
||||||
|
.attr('target', this.getTarget())
|
||||||
|
.off('click').on('click', function(event) {
|
||||||
|
options.onConfirm(event, that.$element);
|
||||||
|
|
||||||
|
that.$element.confirmation('hide');
|
||||||
|
});
|
||||||
|
|
||||||
|
$btnCancel.addClass(this.getBtnCancelClass())
|
||||||
|
.html(this.getBtnCancelLabel())
|
||||||
|
.prepend($('<i></i>').addClass(this.getBtnCancelIcon()), " ")
|
||||||
|
.off('click').on('click', function(event){
|
||||||
|
options.onCancel(event, that.$element);
|
||||||
|
|
||||||
|
that.$element.confirmation('hide');
|
||||||
|
});
|
||||||
|
|
||||||
|
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title);
|
||||||
|
|
||||||
|
$tip.removeClass('fade top bottom left right in');
|
||||||
|
|
||||||
|
// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
|
||||||
|
// this manually by checking the contents.
|
||||||
|
if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.getBtnOkClass = function () {
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
return $e.attr('data-btnOkClass') || (typeof o.btnOkClass == 'function' ? o.btnOkClass.call($e[0]) : o.btnOkClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.getBtnOkLabel = function () {
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
return $e.attr('data-btnOkLabel') || (typeof o.btnOkLabel == 'function' ? o.btnOkLabel.call($e[0]) : o.btnOkLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.getBtnOkIcon = function () {
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
return $e.attr('data-btnOkIcon') || (typeof o.btnOkIcon == 'function' ? o.btnOkIcon.call($e[0]) : o.btnOkIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.getBtnCancelClass = function () {
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
return $e.attr('data-btnCancelClass') || (typeof o.btnCancelClass == 'function' ? o.btnCancelClass.call($e[0]) : o.btnCancelClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.getBtnCancelLabel = function () {
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
return $e.attr('data-btnCancelLabel') || (typeof o.btnCancelLabel == 'function' ? o.btnCancelLabel.call($e[0]) : o.btnCancelLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.getBtnCancelIcon = function () {
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
return $e.attr('data-btnCancelIcon') || (typeof o.btnCancelIcon == 'function' ? o.btnCancelIcon.call($e[0]) : o.btnCancelIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.getHref = function () {
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
return $e.attr('data-href') || (typeof o.href == 'function' ? o.href.call($e[0]) : o.href);
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.getTarget = function () {
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
return $e.attr('data-target') || (typeof o.target == 'function' ? o.target.call($e[0]) : o.target);
|
||||||
|
}
|
||||||
|
|
||||||
|
Confirmation.prototype.isPopout = function () {
|
||||||
|
var popout;
|
||||||
|
var $e = this.$element;
|
||||||
|
var o = this.options;
|
||||||
|
|
||||||
|
popout = $e.attr('data-popout') || (typeof o.popout == 'function' ? o.popout.call($e[0]) : o.popout);
|
||||||
|
|
||||||
|
if(popout == 'false') popout = false;
|
||||||
|
|
||||||
|
return popout
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// CONFIRMATION PLUGIN DEFINITION
|
||||||
|
// =========================
|
||||||
|
var old = $.fn.confirmation;
|
||||||
|
|
||||||
|
$.fn.confirmation = function (option) {
|
||||||
|
var that = this;
|
||||||
|
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this);
|
||||||
|
var data = $this.data('bs.confirmation');
|
||||||
|
var options = typeof option == 'object' && option;
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
options.all_selector = that.selector;
|
||||||
|
|
||||||
|
if (!data && option == 'destroy') return;
|
||||||
|
if (!data) $this.data('bs.confirmation', (data = new Confirmation(this, options)));
|
||||||
|
if (typeof option == 'string') data[option]();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.confirmation.Constructor = Confirmation
|
||||||
|
|
||||||
|
|
||||||
|
// CONFIRMATION NO CONFLICT
|
||||||
|
// ===================
|
||||||
|
$.fn.confirmation.noConflict = function () {
|
||||||
|
$.fn.confirmation = old;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}(jQuery);
|
||||||
+17
-7
@@ -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() {
|
ctx.Data["ErrorMsg"] = "Your password error. Make sure you are owner of this account."
|
||||||
case models.ErrUserOwnRepos.Error():
|
} else {
|
||||||
ctx.Data["ErrorMsg"] = "Your account still have ownership of repository, you have to delete or transfer them first."
|
if err := models.DeleteUser(ctx.User); err != nil {
|
||||||
default:
|
ctx.Data["HasError"] = true
|
||||||
ctx.Handle(200, "user.Delete", err)
|
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
@@ -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>
|
||||||
<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>
|
||||||
<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="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 class="col-md-3">
|
</div>
|
||||||
<button type="submit" class="btn btn-danger btn-lg">Delete Account</button>
|
</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>
|
||||||
</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>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
$(function(){
|
|
||||||
$('#gogs-user-delete').on('submit',function(){
|
|
||||||
return confirm("Are you sure ?");
|
|
||||||
})
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{{template "base/footer" .}}
|
{{template "base/footer" .}}
|
||||||
@@ -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>
|
<button href="#" class="btn btn-danger delete pull-right" rel="{{.Id}}" data-del="{{.Id}}">Delete</button>
|
||||||
</li>{{end}}
|
</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>
|
||||||
|
|||||||
Reference in new issue
Block a user