晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/rainic/public_html/oldTZh/wp-content/plugins/digits/includes/account/ |
Upload File : |
<?php
namespace DigitsSettingsHandler;
use DigitsUserFormHandler\UserSettingsHandler;
if (!defined('ABSPATH')) {
exit;
}
require_once dirname(__FILE__) . '/secure_modals.php';
require_once dirname(__FILE__) . '/secure_account_setup.php';
require_once dirname(__FILE__) . '/UserAccount.php';
require_once dirname(__FILE__) . '/setup_account_security.php';
require_once dirname(__FILE__) . '/wauth/init.php';
require_once dirname(__FILE__) . '/secure_account_handler.php';
require_once dirname(__FILE__) . '/secure_account_disable.php';
require_once dirname(__FILE__) . '/shortcode_secure_account.php';
Secure::instance();
final class Secure
{
protected static $_instance = null;
/** @var SecureModals */
public $secureModals = null;
public function __construct()
{
$this->add_shortcodes();
$this->secureModals = SecureModals::instance();
}
/**
* Constructor.
*/
public static function instance()
{
if (is_null(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function add_shortcodes()
{
add_shortcode('df-totp-setup', [$this, 'shortcode_setup_totp']);
add_shortcode('df-biometrics-setup', [$this, 'shortcode_setup_biometrics']);
add_shortcode('df-2fa-setup', [$this, 'shortcode_setup_2fa']);
add_shortcode('df-3fa-setup', [$this, 'shortcode_setup_3fa']);
/*remote*/
add_action('wp_head', [$this, 'remote_device_setup']);
}
public function shortcode_setup_totp($attrs)
{
if (!is_user_logged_in()) {
return '';
}
ob_start();
$this->render_setup_totp();
return ob_get_clean();
}
public function shortcode_setup_2fa($attrs)
{
if (!is_user_logged_in()) {
return '';
}
ob_start();
$this->render_setup_fa_step(2);
return ob_get_clean();
}
public function shortcode_setup_3fa($attrs)
{
if (!is_user_logged_in()) {
return '';
}
ob_start();
$this->render_setup_fa_step(3);
return ob_get_clean();
}
public function shortcode_setup_biometrics($attrs)
{
if (!is_user_logged_in()) {
return '';
}
ob_start();
$show_icons = !empty($attrs['icons']);
$this->render_setup_biometrics($show_icons);
return ob_get_clean();
}
public function render_setup_totp()
{
$user_id = get_current_user_id();
$totp = UserAccountInfo::instance()->get_user_totp($user_id, false);
$button_text = __('Setup', 'digits');
$button_class = 'setup_button';
$action = 'dig_setup_auth_app';
$nonce = 'digits_auth_app_setup_shortcode';
if (!empty($totp)) {
$action = 'dig_remove_auth_app';
$button_text = __('Remove', 'digits');
$nonce = 'digits_remove_auth_app_setup_shortcode';
$button_class = 'remove_button';
}
?>
<div class="digits_secure_account">
<form>
<div class="digits_secure_account_heading">
<?php esc_attr_e('2FA App (Google Auth, Authy, etc)', 'digits'); ?>
</div>
<div class="digits_secure_account_footer">
<?php $this->nonce_field($nonce); ?>
<button class="button button-primary digits_secure_account_modal <?php echo esc_attr($button_class); ?>"
data-action="<?php echo esc_attr($action); ?>"
type="button">
<?php echo esc_attr($button_text); ?>
</button>
</div>
<?php
$this->secureModals->load_modal();
?>
</form>
</div>
<?php
$this->enqueue_scripts();
}
public function render_setup_biometrics($show_icons = false)
{
$user_id = get_current_user_id();
$allow_multiple_devices = get_option('digits_allow_multiple_device', 1);
$can_add_keys = dig_securityKeysEnabled();
?>
<div class="digits_secure_account">
<div class="digits_secure_account_heading">
<?php esc_attr_e('Biometrics & Security Key Devices', 'digits'); ?>
</div>
<div class="digits_secure_account_body">
<?php
$devices = \DigitsDeviceAuth::instance()->listUserSecurityDevices($user_id);
foreach ($devices as $device) {
$device_type = $device['device_type'];
$device_name = $device['device_name'];
?>
<div class="digits_secure_account_item">
<?php
if ($show_icons) {
$icon_type = 'digits_secure_account_item_ic_key';
if ($device_type == 'platform') {
if (!empty($device['is_mobile'])) {
$icon_type = 'digits_secure_account_item_ic_mob';
} else {
$icon_type = 'digits_secure_account_item_ic_comp';
}
}
?>
<div class="digits_secure_account_item_ic <?php echo $icon_type; ?>"></div>
<?php
}
?>
<div class="digits_secure_account_item-name">
<?php echo $device_name; ?>
</div>
<div class="digits_secure_account_item-delete">
<div class="digits_secure_account_item-delete-icon digits_secure_account_delete"></div>
<input type="hidden" name="device_id"
value="<?php echo esc_attr($device['uniqid']); ?>"/>
<input type="hidden" name="device_type"
value="<?php echo esc_attr($device_type); ?>"/>
<input type="hidden" name="device_name"
value="<?php echo esc_attr($device_name); ?>"/>
<?php wp_nonce_field($device['uniqid'] . $device_type . '_delete'); ?>
<input type="hidden" name="action" value="digits_delete_security_device"/>
</div>
</div>
<?php
}
?>
</div>
<div class="digits_secure_account_footer">
<form>
<?php $this->nonce_field('dig_setup_bio_key_devices_shortcode'); ?>
<?php
if ($allow_multiple_devices == 1 && $can_add_keys) {
?>
<button class="button button-primary digits_secure_account_modal setup_button"
data-action="dig_setup_bio_key_devices" type="button">
<?php esc_attr_e('Add Device', 'digits'); ?>
</button>
<?php
}
?>
</form>
</div>
<?php
$this->secureModals->load_modal();
?>
</div>
<?php
$this->enqueue_scripts();
}
public function render_setup_fa_step($step_no)
{
$user_id = get_current_user_id();
$available_methods = UserSettingsHandler::instance()->get_all_available_methods($user_id, $step_no);
if (empty($available_methods)) {
return '';
}
$heading = __('Enable %s-Factor Authentication', 'digits');
$heading = sprintf($heading, $step_no);
$input_class = [];
$action_type = 'setup';
$user_methods = UserSettingsHandler::getUserFaPreferredMethods($user_id, $step_no);
if (!empty($user_methods)) {
$action_type = 'disable';
$input_class[] = 'digits-form_checked';
}
$action = "digits_{$action_type}_2fa_modal";
if ($step_no == 3) {
$action = "digits_{$action_type}_3fa_modal";
}
$input_class[] = 'digits-input_checkbox';
?>
<form>
<div class="digits_secure_account">
<div class="digits_secure_account_modal" data-action="<?php echo $action; ?>">
<div class="<?php echo esc_attr(implode(" ", $input_class)); ?>">
<label>
<span class="digits-inp-checkbox_icon digits-inp_bg_defaultColor">
</span>
<span class="digits_secure_account_heading">
<?php echo esc_attr($heading); ?>
</span>
</label>
</div>
</div>
<?php
if (!empty($user_methods)) {
?>
<div class="digits_fa_steps_wrapper">
<?php
$all_methods = digits_all_auth_steps();
foreach ($user_methods as $method) {
?>
<div class="digits_fa_step_name">
<?php echo esc_attr($all_methods[$method]); ?>
</div>
<?php
}
?>
</div>
<?php
}
$this->nonce_field($action);
?>
</div>
</form>
<?php
$this->secureModals->load_modal();
$this->enqueue_scripts();
}
public function nonce_field($action = 'digits_secure')
{
wp_nonce_field($action);
}
public function remote_device_setup()
{
if (!empty($_REQUEST['callback']) && !empty($_REQUEST['action_type'])) {
if ($_REQUEST['callback'] == 'setup_device' && $_REQUEST['action_type'] == 'device_auth') {
$this->enqueue_scripts();
}
}
}
public function enqueue_scripts()
{
wp_register_script('digits-secure-script', get_digits_asset_uri('/assets/js/secure.min.js'), array(
'jquery',
), digits_version(), true);
$settings_array = array(
'ajax_url' => admin_url('admin-ajax.php'),
"direction" => is_rtl() ? 'rtl' : 'ltr',
"copiedtoclipboard" => __("Copied to clipboard", "digits"),
'dig_dsb' => get_option('dig_dsb', -1),
);
wp_localize_script('digits-secure-script', 'dig_secure', $settings_array);
wp_enqueue_script('digits-secure-script');
}
}