Browse Source

キントーンからのアクセス受け基盤を整備

master
sosuke.iwabuchi 2 years ago
parent
commit
ef91d8a10a
9 changed files with 86 additions and 41 deletions
  1. +6
    -34
      app/Http/Controllers/Web/Email/EmailSendController.php
  2. +0
    -2
      app/Http/Controllers/Web/Email/EmailSendParam.php
  3. +26
    -0
      app/Http/Controllers/Web/FromKintoneController.php
  4. +3
    -2
      app/Http/Controllers/Web/WebController.php
  5. +3
    -1
      app/Http/Kernel.php
  6. +34
    -0
      app/Http/Middleware/FromKintoneMiddleware.php
  7. +4
    -0
      app/Util/LoggingUtil.php
  8. +10
    -0
      config/kintone.php
  9. +0
    -2
      config/mail.php

+ 6
- 34
app/Http/Controllers/Web/Email/EmailSendController.php View File

@@ -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()
{ {


+ 0
- 2
app/Http/Controllers/Web/Email/EmailSendParam.php View File

@@ -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),
]; ];


+ 26
- 0
app/Http/Controllers/Web/FromKintoneController.php View File

@@ -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'
]);
}
}

+ 3
- 2
app/Http/Controllers/Web/WebController.php View File

@@ -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);


+ 3
- 1
app/Http/Kernel.php View File

@@ -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,
]; ];
} }

+ 34
- 0
app/Http/Middleware/FromKintoneMiddleware.php View File

@@ -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);
}
}

+ 4
- 0
app/Util/LoggingUtil.php View File

@@ -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));


+ 10
- 0
config/kintone.php View File

@@ -15,6 +15,16 @@ return [


'host' => env("KINTONE_HOST", ""), 'host' => env("KINTONE_HOST", ""),


/*
|--------------------------------------------------------------------------
| ホスト定義
|--------------------------------------------------------------------------
|
| キントーンAPIのホストを定義
*/

'fromKintoneToken' => env("KINTONE_TOKEN", ""),

/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| アプリケーション定義 | アプリケーション定義


+ 0
- 2
config/mail.php View File

@@ -125,6 +125,4 @@ return [


'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT'), 'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT'),


'emailSendOrderToken' => env('MAIL_SEND_ORDER_TOKEN'),

]; ];

Loading…
Cancel
Save