| @@ -9,19 +9,20 @@ use App\Email\Members\EntryPaymentComplete; | |||
| use App\Email\Members\TerminateOrderApprove; | |||
| use App\Email\Members\UserInfoUpdateOrderApprove; | |||
| 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\SeasonTicketContractEntry; | |||
| use App\Kintone\Models\TerminateApplication; | |||
| use App\Kintone\Models\UserInfoUpdateApplication; | |||
| use App\Kintone\Models\VehicleInfoUpdateApplication; | |||
| use App\Logic\EmailManager; | |||
| use App\Util\LoggingUtil; | |||
| use Exception; | |||
| use Illuminate\Http\JsonResponse; | |||
| use Illuminate\Http\Request; | |||
| use LogicException; | |||
| class EmailSendController extends WebController | |||
| class EmailSendController extends FromKintoneController | |||
| { | |||
| private BaseEmailer|null $email = null; | |||
| @@ -46,9 +47,6 @@ class EmailSendController extends WebController | |||
| protected function run(Request $request): JsonResponse | |||
| { | |||
| try { | |||
| // トークンチェック | |||
| $this->checkToken(); | |||
| // メール作成 | |||
| $this->getEmail(); | |||
| @@ -58,39 +56,13 @@ class EmailSendController extends WebController | |||
| } | |||
| $this->emailManager->confirm(); | |||
| } 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() | |||
| { | |||
| @@ -8,7 +8,6 @@ use Illuminate\Validation\Rules\Enum; | |||
| /** | |||
| * @property Email emailId | |||
| * @property ?string token | |||
| * @property ?string seasonTicketContractEntryRecordNo | |||
| * @property ?string applicationNo | |||
| */ | |||
| @@ -18,7 +17,6 @@ class EmailSendParam extends BaseParam | |||
| { | |||
| return [ | |||
| 'email_id' => $this->enum([new Enum(Email::class)]), | |||
| 'token' => $this->str(true), | |||
| 'season_ticket_contract_entry_record_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 | |||
| */ | |||
| private ResultCode|null $resultCode = ResultCode::SECCESS; | |||
| protected ResultCode|null $resultCode = ResultCode::SECCESS; | |||
| public function __construct() | |||
| { | |||
| @@ -160,6 +160,7 @@ abstract class WebController extends BaseController | |||
| $validator->validate(); | |||
| } catch (ValidationException $e) { | |||
| logger("validate error", ['errors' => $e->errors(), 'request' => $request->all(), 'path' => $request->path()]); | |||
| logger($request->toArray()); | |||
| return $this->validateErrorResponse($e); | |||
| } | |||
| @@ -277,7 +278,7 @@ abstract class WebController extends BaseController | |||
| ->makeResponse(); | |||
| } | |||
| private function makeResponse() | |||
| protected function makeResponse() | |||
| { | |||
| if ($this->resultCode === null) { | |||
| abort(403); | |||
| @@ -40,7 +40,7 @@ class Kernel extends HttpKernel | |||
| 'api' => [ | |||
| // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, | |||
| \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', | |||
| \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api', | |||
| \Illuminate\Routing\Middleware\SubstituteBindings::class, | |||
| ], | |||
| ]; | |||
| @@ -63,5 +63,7 @@ class Kernel extends HttpKernel | |||
| 'signed' => \App\Http\Middleware\ValidateSignature::class, | |||
| 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::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 | |||
| { | |||
| public static function debugException(Exception $e, string|array $messages = []) | |||
| { | |||
| Log::debug(self::getExceptionContents($e, $messages)); | |||
| } | |||
| public static function infoException(Exception $e, string|array $messages = []) | |||
| { | |||
| Log::error(self::getExceptionContents($e, $messages)); | |||
| @@ -15,6 +15,16 @@ return [ | |||
| 'host' => env("KINTONE_HOST", ""), | |||
| /* | |||
| |-------------------------------------------------------------------------- | |||
| | ホスト定義 | |||
| |-------------------------------------------------------------------------- | |||
| | | |||
| | キントーンAPIのホストを定義 | |||
| */ | |||
| 'fromKintoneToken' => env("KINTONE_TOKEN", ""), | |||
| /* | |||
| |-------------------------------------------------------------------------- | |||
| | アプリケーション定義 | |||
| @@ -125,6 +125,4 @@ return [ | |||
| 'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT'), | |||
| 'emailSendOrderToken' => env('MAIL_SEND_ORDER_TOKEN'), | |||
| ]; | |||