| @@ -9,19 +9,20 @@ use App\Email\Members\EntryPaymentComplete; | |||||
| use App\Email\Members\TerminateOrderApprove; | use App\Email\Members\TerminateOrderApprove; | ||||
| use App\Email\Members\UserInfoUpdateOrderApprove; | use App\Email\Members\UserInfoUpdateOrderApprove; | ||||
| use App\Email\Members\VehicleInfoUpdateOrderApprove; | use App\Email\Members\VehicleInfoUpdateOrderApprove; | ||||
| use App\Http\Controllers\Web\WebController; | |||||
| use App\Http\Controllers\Web\FromKintoneController; | |||||
| use App\Kintone\Models\SeasonTicketContract; | use App\Kintone\Models\SeasonTicketContract; | ||||
| use App\Kintone\Models\SeasonTicketContractEntry; | use App\Kintone\Models\SeasonTicketContractEntry; | ||||
| use App\Kintone\Models\TerminateApplication; | use App\Kintone\Models\TerminateApplication; | ||||
| use App\Kintone\Models\UserInfoUpdateApplication; | use App\Kintone\Models\UserInfoUpdateApplication; | ||||
| use App\Kintone\Models\VehicleInfoUpdateApplication; | use App\Kintone\Models\VehicleInfoUpdateApplication; | ||||
| use App\Logic\EmailManager; | use App\Logic\EmailManager; | ||||
| use App\Util\LoggingUtil; | |||||
| use Exception; | use Exception; | ||||
| use Illuminate\Http\JsonResponse; | use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Http\Request; | use Illuminate\Http\Request; | ||||
| use LogicException; | use LogicException; | ||||
| class EmailSendController extends WebController | |||||
| class EmailSendController extends FromKintoneController | |||||
| { | { | ||||
| private BaseEmailer|null $email = null; | private BaseEmailer|null $email = null; | ||||
| @@ -46,9 +47,6 @@ class EmailSendController extends WebController | |||||
| protected function run(Request $request): JsonResponse | protected function run(Request $request): JsonResponse | ||||
| { | { | ||||
| try { | try { | ||||
| // トークンチェック | |||||
| $this->checkToken(); | |||||
| // メール作成 | // メール作成 | ||||
| $this->getEmail(); | $this->getEmail(); | ||||
| @@ -58,39 +56,13 @@ class EmailSendController extends WebController | |||||
| } | } | ||||
| $this->emailManager->confirm(); | $this->emailManager->confirm(); | ||||
| } catch (Exception $e) { | } catch (Exception $e) { | ||||
| logger($e->getMessage()); | |||||
| logger($e->getFile()); | |||||
| logger($e->getLine()); | |||||
| return $this->failed(); | |||||
| LoggingUtil::debugException($e); | |||||
| return $this->failedResponse(); | |||||
| } | } | ||||
| return $this->success(); | |||||
| } | |||||
| private function success() | |||||
| { | |||||
| return response()->json([ | |||||
| 'result' => 'SUCCESS' | |||||
| ]); | |||||
| } | |||||
| private function failed() | |||||
| { | |||||
| return response()->json([ | |||||
| 'result' => 'FAILED' | |||||
| ]); | |||||
| return $this->successResponse(); | |||||
| } | } | ||||
| private function checkToken() | |||||
| { | |||||
| $currectToken = config('mail.emailSendOrderToken'); | |||||
| if ($this->param->token !== $currectToken) { | |||||
| logs()->warning("Email送信依頼トークン不正"); | |||||
| throw new Exception("Email送信依頼トークン不正"); | |||||
| } | |||||
| } | |||||
| private function getEmail() | private function getEmail() | ||||
| { | { | ||||
| @@ -8,7 +8,6 @@ use Illuminate\Validation\Rules\Enum; | |||||
| /** | /** | ||||
| * @property Email emailId | * @property Email emailId | ||||
| * @property ?string token | |||||
| * @property ?string seasonTicketContractEntryRecordNo | * @property ?string seasonTicketContractEntryRecordNo | ||||
| * @property ?string applicationNo | * @property ?string applicationNo | ||||
| */ | */ | ||||
| @@ -18,7 +17,6 @@ class EmailSendParam extends BaseParam | |||||
| { | { | ||||
| return [ | return [ | ||||
| 'email_id' => $this->enum([new Enum(Email::class)]), | 'email_id' => $this->enum([new Enum(Email::class)]), | ||||
| 'token' => $this->str(true), | |||||
| 'season_ticket_contract_entry_record_no' => $this->str(true), | 'season_ticket_contract_entry_record_no' => $this->str(true), | ||||
| 'application_no' => $this->str(true), | 'application_no' => $this->str(true), | ||||
| ]; | ]; | ||||
| @@ -0,0 +1,26 @@ | |||||
| <?php | |||||
| namespace App\Http\Controllers\Web; | |||||
| use App\Codes\HTTPResultCode as ResultCode; | |||||
| abstract class FromKintoneController extends WebController | |||||
| { | |||||
| public function __construct() | |||||
| { | |||||
| parent::__construct(); | |||||
| $this->middleware('formKintone'); | |||||
| } | |||||
| protected function makeResponse() | |||||
| { | |||||
| if ($this->resultCode === ResultCode::SECCESS) { | |||||
| return response()->json([ | |||||
| 'result' => 'SUCCESS' | |||||
| ]); | |||||
| } | |||||
| return response()->json([ | |||||
| 'result' => 'FAILED' | |||||
| ]); | |||||
| } | |||||
| } | |||||
| @@ -84,7 +84,7 @@ abstract class WebController extends BaseController | |||||
| * | * | ||||
| * @var ResultCode|null | * @var ResultCode|null | ||||
| */ | */ | ||||
| private ResultCode|null $resultCode = ResultCode::SECCESS; | |||||
| protected ResultCode|null $resultCode = ResultCode::SECCESS; | |||||
| public function __construct() | public function __construct() | ||||
| { | { | ||||
| @@ -160,6 +160,7 @@ abstract class WebController extends BaseController | |||||
| $validator->validate(); | $validator->validate(); | ||||
| } catch (ValidationException $e) { | } catch (ValidationException $e) { | ||||
| logger("validate error", ['errors' => $e->errors(), 'request' => $request->all(), 'path' => $request->path()]); | logger("validate error", ['errors' => $e->errors(), 'request' => $request->all(), 'path' => $request->path()]); | ||||
| logger($request->toArray()); | |||||
| return $this->validateErrorResponse($e); | return $this->validateErrorResponse($e); | ||||
| } | } | ||||
| @@ -277,7 +278,7 @@ abstract class WebController extends BaseController | |||||
| ->makeResponse(); | ->makeResponse(); | ||||
| } | } | ||||
| private function makeResponse() | |||||
| protected function makeResponse() | |||||
| { | { | ||||
| if ($this->resultCode === null) { | if ($this->resultCode === null) { | ||||
| abort(403); | abort(403); | ||||
| @@ -40,7 +40,7 @@ class Kernel extends HttpKernel | |||||
| 'api' => [ | 'api' => [ | ||||
| // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, | // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, | ||||
| \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', | |||||
| \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api', | |||||
| \Illuminate\Routing\Middleware\SubstituteBindings::class, | \Illuminate\Routing\Middleware\SubstituteBindings::class, | ||||
| ], | ], | ||||
| ]; | ]; | ||||
| @@ -63,5 +63,7 @@ class Kernel extends HttpKernel | |||||
| 'signed' => \App\Http\Middleware\ValidateSignature::class, | 'signed' => \App\Http\Middleware\ValidateSignature::class, | ||||
| 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, | ||||
| 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, | 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, | ||||
| 'formKintone' => \App\Http\Middleware\FromKintoneMiddleware::class, | |||||
| ]; | ]; | ||||
| } | } | ||||
| @@ -0,0 +1,34 @@ | |||||
| <?php | |||||
| namespace App\Http\Middleware; | |||||
| use Closure; | |||||
| use Exception; | |||||
| use Illuminate\Http\Request; | |||||
| use Symfony\Component\HttpFoundation\Response; | |||||
| class FromKintoneMiddleware | |||||
| { | |||||
| /** | |||||
| * Handle an incoming request. | |||||
| * | |||||
| * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next | |||||
| */ | |||||
| public function handle(Request $request, Closure $next): Response | |||||
| { | |||||
| $currectToken = config('kintone.fromKintoneToken'); | |||||
| if ($request['token'] !== $currectToken) { | |||||
| if ($request->wantsJson()) { | |||||
| return response()->json([ | |||||
| 'RESULT' => "UNAUTHORIZED", | |||||
| ]); | |||||
| } else { | |||||
| abort(403); | |||||
| } | |||||
| } | |||||
| return $next($request); | |||||
| } | |||||
| } | |||||
| @@ -8,6 +8,10 @@ use Illuminate\Support\Facades\Log; | |||||
| class LoggingUtil | class LoggingUtil | ||||
| { | { | ||||
| public static function debugException(Exception $e, string|array $messages = []) | |||||
| { | |||||
| Log::debug(self::getExceptionContents($e, $messages)); | |||||
| } | |||||
| public static function infoException(Exception $e, string|array $messages = []) | public static function infoException(Exception $e, string|array $messages = []) | ||||
| { | { | ||||
| Log::error(self::getExceptionContents($e, $messages)); | Log::error(self::getExceptionContents($e, $messages)); | ||||
| @@ -15,6 +15,16 @@ return [ | |||||
| 'host' => env("KINTONE_HOST", ""), | 'host' => env("KINTONE_HOST", ""), | ||||
| /* | |||||
| |-------------------------------------------------------------------------- | |||||
| | ホスト定義 | |||||
| |-------------------------------------------------------------------------- | |||||
| | | |||||
| | キントーンAPIのホストを定義 | |||||
| */ | |||||
| 'fromKintoneToken' => env("KINTONE_TOKEN", ""), | |||||
| /* | /* | ||||
| |-------------------------------------------------------------------------- | |-------------------------------------------------------------------------- | ||||
| | アプリケーション定義 | | アプリケーション定義 | ||||
| @@ -125,6 +125,4 @@ return [ | |||||
| 'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT'), | 'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT'), | ||||
| 'emailSendOrderToken' => env('MAIL_SEND_ORDER_TOKEN'), | |||||
| ]; | ]; | ||||