Current File : //var/webuzo-data/roundcube/plugins/webuzo/soft2fa/js/soft2fa.js
window.rcmail && rcmail.addEventListener('init', function(evt) {
	// Handle ajax responses
	rcmail.addEventListener('plugin.soft2fa_response', function(data) {
		var do_reload = true;
		if(data.prevent_refresh != undefined && data.prevent_refresh == 1){
			do_reload = false;
		}

		if(data.regen_qr_response != undefined && data.qr_code != undefined && data.auth_code != undefined){
			jQuery('#secret_code').html(atob(data.auth_code));
			jQuery('#app_qr').attr('data-qrcode', data.qr_code).html('').qrcode({"text" : data.qr_code});
			jQuery('#qr_auth_code').attr('data-code', data.auth_code);
			jQuery('.otp-input').val('');
		}

		if (data.message) {
			rcmail.alert_dialog(data.message, function() {
				if(do_reload == false){
					return;
				}

				rcmail.reload();
			});
		} 

		if(data.error){
			rcmail.alert_dialog(data.error);
		}
	});

	jQuery('#whitelist-form').on('submit', function(e){
		e.preventDefault();

		var start_ip = jQuery('#w_start_ip').val();
		var end_ip = jQuery('#w_end_ip').val();
		
		var lock = rcmail.set_busy(true, 'loading');
		rcmail.http_post('plugin.soft2fa_post_data', {
			type : 'whitelist', 
			action: 'add', 
			start_ip: start_ip, 
			end_ip: end_ip 
		}, lock);
	});

	if (typeof $.fn.modal !== 'function') {
		$(document).on('click', '[data-dismiss="modal"]', function(e) {
			$(this).closest('.modal').hide();
		});
	}

});

// Handle authenticator stuff
function app_authenticator(status = 0){

	if(status === 1){
		var otp = ''
		jQuery('.otp-input').each(function(){
			var val = $(this).val()
			if( val== '' || isNaN(val)){
				$(this).focus();
				return false;
			}
			otp += val.toString();
		});
	
		if(otp.length == 0){
			return;
		}
	
		var lock = rcmail.set_busy(true, 'loading');
		rcmail.http_post('plugin.soft2fa_post_data', { type : 'auth', action: 'enable', otp: otp }, lock);

		return;
	}

	if(status === 2){
		rcmail.confirm_dialog(rcmail.get_label('auth_confirm_dialog', 'webuzo'), 'delete', function() {
			var lock = rcmail.set_busy(true, 'loading');
			rcmail.http_post('plugin.soft2fa_post_data', { 
				type : 'auth', 
				action: 'disable' 
			}, lock);
		});

		return;
	}

	if(status == 3){
		
		
		rcmail.confirm_dialog(rcmail.get_label('auth_reset_dialog', 'webuzo'), 'continue', function() {
			var lock = rcmail.set_busy(true, 'loading');
			rcmail.http_post('plugin.soft2fa_post_data', { 
				type : 'auth', 
				action : 'regen_qr' 
			}, lock);
		});
		
		return;
	}
	
	var qrtext = jQuery("#app_qr").attr("data-qrcode");
	jQuery("#app_qr").html('').qrcode({"text" : qrtext});
	
	try {
		jQuery('#authenticator_model').modal('show');
	} catch (error) {
		jQuery('#authenticator_model').show();

		$(document).on('click', '[data-dismiss="modal"]', function() {
			$(this).closest('.modal').hide();
		});
	}
	
	var fields = $('.otp-input');
	
	fields.val('');

	fields.on('keyup', function() {
		var $this = $(this);
		var value = $this.val();
			
		// Only digits allowed
		if (!/^\d$/.test(value)) {
			$(this).val('');
			return;
		}

		// Always put the digit in the first empty input starting from the top
		for (let i = 0; i < fields.length; i++) {
			var indx = $('.otp-input').index($this);
			if (fields.eq(i).val() == '' || i == indx ) {
				fields.eq(i).val(value);

				if(i !== indx){
					$this.val('');
				}

				// Move to the next field
				if (i + 1 < fields.length) {
					if(fields.eq(i + 1).val() != ''){
						break;
					}
					fields.eq(i + 1).focus().select();
				}

				break;
			}
		}
	});

	// Autofocus first on load
	fields.first().focus().select();
}

function app_backup_code(status = ''){
	if(status === 1 || status === 2 || status === 3){
		var title = rcmail.get_label('backup_code_enable', 'webuzo'); 
		var action = 'enable';

		if(status === 2){
			title = rcmail.get_label('backup_code_disable', 'webuzo');
			action = 'disable';
		}
		
		if(status === 3){
			title = rcmail.get_label('backup_code_regen', 'webuzo');
			action = 'regen_backup_codes';
		}

		rcmail.confirm_dialog(title, 'continue', function() {
			var lock = rcmail.set_busy(true, 'loading');
			rcmail.http_post('plugin.soft2fa_post_data', { 
				type : 'backup_codes', 
				action: action}, lock);
			}
		);

		return;
	}
	
	try {
		$("#backup_codes_model").modal('show');
	} catch (error) {
		jQuery('#backup_codes_model').show();
	}
}

function copy_code(elem){
	elem = jQuery(elem);

	var textToCopy = atob(elem.attr('data-code'));
	if (navigator.clipboard) {	
		// Navigator clipboard api method'ish
		navigator.clipboard.writeText(textToCopy).then(function() {
			rcmail.display_message(rcmail.gettext('clipboard_success','webuzo'));
		}, function(err) {
			rcmail.display_message(rcmail.gettext('clipboard_error','webuzo'));
		});
	}
}

function handle_ip(id = ''){
	var title = rcmail.get_label('ip_delete_confirm_dialog', 'webuzo'); 
	rcmail.confirm_dialog(title, 'continue', function() {
		var lock = rcmail.set_busy(true, 'loading');
		rcmail.http_post('plugin.soft2fa_post_data', { type : 'whitelist', action: 'delete', id: id}, lock);
	});
}