Browse Source

add email whitelist config

Tokumeikoi 5 years ago
parent
commit
214fb2a2bf

+ 2 - 1
app/Http/Controllers/Admin/ConfigController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin;
 
 use App\Http\Requests\Admin\ConfigSave;
 use Illuminate\Http\Request;
+use App\Utils\Dict;
 use App\Http\Controllers\Controller;
 
 class ConfigController extends Controller
@@ -30,7 +31,7 @@ class ConfigController extends Controller
                     'try_out_plan_id' => (int)config('v2board.try_out_plan_id', 0),
                     'try_out_hour' => (int)config('v2board.try_out_hour', 1),
                     'email_whitelist_enable' => (int)config('v2board.email_whitelist_enable', 0),
-                    'email_whitelist_suffix' => config('v2board.email_whitelist_suffix')
+                    'email_whitelist_suffix' => config('v2board.email_whitelist_suffix', Dict::EMAIL_WHITELIST_SUFFIX_DEFAULT)
                 ],
                 'pay' => [
                     // alipay

+ 10 - 0
app/Http/Controllers/Passport/AuthController.php

@@ -12,11 +12,20 @@ use App\Models\Plan;
 use App\Models\User;
 use App\Models\InviteCode;
 use App\Utils\Helper;
+use App\Utils\Dict;
 
 class AuthController extends Controller
 {
     public function register(AuthRegister $request)
     {
+        if ((int)config('v2board.email_suffix_enable', 0)) {
+            if (!Helper::emailSuffixVerify(
+                $request->input('email'),
+                config('v2board.email_suffix_whitelist', Dict::EMAIL_WHITELIST_SUFFIX_DEFAULT))
+            ) {
+                abort(500, '邮箱后缀不处于白名单中');
+            }
+        }
         if ((int)config('v2board.stop_register', 0)) {
             abort(500, '本站已关闭注册');
         }
@@ -189,4 +198,5 @@ class AuthController extends Controller
             'data' => true
         ]);
     }
+
 }

+ 8 - 0
app/Http/Controllers/Passport/CommController.php

@@ -11,6 +11,7 @@ use App\Utils\Helper;
 use Illuminate\Support\Facades\Cache;
 use App\Jobs\SendEmail;
 use App\Models\InviteCode;
+use App\Utils\Dict;
 
 class CommController extends Controller
 {
@@ -58,6 +59,13 @@ class CommController extends Controller
         ]);
     }
 
+    public function getEmailSuffix()
+    {
+        return response([
+            'data' => config('v2board.email_suffix_whitelist', Dict::EMAIL_WHITELIST_SUFFIX_DEFAULT)
+        ]);
+    }
+
     public function pv(Request $request)
     {
         $inviteCode = InviteCode::where('code', $request->input('invite_code'))->first();

+ 1 - 0
app/Http/Routes/PassportRoute.php

@@ -19,6 +19,7 @@ class PassportRoute
             // Comm
             $router->get ('/comm/config', 'Passport\\CommController@config');
             $router->post('/comm/sendEmailVerify', 'Passport\\CommController@sendEmailVerify');
+            $router->get ('/comm/getEmailSuffix', 'Passport\\CommController@getEmailSuffix');
         });
     }
 }

+ 18 - 0
app/Utils/Dict.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Utils;
+
+class Dict
+{
+    CONST EMAIL_WHITELIST_SUFFIX_DEFAULT = [
+        'gmail.com',
+        'qq.com',
+        '163.com',
+        'yahoo.com',
+        'sina.com',
+        '126.com',
+        'outlook.com',
+        'yeah.net',
+        'foxmail.com'
+    ];
+}

+ 8 - 0
app/Utils/Helper.php

@@ -84,4 +84,12 @@ class Helper
             default: return password_verify($password, $hash);
         }
     }
+
+    public static function emailSuffixVerify($email, $suffixs)
+    {
+        $suffix = preg_split('@', $email)[1];
+        if (!$suffix) return false;
+        if (!in_array($suffix, $suffixs)) return false;
+        return true;
+    }
 }