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.

85 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. use Illuminate\Support\Collection;
  10. class PasswordSettingStartController extends WebController
  11. {
  12. public function name(): string
  13. {
  14. return "パスワード設定開始";
  15. }
  16. public function description(): string
  17. {
  18. return "パスワード設定手続きを開始する";
  19. }
  20. public function __construct(protected PasswordSettingStartParam $param, private PasswordSettingManager $manager)
  21. {
  22. parent::__construct();
  23. }
  24. protected function run(Request $request): JsonResponse
  25. {
  26. $param = $this->param;
  27. $access = Customer::getAccess();
  28. $query = Customer::getQuery()->where(Customer::FIELD_EMAIL, $param->email)
  29. ->whereIn(Customer::FIELD_ALLOW_ACCESS_MY_PAGE, ["許可"]);
  30. $customers = $access->all($query);
  31. if ($customers->isEmpty()) {
  32. // 無効なユーザだが、セキュリティ対策として成功と見せかける
  33. return $this->successResponse();
  34. }
  35. // トークン生成
  36. $this->tokenGenerate($customers);
  37. return $this->successResponse();
  38. }
  39. /**
  40. * Undocumented function
  41. *
  42. * @param Collection<int,Customer> $customers
  43. * @return void
  44. */
  45. private function tokenGenerate(Collection $customers)
  46. {
  47. foreach ($customers as $customer) {
  48. $kintoneId = $customer->getRecordId();
  49. $user = User::whereKintoneId($kintoneId)
  50. ->first();
  51. if ($user instanceof User) {
  52. } else {
  53. // 新規の場合はユーザーを追加する
  54. $user = new User();
  55. $user->email = $customer->email;
  56. $user->kintone_id = $customer->getRecordId();
  57. $user->kintone_customer_code = $customer->getNumber(Customer::FIELD_CUSTOMER_CODE);
  58. $user->save();
  59. }
  60. // トークン生成
  61. $this->manager->generate($user);
  62. }
  63. }
  64. }