finish oauth provider + docker service wait for MySQL

This commit is contained in:
xiaomlove
2025-05-01 14:18:30 +07:00
parent cc89e8aa59
commit af33e5cba7
26 changed files with 450 additions and 41 deletions

View File

@@ -17,12 +17,12 @@ return [
'msg_title' => 'Claim settle result last month(:month):',
'msg_subject' => ':month claim settlement',
'claim_total' => 'Claim torrent total: <b>:total</b>',
'claim_reached_counts' => 'Reached torrent counts: <b>:counts</b>',
'claim_reached_summary' => 'Reached torrent get bonus per hour: <b>:bonus_per_hour</b>, seed time average(hour): <b>:hours</b>, get bonus total: <b>:bonus_total</b>',
'claim_unreached_remain_counts' => 'Unreached torrent remain counts: <b>:counts</b>',
'claim_unreached_remove_counts' => 'Unreached torrent remove counts: <b>:counts</b>',
'claim_unreached_summary' => 'Deduct bonus every unreached torrent<b>:deduct_per_torrent</b>, total deduct: <b>:deduct_total</b>',
'claim_total' => 'Claim torrent total: [b]:total[/b]',
'claim_reached_counts' => 'Reached torrent counts: [b]:counts[/b]',
'claim_reached_summary' => 'Reached torrent get bonus per hour: [b]:bonus_per_hour[/b], seed time average(hour): [b]:hours[/b], get bonus total: [b]:bonus_total[/b]',
'claim_unreached_remain_counts' => 'Unreached torrent remain counts: [b]:counts[/b]',
'claim_unreached_remove_counts' => 'Unreached torrent remove counts: [b]:counts[/b]',
'claim_unreached_summary' => 'Deduct bonus every unreached torrent[b]:deduct_per_torrent[/b], total deduct: [b]:deduct_total[/b]',
'confirm_give_up' => 'Are you sure you want to give up claiming this torrent?',
'add_claim' => 'Claim',

View File

@@ -34,7 +34,7 @@ return [
'cancel' => 'Cancel',
'reset' => 'Reset',
'anonymous' => 'Anonymous',
'infinite' => 'Infinite',
'infinite' => 'Inf.',
'save' => 'Save',
'country' => 'Country',
'city' => 'City',

View File

@@ -18,4 +18,12 @@ return [
'id_claim' => 'ID claim',
'username_claim' => 'username claim',
'email_claim' => 'email claim',
'level_claim' => 'Level field name',
'level_limit' => 'Level limit',
'level_limit_help' => 'Allow only users not below this level to log in',
'get_access_token_error' => 'Getting access token error: :error',
'get _provider_user_id_error' => 'Unable to get user ID via field :id_claim',
'get_provider_level_error' => 'Unable to get user level via field :level_claim',
'provider_level_not_ allowed' => 'Only users with level :level_limit or above are allowed to log in',
'provider_email_already_exists' => 'Email: :email is already in use',
];

View File

@@ -17,12 +17,12 @@ return [
'msg_title' => '上个月(:month)认领结算如下:',
'msg_subject' => ':month 认领结算',
'claim_total' => '认领种子数:<b>:total</b>',
'claim_reached_counts' => '达标数:<b>:counts</b>',
'claim_reached_summary' => '达标种子数每小时魔力:<b>:bonus_per_hour</b>, 平均做种小时数:<b>:hours</b>, 获得魔力:<b>:bonus_total</b>',
'claim_unreached_remain_counts' => '未达标保留数:<b>:counts</b>',
'claim_unreached_remove_counts' => '未达标删除数:<b>:counts</b>',
'claim_unreached_summary' => '未达标每个种子扣除魔力:<b>:deduct_per_torrent</b>,总扣除魔力:<b>:deduct_total</b>',
'claim_total' => '认领种子数:[b]:total[/b]',
'claim_reached_counts' => '达标数:[b]:counts[/b]',
'claim_reached_summary' => '达标种子数每小时魔力:[b]:bonus_per_hour[/b], 平均做种小时数:[b]:hours[/b], 获得魔力:[b]:bonus_total[/b]',
'claim_unreached_remain_counts' => '未达标保留数:[b]:counts[/b]',
'claim_unreached_remove_counts' => '未达标删除数:[b]:counts[/b]',
'claim_unreached_summary' => '未达标每个种子扣除魔力:[b]:deduct_per_torrent[/b],总扣除魔力:[b]:deduct_total[/b]',
'confirm_give_up' => '确定要放弃认领此种子吗?',
'add_claim' => '认领',

View File

@@ -18,4 +18,12 @@ return [
'id_claim' => 'ID 字段名',
'username_claim' => '用户名字段名',
'email_claim' => '邮箱字段名',
'level_claim' => '等级字段名',
'level_limit' => '等级限制',
'level_limit_help' => '只允许不低于此等级的用户登录',
'get_access_token_error' => '获取访问令牌错误::error',
'get_provider_user_id_error' => '无法通过字段 :id_claim 获取用户 ID',
'get_provider_level_error' => '无法通过字段 :level_claim 获取用户等级',
'provider_level_not_allowed' => '仅允许 :level_limit 或以上等级的用户登录',
'provider_email_already_exists' => '邮箱::email 已经被使用',
];

View File

@@ -16,12 +16,12 @@ return [
'msg_title' => '上個月(:month)認領結算如下:',
'msg_subject' => ':month 認領結算',
'claim_total' => '認領種子數:<b>:total</b>',
'claim_reached_counts' => '達標數:<b>:counts</b>',
'claim_reached_summary' => '達標種子數每小時魔力:<b>:bonus_per_hour</b>, 平均做種小時數:<b>:hours</b>, 獲得魔力:<b>:bonus_total</b>',
'claim_unreached_remain_counts' => '未達標保留數:<b>:counts</b>',
'claim_unreached_remove_counts' => '未達標刪除數:<b>:counts</b>',
'claim_unreached_summary' => '未達標每個種子扣除魔力:<b>:deduct_per_torrent</b>,總扣除魔力:<b>:deduct_total</b>',
'claim_total' => '認領種子數:[b]:total[/b]',
'claim_reached_counts' => '達標數:[b]:counts[/b]',
'claim_reached_summary' => '達標種子數每小時魔力:[b]:bonus_per_hour[/b], 平均做種小時數:[b]:hours[/b], 獲得魔力:[b]:bonus_total[/b]',
'claim_unreached_remain_counts' => '未達標保留數:[b]:counts[/b]',
'claim_unreached_remove_counts' => '未達標刪除數:[b]:counts[/b]',
'claim_unreached_summary' => '未達標每個種子扣除魔力:[b]:deduct_per_torrent[/b],總扣除魔力:[b]:deduct_total[/b]',
'confirm_give_up' => '確定要放棄認領此種子嗎?',
'add_claim' => '認領',

View File

@@ -18,4 +18,12 @@ return [
'id_claim' => 'ID 字段名',
'username_claim' => '用戶名字段名',
'email_claim' => '郵箱字段名',
'level_claim' => '等級字段名',
'level_limit' => '等級限製',
'level_limit_help' => '只允許不低於此等級的用戶登錄',
'get_access_token_error' => '獲取訪問令牌錯誤::error',
'get_provider_user_id_error' => '無法通過字段 :id_claim 獲取用戶 ID',
'get_provider_level_error' => '無法通過字段 :level_claim 獲取用戶等級',
'provider_level_not_allowed' => '僅允許 :level_limit 或以上等級的用戶登錄',
'provider_email_already_exists' => '郵箱::email 已經被使用',
];

View File

@@ -0,0 +1,190 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Error</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: "PingFang SC", "Helvetica Neue", Helvetica, "Microsoft YaHei", Arial, sans-serif;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
height: 100vh;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
.background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url('/pic/oauth2-authorize-bg.jpg');
background-size: cover;
background-position: center;
opacity: 0.2;
z-index: 1;
}
.container {
position: relative;
z-index: 2;
max-width: 800px;
padding: 3rem;
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(10px);
border-radius: 12px;
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1);
text-align: center;
}
.error-icon {
font-size: 5rem;
margin-bottom: 1.5rem;
color: #5d76cb;
}
.error-title {
font-size: 2.5rem;
font-weight: 700;
margin-bottom: 1.5rem;
color: #333;
background: linear-gradient(135deg, #4568dc 0%, #b06ab3 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.error-message {
font-size: 1.2rem;
line-height: 1.6;
margin-bottom: 2.5rem;
color: #555;
}
.action-links {
display: flex;
justify-content: center;
gap: 1.5rem;
margin-bottom: 2rem;
}
.btn {
padding: 0.8rem 1.8rem;
font-size: 1.1rem;
font-weight: 600;
border-radius: 8px;
text-decoration: none;
transition: all 0.3s ease;
border: none;
cursor: pointer;
position: relative;
overflow: hidden;
}
.btn-primary {
background: linear-gradient(135deg, #4568dc 0%, #b06ab3 100%);
color: #fff;
box-shadow: 0 4px 15px rgba(69, 104, 220, 0.3);
}
.btn-primary:hover {
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(69, 104, 220, 0.5);
}
.btn-secondary {
background: transparent;
color: #555;
border: 1px solid rgba(0, 0, 0, 0.2);
}
.btn-secondary:hover {
background: rgba(0, 0, 0, 0.05);
transform: translateY(-3px);
}
.footer {
margin-top: 2rem;
color: #777;
font-size: 0.9rem;
}
.ornament {
position: absolute;
background: linear-gradient(135deg, #4568dc 0%, #b06ab3 100%);
border-radius: 50%;
filter: blur(70px);
opacity: 0.15;
z-index: 0;
}
.ornament-1 {
width: 300px;
height: 300px;
top: -150px;
left: -150px;
}
.ornament-2 {
width: 200px;
height: 200px;
bottom: -100px;
right: -100px;
}
@media (max-width: 768px) {
.container {
width: 90%;
padding: 2rem;
}
.error-title {
font-size: 2rem;
}
.error-message {
font-size: 1rem;
}
.action-links {
flex-direction: column;
gap: 1rem;
}
.btn {
width: 100%;
}
}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
</head>
<body>
<div class="background"></div>
<div class="ornament ornament-1"></div>
<div class="ornament ornament-2"></div>
<div class="container">
<div class="error-icon">
<i class="fas fa-exclamation-circle"></i>
</div>
<h1 class="error-title">Error</h1>
<p class="error-message">
{{ $error }}
</p>
<div class="action-links">
<a href="/" class="btn btn-primary">Go home</a>
<a href="javascript:history.back()" class="btn btn-secondary">Go back</a>
</div>
</div>
</body>
</html>