|
@@ -81,7 +81,7 @@
|
|
|
class="btn btn-primary ms-auto">修改</button>
|
|
|
{else}
|
|
|
<button id="modify-email" class="btn btn-primary ms-auto"
|
|
|
- disabled>暂不允许修改</button>
|
|
|
+ disabled>不允许修改</button>
|
|
|
{/if}
|
|
|
</div>
|
|
|
</div>
|
|
@@ -90,25 +90,16 @@
|
|
|
<div class="col-sm-12 col-md-6">
|
|
|
<div class="card">
|
|
|
<div class="card-body">
|
|
|
- <h3 class="card-title">IM 账号</h3>
|
|
|
- <div class="mb-3">
|
|
|
- <select id="imtype" class="form-select">
|
|
|
- <option value="1" {if $user->im_type === 1}selected{/if}>
|
|
|
- Slack</option>
|
|
|
- <option value="2" {if $user->im_type === 2}selected{/if}>
|
|
|
- Discord</option>
|
|
|
- <option value="4" {if $user->im_type === 4}selected{/if}>
|
|
|
- Telegram</option>
|
|
|
- </select>
|
|
|
- </div>
|
|
|
+ <h3 class="card-title">用戶名</h3>
|
|
|
+ <p>当前用戶名:<code>{$user->user_name}</code></p>
|
|
|
<div class="mb-3">
|
|
|
- <input id="imvalue" type="text" class="form-control"
|
|
|
- disabled="" value="{$user->im_value}" placeholder="社交账户">
|
|
|
+ <input id="new-nickname" type="text" class="form-control"
|
|
|
+ placeholder="新用戶名" autocomplete="off">
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="card-footer">
|
|
|
<div class="d-flex">
|
|
|
- <a id="modify-im" class="btn btn-primary ms-auto">修改</a>
|
|
|
+ <a id="modify-username" class="btn btn-primary ms-auto">修改</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -116,76 +107,55 @@
|
|
|
<div class="col-sm-12 col-md-6">
|
|
|
<div class="card">
|
|
|
<div class="card-body">
|
|
|
- <h3 class="card-title">用戶名</h3>
|
|
|
- <p>当前用戶名:<code>{$user->user_name}</code></p>
|
|
|
+ <h3 class="card-title">IM 账号绑定</h3>
|
|
|
<div class="mb-3">
|
|
|
- <input id="new-nickname" type="text" class="form-control"
|
|
|
- placeholder="新用戶名" autocomplete="off">
|
|
|
+ <select id="imtype" class="form-select"
|
|
|
+ {if $user->im_type !== 0 && $user->im_value !== ''}disabled=""{/if}>
|
|
|
+ <option value="0" {if $user->im_type === 0}selected{/if}>
|
|
|
+ 未绑定</option>
|
|
|
+ <option value="1" {if $user->im_type === 1}selected{/if}>
|
|
|
+ Slack</option>
|
|
|
+ <option value="2" {if $user->im_type === 2}selected{/if}>
|
|
|
+ Discord</option>
|
|
|
+ <option value="4" {if $user->im_type === 4}selected{/if}>
|
|
|
+ Telegram</option>
|
|
|
+ </select>
|
|
|
+ </div>
|
|
|
+ <div class="mb-3">
|
|
|
+ <input id="imvalue" type="text" class="form-control"
|
|
|
+ disabled="" value="{$user->im_value}">
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="card-footer">
|
|
|
- <div class="d-flex">
|
|
|
- <a id="modify-username" class="btn btn-primary ms-auto">修改</a>
|
|
|
- </div>
|
|
|
+ <div class="d-flex btn-list justify-content-end" id="oauth-provider"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- {if $public_setting['enable_telegram']}
|
|
|
<div class="col-sm-12 col-md-6">
|
|
|
- {if $user->telegram_id !== 0}
|
|
|
<div class="card">
|
|
|
<div class="card-body">
|
|
|
- <h3 class="card-title">解绑 Telegram</h3>
|
|
|
- <p>当前绑定的 Telegram 账户:
|
|
|
- {if $user->im_value === "用戶名未设置"}
|
|
|
- <code>{$user->telegram_id}</code>
|
|
|
- {else}
|
|
|
- <a href="https://t.me/{$user->im_value}">@{$user->im_value}</a>
|
|
|
- {/if}
|
|
|
+ <h3 class="card-title">解绑 IM 账户</h3>
|
|
|
+ {if $user->im_type === 0}
|
|
|
+ <p>你的账户当前没有绑定任何 IM 服务</p>
|
|
|
+ {else}
|
|
|
+ <p>
|
|
|
+ 当前绑定的 IM 服务:{$user->imType()}
|
|
|
+ <br>
|
|
|
+ 账户 ID:<code>{$user->im_value}</code>
|
|
|
</p>
|
|
|
+ {/if}
|
|
|
</div>
|
|
|
+ {if $user->im_type !== 0}
|
|
|
<div class="card-footer">
|
|
|
<div class="d-flex">
|
|
|
- <button id="unbind-telegram-btn"
|
|
|
- class="btn btn-red ms-auto">
|
|
|
+ <button id="unbind-im" class="btn btn-red ms-auto">
|
|
|
解绑
|
|
|
- </button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- {else}
|
|
|
- <div class="card">
|
|
|
- <div class="card-body">
|
|
|
- <h3 class="card-title">绑定 Telegram</h3>
|
|
|
- <div class="row">
|
|
|
- <div class="col-6 col-sm-2 col-md-2 col-xl mb-3">
|
|
|
- 手机电脑平板等如已安装 Telegram 可点击
|
|
|
- </div>
|
|
|
- <div class="col-6 col-sm-2 col-md-2 col-sm mb-3">
|
|
|
- <a href="https://t.me/{$public_setting['telegram_bot']}?start={$bind_token}"
|
|
|
- class="btn btn-primary w-100">
|
|
|
- 一键绑定
|
|
|
- </a>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="row">
|
|
|
- <div class="col-6 col-sm-2 col-md-2 col-xl mb-3">
|
|
|
- 向机器人 <a
|
|
|
- href="https://t.me/{$public_setting['telegram_bot']}">@{$public_setting['telegram_bot']}</a>
|
|
|
- 发送验证码绑定
|
|
|
- </div>
|
|
|
- <div class="col-6 col-sm-2 col-md-2 col-sm mb-3">
|
|
|
- <button data-clipboard-text="{$bind_token}"
|
|
|
- class="copy btn btn-primary w-100">
|
|
|
- 复制验证码
|
|
|
- </button>
|
|
|
- </div>
|
|
|
+ </button>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ {/if}
|
|
|
</div>
|
|
|
- {/if}
|
|
|
</div>
|
|
|
- {/if}
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="tab-pane" id="login_security" role="tabpanel">
|
|
@@ -196,19 +166,18 @@
|
|
|
<h3 class="card-title">多因素认证</h3>
|
|
|
<div class="col-md-12">
|
|
|
<div class="col-sm-6 col-md-6">
|
|
|
- <p>
|
|
|
- <i class="ti ti-brand-apple"></i>
|
|
|
- <a target="view_window"
|
|
|
- href="https://apps.apple.com/us/app/google-authenticator/id388497605">iOS 客户端
|
|
|
- </a>
|
|
|
-
|
|
|
- <i class="ti ti-brand-android"></i>
|
|
|
- <a target="view_window"
|
|
|
- href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Android 客户端
|
|
|
- </a>
|
|
|
- </p>
|
|
|
+ <i class="ti ti-brand-apple"></i>
|
|
|
+ <a target="view_window"
|
|
|
+ href="https://apps.apple.com/us/app/google-authenticator/id388497605">iOS 客户端
|
|
|
+ </a>
|
|
|
+
|
|
|
+ <i class="ti ti-brand-android"></i>
|
|
|
+ <a target="view_window"
|
|
|
+ href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Android 客户端
|
|
|
+ </a>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <br>
|
|
|
<div class="row">
|
|
|
<div class="col-md-3">
|
|
|
<p id="qrcode"></p>
|
|
@@ -288,8 +257,8 @@
|
|
|
<select id="user-method" class="form-select">
|
|
|
{foreach $methods as $method}
|
|
|
<option value="{$method}"
|
|
|
- {if $user->method === $method}selected{/if}
|
|
|
- >{$method}
|
|
|
+ {if $user->method === $method}selected{/if}>
|
|
|
+ {$method}
|
|
|
</option>
|
|
|
{/foreach}
|
|
|
</select>
|
|
@@ -305,13 +274,14 @@
|
|
|
<div class="col-sm-12 col-md-6">
|
|
|
<div class="card">
|
|
|
<div class="card-body">
|
|
|
- <h3 class="card-title">更换订阅地址</h3>
|
|
|
- <p>更换订阅地址后,旧的订阅地址将无法获取配置,但节点配置仍能使用。如果希望旧的节点配置不能使用,请配合修改连接密码操作</p>
|
|
|
+ <h3 class="card-title">重置订阅地址</h3>
|
|
|
+ <p>重置订阅地址后,旧的订阅地址将无法获取配置,但节点配置仍能使用。
|
|
|
+ 如果希望作废旧节点配置请配合重置连接密码操作</p>
|
|
|
</div>
|
|
|
<div class="card-footer">
|
|
|
<div class="d-flex">
|
|
|
<a id="reset-sub-url"
|
|
|
- class="btn btn-primary ms-auto bg-red">更换</a>
|
|
|
+ class="btn btn-primary ms-auto bg-red">重置</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -326,8 +296,7 @@
|
|
|
</div>
|
|
|
<div class="card-footer">
|
|
|
<div class="d-flex">
|
|
|
- <a id="reset-passwd"
|
|
|
- class="btn btn-primary ms-auto bg-red">重置</a>
|
|
|
+ <a id="reset-passwd" class="btn btn-primary ms-auto bg-red">重置</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -381,7 +350,7 @@
|
|
|
<a id="modify-user-theme" class="btn btn-primary ms-auto">修改</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
{if $config['enable_kill']}
|
|
|
<div class="col-sm-12 col-md-6">
|
|
@@ -393,7 +362,7 @@
|
|
|
</div>
|
|
|
<div class="card-body">
|
|
|
<h3 class="card-title">删除账户数据</h3>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
<div class="card-footer">
|
|
|
<a href="#" class="btn btn-red" data-bs-toggle="modal"
|
|
|
data-bs-target="#destroy-account">
|
|
@@ -401,7 +370,7 @@
|
|
|
确认删除
|
|
|
</a>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
{/if}
|
|
|
</div>
|
|
@@ -698,15 +667,11 @@
|
|
|
})
|
|
|
});
|
|
|
|
|
|
- $("#modify-im").click(function() {
|
|
|
+ $("#unbind-im").click(function() {
|
|
|
$.ajax({
|
|
|
type: "POST",
|
|
|
- url: "/user/contact_update",
|
|
|
+ url: "/user/unbind_im",
|
|
|
dataType: "json",
|
|
|
- data: {
|
|
|
- imtype: $('#imtype').val(),
|
|
|
- imvalue: $('#imvalue').val()
|
|
|
- },
|
|
|
success: function(data) {
|
|
|
if (data.ret === 1) {
|
|
|
$('#success-message').text(data.msg);
|
|
@@ -776,26 +741,6 @@
|
|
|
})
|
|
|
});
|
|
|
|
|
|
- $("#unbind-telegram-btn").click(function() {
|
|
|
- $.ajax({
|
|
|
- type: "POST",
|
|
|
- url: "/user/telegram_reset",
|
|
|
- dataType: "json",
|
|
|
- success: function(data) {
|
|
|
- if (data.ret === 1) {
|
|
|
- $('#success-message').text(data.msg);
|
|
|
- $('#success-dialog').modal('show');
|
|
|
- setTimeout(function() {
|
|
|
- location.reload();
|
|
|
- }, 1000);
|
|
|
- } else {
|
|
|
- $('#fail-message').text(data.msg);
|
|
|
- $('#fail-dialog').modal('show');
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- });
|
|
|
-
|
|
|
{if $config['enable_kill']}
|
|
|
$("#confirm-destroy").click(function() {
|
|
|
$.ajax({
|
|
@@ -817,6 +762,85 @@
|
|
|
})
|
|
|
});
|
|
|
{/if}
|
|
|
+
|
|
|
+ {if $user->im_type === 0 && $user->im_value === ''}
|
|
|
+ $("#imtype").on('change', function() {
|
|
|
+ if ($(this).val() === '0') {
|
|
|
+ $('#oauth-provider').empty();
|
|
|
+ } else if ($(this).val() === '1') {
|
|
|
+ $('#oauth-provider').empty();
|
|
|
+ $('#oauth-provider').append(
|
|
|
+ '<a id=\"bind-slack\" class=\"btn btn-azure ms-auto\">绑定 Slack<\/a>'
|
|
|
+ );
|
|
|
+ } else if ($(this).val() === '2') {
|
|
|
+ $('#oauth-provider').empty();
|
|
|
+ $('#oauth-provider').append(
|
|
|
+ '<a id=\"bind-discord\" class=\"btn btn-indigo ms-auto\">绑定 Discord<\/a>'
|
|
|
+ );
|
|
|
+ } else if ($(this).val() === '4'){
|
|
|
+ $('#oauth-provider').empty();
|
|
|
+ $('#oauth-provider').append(
|
|
|
+ '<script async src=\"https://telegram.org/js/telegram-widget.js?22\"' +
|
|
|
+ ' data-telegram-login=\"' + "{$public_setting['telegram_bot']}" +
|
|
|
+ '\" data-size=\"large" data-onauth=\"onTelegramAuth(user)\"' +
|
|
|
+ ' data-request-access=\"write\"><\/script>'
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ $('#oauth-provider').on('click', '#bind-slack', function() {
|
|
|
+ $.ajax({
|
|
|
+ type: "POST",
|
|
|
+ url: "/oauth/slack",
|
|
|
+ dataType: "json",
|
|
|
+ success: function(data) {
|
|
|
+ if (data.ret === 1) {
|
|
|
+ $('#success-message').text(data.msg);
|
|
|
+ $('#success-dialog').modal('show');
|
|
|
+ } else {
|
|
|
+ $('#fail-message').text(data.msg);
|
|
|
+ $('#fail-dialog').modal('show');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ });
|
|
|
+
|
|
|
+ $('#oauth-provider').on('click', '#bind-discord', function() {
|
|
|
+ $.ajax({
|
|
|
+ type: "POST",
|
|
|
+ url: "/oauth/discord",
|
|
|
+ dataType: "json",
|
|
|
+ success: function(data) {
|
|
|
+ if (data.ret === 1) {
|
|
|
+ window.setTimeout(location.href=data.redir, 0);
|
|
|
+ } else {
|
|
|
+ $('#fail-message').text(data.msg);
|
|
|
+ $('#fail-dialog').modal('show');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ });
|
|
|
+
|
|
|
+ function onTelegramAuth(user) {
|
|
|
+ $.ajax({
|
|
|
+ type: "POST",
|
|
|
+ url: "/oauth/telegram",
|
|
|
+ dataType: "json",
|
|
|
+ data: {
|
|
|
+ user: JSON.stringify(user),
|
|
|
+ },
|
|
|
+ success: function(data) {
|
|
|
+ if (data.ret === 1) {
|
|
|
+ $('#success-message').text(data.msg);
|
|
|
+ $('#success-dialog').modal('show');
|
|
|
+ } else {
|
|
|
+ $('#error-message').text(data.msg);
|
|
|
+ $('#fail-dialog').modal('show');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ {/if}
|
|
|
</script>
|
|
|
-
|
|
|
+
|
|
|
{include file='user/footer.tpl'}
|