diff --git a/app/Http/Controllers/DataBase.php b/app/Http/Controllers/DataBase.php new file mode 100644 index 0000000..fc73829 --- /dev/null +++ b/app/Http/Controllers/DataBase.php @@ -0,0 +1,40 @@ +orderBy('id') + ->get() + ->toArray(); + foreach ($result as $value) { + $value->blog_rss_judge ? $value->blog_rss_judge = 1 : $value->blog_rss_judge = 0; + DB::table('blog_link') + ->insert([ + 'blogName' => $value->blog_name, + 'blogUrl' => $value->blog_url, + 'blogDescription' => $value->blog_introduce, + 'blogOwnEmail' => $value->blog_owner_email, + 'blogIcon' => $value->blog_icon, + 'blogRssJudge' => $value->blog_rss_judge, + 'blogRSS' => $value->blog_rss, + 'blogServerHost' => $value->blog_serverhost, + 'blogLocation' => $value->blog_location, + 'blogSetColor' => $value->blog_sel_color, + 'created_at' => date('Y-m-d H:i:s'), + ]); + } + } +} diff --git a/app/Http/Controllers/Function/Link.php b/app/Http/Controllers/Function/Link.php index f60de43..43b2e06 100644 --- a/app/Http/Controllers/Function/Link.php +++ b/app/Http/Controllers/Function/Link.php @@ -40,10 +40,12 @@ public function __construct() */ public function apiCustomAdd(HttpRequest $request): JsonResponse { - /** @var array $returnData Json的 return 返回值 */ - /** @var Validator $dataCheck 数据判断 */ - /** @var array $errorInfo 错误信息 */ - /** @var array $errorSingle 输出单个错误信息 */ + /** + * @var array $returnData Json的 return 返回值 + * @var Validator $dataCheck 数据判断 + * @var array $errorInfo 错误信息 + * @var array $errorSingle 输出单个错误信息 + */ // 检查数据 $dataCheck = Validator::make($request->all(), [ 'userEmail' => 'required|email', @@ -110,6 +112,7 @@ public function apiCustomAdd(HttpRequest $request): JsonResponse 'blogUserLocation' => $request->userLocation, 'blogSetColor' => $request->userSelColor, 'blogRemark' => $request->userRemark, + 'blogServerHost' => $request->userServerHost, ]); if ($insertData) { // 邮件发送系统 @@ -435,8 +438,10 @@ private function apiCustomBlogCheckSendEmail(): void */ public function apiCustomBlogVerify(HttpRequest $request): JsonResponse { - /** @var array $returnData Json的 return 返回值 */ - /** @var mixed $cookie 保存Cookie数据 */ + /** + * @var array $returnData Json的 return 返回值 + * @var mixed $cookie 保存Cookie数据 + */ //数据验证 $dataCheck = Validator::make($request->all(), [ 'id' => 'required|int', @@ -445,7 +450,6 @@ public function apiCustomBlogVerify(HttpRequest $request): JsonResponse ]); // 验证数据是否合法 if (!$dataCheck->fails()) { - $cookie = cookie('friend_edit', '', -1, '/'); // 检查内容是否存在 $resultBlog = DB::table('blog_link') ->select('id', 'blogOwnEmail') @@ -479,6 +483,8 @@ public function apiCustomBlogVerify(HttpRequest $request): JsonResponse 'id' => $resultBlog->id ], ]; + return Response::json($returnData, $returnData['code']) + ->cookie($cookie); } else { // 验证码验证失败 $returnData = [ @@ -539,8 +545,197 @@ public function apiCustomBlogVerify(HttpRequest $request): JsonResponse ], ]; } - return Response::json($returnData, $returnData['code']) - ->cookie($cookie); + return Response::json($returnData, $returnData['code']); + } + + /** + * 修改友链API + * + * @param HttpRequest $request 获取HTTP中 Request 数据 + * @return JsonResponse 返回JSON数据 + */ + public function apiCustomEdit(HttpRequest $request, string $friendId): JsonResponse + { + /** + * @var array $returnData Json的 return 返回值 + * @var Validator $dataCheck 数据判断 + * @var array $errorInfo 错误信息 + * @var array $errorSingle 输出单个错误信息 + */ + // 验证Cookie是否有效 + if ($request->hasCookie('friend_edit')) { + // 检查Cookie解析是否为此博客 + if (password_verify($friendId, $request->cookie('friend_edit'))) { + // 获取数据库 + $resultBlog = DB::table('blog_link') + ->find($friendId); + if (!empty($resultBlog->id)) { + // 检查数据 + $dataCheck = Validator::make($request->all(), [ + 'userEmail' => 'required|email', + 'userServerHost' => 'required|string', + 'userBlog' => 'required|string', + 'userUrl' => 'required|regex:#[a-zA-z]+://[^\s]*#', + 'userDescription' => 'required|string', + 'userIcon' => 'required|regex:#[a-zA-z]+://[^\s]*#', + 'checkRssJudge' => 'boolean', + 'userRss' => 'string|regex:#[a-zA-z]+://[^\s]*#', + 'userSelColor' => 'required|int', + 'userRemark' => 'string', + ]);// 检查发现错误 + if ($dataCheck->fails()) { + $errorType = array_keys($dataCheck->failed()); + $i = 0; + foreach ($dataCheck->failed() as $valueData) { + $errorInfo[$errorType[$i]] = array_keys($valueData); + if ($i == 0) { + $errorSingle = [ + 'info' => $errorType[$i], + 'need' => $errorInfo[$errorType[$i]], + ]; + } + $i++; + } + $returnData = [ + 'output' => 'DataFormatError', + 'code' => 403, + 'data' => [ + 'message' => '输入内容有错误', + 'errorSingle' => $errorSingle, + 'error' => $errorInfo, + ], + ]; + } else { + // 检查数据 + if (empty($request->checkRssJudge)) { + $request->checkRssJudge = 0; + } + // 数据载入数组 + $this->data['oldBlog'] = (object)[ + 'blogOwnEmail' => $resultBlog->blogOwnEmail, + 'blogUrl' => $resultBlog->blogUrl, + 'blogName' => $resultBlog->blogName, + 'blogDescription' => $resultBlog->blogDescription, + 'blogIcon' => $resultBlog->blogIcon, + 'blogRssJudge' => $resultBlog->blogRssJudge, + 'blogRSS' => $resultBlog->blogRSS, + 'blogSetColor' => $resultBlog->blogSetColor, + 'blogRemark' => $resultBlog->blogRemark, + 'blogServerHost' => $resultBlog->blogServerHost, + ]; + $this->data['blog'] = (object)[ + 'blogOwnEmail' => $request->userEmail, + 'blogUrl' => $request->userUrl, + 'blogName' => $request->userBlog, + 'blogDescription' => $request->userDescription, + 'blogIcon' => $request->userIcon, + 'blogRssJudge' => $request->checkRssJudge, + 'blogRSS' => $request->userRss, + 'blogSetColor' => $request->userSelColor, + 'blogRemark' => $request->userRemark, + 'blogServerHost' => $request->userServerHost, + ]; + + // 修改数据 + $updateData = DB::table('blog_link') + ->where('id', $resultBlog->id) + ->update([ + 'blogOwnEmail' => $request->userEmail, + 'blogUrl' => $request->userUrl, + 'blogName' => $request->userBlog, + 'blogDescription' => $request->userDescription, + 'blogIcon' => $request->userIcon, + 'blogRssJudge' => $request->checkRssJudge, + 'blogRSS' => $request->userRss, + 'blogSetColor' => $request->userSelColor, + 'blogRemark' => $request->userRemark, + 'blogServerHost' => $request->userServerHost, + 'updated_at' => date('Y-m-d H:i:s'), + ]); + + if ($updateData) { + // 邮件发送系统 + // 新用户 + if ($this->data['oldBlog']->blogOwnEmail != $this->data['blog']->blogOwnEmail) { + $this->data['sendEmail'] = [ + 'userEmail' => $this->data['blog']->blogOwnEmail, + 'userBlog' => $this->data['blog']->blogName, + 'userUrl' => $this->data['blog']->blogUrl, + ]; + Mail::send('mail.link-custom-edit', $this->data, function (Message $mail) { + $mail->from(env('MAIL_USERNAME'), env('APP_NAME')); + $mail->to($this->data['sendEmail']['userEmail']); + $mail->subject(env('APP_NAME') . '-友链自主修改通知'); + }); + } + $this->data['sendEmail'] = [ + 'userEmail' => $this->data['oldBlog']->blogOwnEmail, + 'userBlog' => $this->data['oldBlog']->blogName, + 'userUrl' => $this->data['oldBlog']->blogUrl, + ]; + // 用户 + Mail::send('mail.link-custom-edit', $this->data, function (Message $mail) { + $mail->from(env('MAIL_USERNAME'), env('APP_NAME')); + $mail->to($this->data['sendEmail']['userEmail']); + $mail->subject(env('APP_NAME') . '-友链自主修改通知'); + }); + // 站长 + Mail::send('mail.link-custom-edit-admin', $this->data, function (Message $mail) { + $mail->from(env('MAIL_USERNAME'), env('APP_NAME')); + $mail->to($this->data['sqlEmail']); + $mail->subject(env('APP_NAME') . '-友链自主修改通知'); + }); + + // 消息成功通知 + $returnData = [ + 'output' => 'Success', + 'code' => 200, + 'data' => [ + 'message' => '您已成功修改', + ], + ]; + $cookie = cookie('friend_edit', '', -1, '/'); + return Response::json($returnData, $returnData['code']) + ->cookie($cookie); + } else { + $returnData = [ + 'output' => 'UpdateFail', + 'code' => 403, + 'data' => [ + 'message' => '更新失败请联系管理员', + ], + ]; + } + } + } else { + $returnData = [ + 'output' => 'NoBlog', + 'code' => 403, + 'data' => [ + 'message' => '没有对应博客', + ], + ]; + } + } else { + $returnData = [ + 'output' => 'Mismatch', + 'code' => 403, + 'data' => [ + 'message' => '不匹配', + ], + ]; + } + } else { + $returnData = [ + 'output' => 'InvalidValidation', + 'code' => 403, + 'data' => [ + 'message' => '无效验证', + ], + ]; + } + + return Response::json($returnData, $returnData['code']); } protected function viewEditFriend(HttpRequest $request, $friendId): Application|Factory|View|RedirectResponse @@ -586,14 +781,14 @@ protected function viewEditFriend(HttpRequest $request, $friendId): Application| } } - protected function viewLink(HttpRequest $request): Factory|View|Application + protected function viewLink(): Factory|View|Application { $this->data['webSubTitle'] = '友链'; - $this->GetFriendsLink($this->data); + $this->getFriendsLink($this->data); return view('function.link', $this->data); } - private function GetFriendsLink(array &$data): void + private function getFriendsLink(array &$data): void { $data['blogLink'] = DB::table('blog_link')->whereNotIn('blog_link.blogLocation', [0])->get()->toArray(); $data['blogSort'] = DB::table('blog_sort')->orderBy('blog_sort.sort')->get()->toArray(); @@ -629,23 +824,29 @@ protected function viewSearchFriend($friendId): Factory|View|Application|Redirec ->select('id', 'blogOwnEmail', 'blogName') ->find($friendId); if (!empty($resultBlog->id)) { - // 处理加密邮箱 - $strlenEmail = strlen($resultBlog->blogOwnEmail); - ($strlenEmail > 4) ? $j = 1 : $j = 0; - for ($i = 0; $i < $strlenEmail; $i++) { - if ($resultBlog->blogOwnEmail[$i] != '@') { - if ($i > $j && $i < $strlenEmail - ($j + 1)) { - $dataEmail[$i] = '*'; + if (!empty($resultBlog->blogOwnEmail)) { + // 处理加密邮箱 + $strlenEmail = strlen($resultBlog->blogOwnEmail); + ($strlenEmail > 4) ? $j = 1 : $j = 0; + for ($i = 0; $i < $strlenEmail; $i++) { + if ($resultBlog->blogOwnEmail[$i] != '@') { + if ($i > $j && $i < $strlenEmail - ($j + 1)) { + $dataEmail[$i] = '*'; + } else { + $dataEmail[$i] = $resultBlog->blogOwnEmail[$i]; + } } else { $dataEmail[$i] = $resultBlog->blogOwnEmail[$i]; } - } else { - $dataEmail[$i] = $resultBlog->blogOwnEmail[$i]; } + $resultBlog->blogOwnEmail = implode($dataEmail); + $this->data['blog'] = $resultBlog; + return view('function.edit-check', $this->data); + } else { + $resultBlog->blogOwnEmail = null; + $this->data['blog'] = $resultBlog; + return view('function.edit-unemail', $this->data); } - $resultBlog->blogOwnEmail = implode($dataEmail); - $this->data['blog'] = $resultBlog; - return view('function.edit-check', $this->data); } else { return Response::redirectTo(route('function.edit-search')); } diff --git a/app/Http/Controllers/Index.php b/app/Http/Controllers/Index.php index b4b18fe..8141898 100644 --- a/app/Http/Controllers/Index.php +++ b/app/Http/Controllers/Index.php @@ -30,6 +30,7 @@ public function __construct() 'webFooter' => DB::table('info')->find(8)->data, 'webKeyword' => empty($tempStorage = DB::table('info')->find(6)->data) ? '筱锋,凌中的锋雨,xiao_lfeng' : $tempStorage, 'sqlAuthor' => empty($tempStorage = DB::table('info')->find(12)->data) ? '筱锋xiao_lfeng' : $tempStorage, + 'sqlEmail' => empty($tempStorage = DB::table('info')->find(17)->data) ? 'gm@x-lf.cn' : $tempStorage, 'sqlCopyRightYear' => DB::table('info')->find(13)->data, 'sqlIcp' => DB::table('info')->find(10)->data, 'sqlGongan' => DB::table('info')->find(11)->data, diff --git a/database/migrations/2023_06_13_060913_update_info_table.php b/database/migrations/2023_06_13_060913_update_info_table.php index 54713f1..155faf3 100644 --- a/database/migrations/2023_06_13_060913_update_info_table.php +++ b/database/migrations/2023_06_13_060913_update_info_table.php @@ -35,6 +35,9 @@ public function up() DB::table('info')->insert(['value' => 'author', 'created_at' => date('Y-m-d H:i:s')]); DB::table('info')->insert(['value' => 'copyRightYear', 'created_at' => date('Y-m-d H:i:s')]); DB::table('info')->insert(['value' => 'blog', 'created_at' => date('Y-m-d H:i:s')]); + DB::table('info')->insert(['value' => 'applicationRule', 'created_at' => date('Y-m-d H:i:s')]); + DB::table('info')->insert(['value' => 'applicationInfo', 'created_at' => date('Y-m-d H:i:s')]); + DB::table('info')->insert(['value' => 'email', 'created_at' => date('Y-m-d H:i:s')]); }); } diff --git a/resources/views/function/edit-check.blade.php b/resources/views/function/edit-check.blade.php index a1ee5b5..c6d17db 100644 --- a/resources/views/function/edit-check.blade.php +++ b/resources/views/function/edit-check.blade.php @@ -21,58 +21,14 @@ class="relative left-[calc(50%-11rem)] aspect-[1155/678] w-[36.125rem] -translat style="clip-path: polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)">
-
- - - -
- - -
+ -
-
@@ -161,18 +117,6 @@ class="z-[9999] fixed top-5 left-5 hidden items-center w-full max-w-xs p-4 space + + +{!! $webFooter !!} + diff --git a/resources/views/mail/link-custom-edit-admin.blade.php b/resources/views/mail/link-custom-edit-admin.blade.php new file mode 100644 index 0000000..44db8f2 --- /dev/null +++ b/resources/views/mail/link-custom-edit-admin.blade.php @@ -0,0 +1,84 @@ + + + + + Mail + + + + + + + + + + + + +
{{ env('APP_NAME') }}
+ + + + + + + + + + +
+ 时间: {{ date('Y-m-d H:i:s') }} +
+ Dear. {{ $sqlEmail }} +
+ 您好站长:{{ $sqlAuthor }}
+ 本站友链({{ $oldBlog->blogName }})已自行修改
+ 请检查修改问题确保无误! +
+ 这是您以前的信息:
+
    +
  • 博主邮箱:{{ $blog->blogOwnEmail }}
  • +
  • 贵站名字:{{ $blog->blogName }}
  • +
  • 贵站地址:{{ $blog->blogUrl }}
  • +
  • 图片地址:{{ $blog->blogIcon }}
  • +
  • 贵站介绍:{{ $blog->blogDescription }}
  • + @if(!empty($blog->blogRemark)) +
  • 备注内容:{{ $blog->blogRemark }}
  • + @endif + @if($blog->blogRssJudge == 1) +
  • RSS地址:{{ $blog->blogRSS }}
  • + @endif +
+
+ 这是您的修改信息:
+
    +
  • 博主邮箱:{{ $oldBlog->blogOwnEmail }}
  • +
  • 贵站名字:{{ $oldBlog->blogName }}
  • +
  • 贵站地址:{{ $oldBlog->blogUrl }}
  • +
  • 图片地址:{{ $oldBlog->blogIcon }}
  • +
  • 贵站介绍:{{ $oldBlog->blogDescription }}
  • + @if(!empty($oldBlog->blogRemark)) +
  • 备注内容:{{ $oldBlog->blogRemark }}
  • + @endif + @if($oldBlog->blogRssJudge == 1) +
  • RSS地址:{{ $oldBlog->blogRSS }}
  • + @endif +
+
+ 此邮件为凭证,若发生意外修改请使用此邮件提交于站长!谢谢您对本站的支持!
+
+
+ + + + +
+ © 2022 - {{ date('Y') }}. {{ env('APP_NAME') }} All Rights Reserved.
+ 本邮件为自动发出,请勿直接回复 +
+
+ + + + diff --git a/resources/views/mail/link-custom-edit.blade.php b/resources/views/mail/link-custom-edit.blade.php new file mode 100644 index 0000000..2a6f48a --- /dev/null +++ b/resources/views/mail/link-custom-edit.blade.php @@ -0,0 +1,86 @@ + + + + + Mail + + + + + + + + + + + + +
{{ env('APP_NAME') }}
+ + + + + + + + + + +
+ 时间: {{ date('Y-m-d H:i:s') }} +
+ Dear. {{ $sendEmail['userEmail'] }} +
+ 您好 {{ $sendEmail['userBlog'] }} 的站长: + {{ $sendEmail['userEmail'] }}
+ 您在本博客({{ env('APP_NAME') }})自主修改友链
+ 邮件为通知您您已成功修改友链,修改立即生效,我们告知您已做出了修改,若您未执行修改请立刻联系站长 + {{ $sqlAuthor }}({{ $sqlEmail }}) +
+ 这是您现在的信息:
+
    +
  • 博主邮箱:{{ $blog->blogOwnEmail }}
  • +
  • 贵站名字:{{ $blog->blogName }}
  • +
  • 贵站地址:{{ $blog->blogUrl }}
  • +
  • 图片地址:{{ $blog->blogIcon }}
  • +
  • 贵站介绍:{{ $blog->blogDescription }}
  • + @if(!empty($blog->blogRemark)) +
  • 备注内容:{{ $blog->blogRemark }}
  • + @endif + @if($blog->blogRssJudge == 1) +
  • RSS地址:{{ $blog->blogRSS }}
  • + @endif +
+
+ 这是您以前的修改信息:
+
    +
  • 博主邮箱:{{ $oldBlog->blogOwnEmail }}
  • +
  • 贵站名字:{{ $oldBlog->blogName }}
  • +
  • 贵站地址:{{ $oldBlog->blogUrl }}
  • +
  • 图片地址:{{ $oldBlog->blogIcon }}
  • +
  • 贵站介绍:{{ $oldBlog->blogDescription }}
  • + @if(!empty($oldBlog->blogRemark)) +
  • 备注内容:{{ $oldBlog->blogRemark }}
  • + @endif + @if($oldBlog->blogRssJudge == 1) +
  • RSS地址:{{ $oldBlog->blogRSS }}
  • + @endif +
+
+ 此邮件为凭证,若发生意外修改请使用此邮件提交于站长!谢谢您对本站的支持!
+
+
+ + + + +
+ © 2022 - {{ date('Y') }}. {{ env('APP_NAME') }} All Rights Reserved.
+ 本邮件为自动发出,请勿直接回复 +
+
+ + + + diff --git a/routes/api.php b/routes/api.php index 1ee2714..dc6accf 100644 --- a/routes/api.php +++ b/routes/api.php @@ -43,8 +43,9 @@ }); Route::prefix('custom')->group(function () { - Route::post('add',[Link::class,'apiCustomAdd'])->name('api.link.custom.add'); - Route::get('search',[Link::class, 'apiCustomSearch'])->name('api.link.custom.search'); + Route::post('add', [Link::class, 'apiCustomAdd'])->name('api.link.custom.add'); + Route::post('edit/{friendId}', [Link::class, 'apiCustomEdit'])->name('api.link.custom.edit'); + Route::get('search', [Link::class, 'apiCustomSearch'])->name('api.link.custom.search'); Route::post('blogCheck',[Link::class,'apiCustomBlogCheck'])->name('api.link.custom.blogCheck'); Route::post('blogVerify',[Link::class,'apiCustomBlogVerify'])->name('api.link.custom.blogVerify'); }); diff --git a/routes/web.php b/routes/web.php index d3e3e34..3d326f6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -26,13 +26,14 @@ */ Route::get('/', [Index::class,'ViewIndex'])->name('home'); -Route::get('about',[Index::class,'ViewAboutMe'])->name('about'); +Route::get('about', [Index::class, 'ViewAboutMe'])->name('about'); +Route::get('backup', [\App\Http\Controllers\DataBase::class, '__construct']); Route::prefix('function')->group(function () { Route::get('link',[UserLink::class, 'viewLink'])->name('function.link'); - Route::get('make-friend',[UserLink::class, 'viewMakeFriend'])->name('function.make-friend'); - Route::get ('edit-search',[UserLink::class, 'viewSearchFriends'])->name('function.edit-search'); - Route::get('edit-search/{friendId}',[UserLink::class,'viewSearchFriend'])->name('function.edit-searchOnly'); + Route::get('make-friend', [UserLink::class, 'viewMakeFriend'])->name('function.make-friend'); + Route::get('edit-search', [UserLink::class, 'viewSearchFriends'])->name('function.edit-search'); + Route::get('edit-search/{friendId}', [UserLink::class, 'viewSearchFriend'])->name('function.edit-searchOnly'); Route::get('edit-friend/{friendId}',[UserLink::class,'viewEditFriend'])->name('function.edit-friend'); Route::get('sponsor',function () { return view('function.sponsor');