You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.2KB

  1. <?php
  2. namespace App\Http\Controllers\Web\Auth;
  3. use App\Http\Controllers\Web\WebController;
  4. use App\Kintone\Models\Customer;
  5. use App\Logic\PasswordSettingManager;
  6. use App\Models\User;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. class PasswordSettingStartController extends WebController
  10. {
  11. public function name(): string
  12. {
  13. return "パスワード設定開始";
  14. }
  15. public function description(): string
  16. {
  17. return "パスワード設定手続きを開始する";
  18. }
  19. public function __construct(protected PasswordSettingStartParam $param, private PasswordSettingManager $manager)
  20. {
  21. parent::__construct();
  22. }
  23. protected function run(Request $request): JsonResponse
  24. {
  25. $param = $this->param;
  26. $access = Customer::getAccess();
  27. $query = Customer::getQuery()->where(Customer::FIELD_EMAIL, $param->email);
  28. $customer = $access->some($query);
  29. if ($customer->count() !== 1) {
  30. // 無効なユーザだが、セキュリティ対策として成功と見せかける
  31. return $this->successResponse();
  32. }
  33. $customer = $customer->first();
  34. $kintoneId = $customer->getRecordId();
  35. $user = User::whereKintoneId($kintoneId)
  36. ->first();
  37. if ($user instanceof User) {
  38. //データ同期
  39. if ($user->email !== $param->email) {
  40. $user->email = $param->email;
  41. $user->save();
  42. }
  43. if ($user->kintone_customer_code !== $customer->getNumber(Customer::FIELD_CUSTOMER_CODE)) {
  44. $user->kintone_customer_code = $customer->getNumber(Customer::FIELD_CUSTOMER_CODE);
  45. $user->save();
  46. }
  47. } else {
  48. // 新規の場合はユーザーを追加する
  49. $user = new User();
  50. $user->email = $param->email;
  51. $user->kintone_id = $customer->getRecordId();
  52. $user->kintone_customer_code = $customer->getNumber(Customer::FIELD_CUSTOMER_CODE);
  53. $user->save();
  54. }
  55. // トークン生成
  56. $this->manager->generate($user);
  57. return $this->successResponse();
  58. }
  59. }