LoginController.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\AppSession;
  4. use App\Models\CompanyPro;
  5. use App\Models\PotentialPro;
  6. use App\Models\Pro;
  7. use App\Models\ProHrInvitation;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Cookie;
  10. class LoginController extends Controller
  11. {
  12. public function login(Request $request){
  13. return view('login');
  14. }
  15. public function sendSmsAuthToken(Request $request){
  16. $cellNumber = $request->get('cell_number');
  17. $cellNumber = preg_replace("/[^0-9]/", "", $cellNumber);
  18. $request->validate([
  19. 'g-recaptcha-response' => 'required|recaptcha'
  20. ]);
  21. $javaResponse = $this->callJava($request, '/potentialPro/createAndSendSmsAuthToken', [
  22. 'cellNumber'=>$cellNumber
  23. ]);
  24. if(!$javaResponse['success']){
  25. return redirect()->back()->withInput($request->input())->with('message', $javaResponse['message']);
  26. }
  27. Cookie::queue('current_cell_number', $cellNumber, 300);
  28. return redirect()->to(route('confirm-auth-token'));
  29. }
  30. public function resendSmsAuthToken(Request $request){
  31. $cellNumber = $request->cookie('current_cell_number');
  32. $javaResponse = $this->callJava($request, '/potentialPro/createAndSendSmsAuthToken', [
  33. 'cellNumber'=>$cellNumber
  34. ]);
  35. if(!$javaResponse['success']){
  36. return $this->fail($javaResponse['message']);
  37. }
  38. return $this->pass();
  39. }
  40. public function confirmAuthToken(Request $request){
  41. $cellNumber = $request->cookie('current_cell_number');
  42. $maskedCellNumber = str_pad(substr($cellNumber, -4), strlen($cellNumber), '*', STR_PAD_LEFT);
  43. return view('confirm-auth-token',compact('maskedCellNumber'));
  44. }
  45. public function processConfirmAuthToken(Request $request){
  46. $confirmationToken = $request->get('confirmation_token');
  47. $cellNumber = $request->cookie('current_cell_number');
  48. $javaResponse = $this->callJava($request, '/potentialPro/confirmSmsAuthToken', [
  49. 'confirmationToken'=>$confirmationToken,
  50. 'cellNumber' => $cellNumber,
  51. ]);
  52. if(!$javaResponse['success']){
  53. return redirect()->back()->withInput($request->input())->with('message', $javaResponse['message']);
  54. }
  55. Cookie::queue('current_confirmation_token', $confirmationToken, 300);
  56. $potentialPro = PotentialPro::where('cell_number_confirmation_token', $confirmationToken)->first();
  57. //if potential pro -> account-setup
  58. if($potentialPro){
  59. return redirect()->to(route('account-setup'));
  60. }
  61. $existingPro = Pro::where('cell_number', $cellNumber)->first();
  62. $existingProAppSession = AppSession::where('pro_id', $existingPro->id)->where('two_step_sms_auth_token', $confirmationToken)->first();
  63. return redirect()->to(config('stag.authUrl').'/pro_log_in_with_session_key/'.$existingProAppSession->session_key);
  64. }
  65. public function accountSetup(Request $request){
  66. $cellNumber = $request->cookie('current_cell_number');
  67. $token = $request->cookie('current_confirmation_token');
  68. $potentialPro = PotentialPro::where('cell_number_confirmation_token', $token)->first();
  69. if(!$potentialPro){
  70. return redirect()->to(route('login'));
  71. }
  72. return view('account-setup');
  73. }
  74. //submitAccoutnSetup -> setup security questions //create the actual pro and log the pro in without security questions set
  75. public function submitAccountSetup(Request $request){
  76. $request->validate([
  77. 'first_name'=>'required',
  78. 'last_name'=>'required',
  79. 'email_address' => 'required|email',
  80. 'password'=>'required'
  81. ]);
  82. $cellNumber = $request->cookie('current_cell_number');
  83. $token = $request->cookie('current_confirmation_token');
  84. $potentialPro = PotentialPro::where('cell_number_confirmation_token', $token)->get();
  85. if(!$potentialPro){
  86. abort(404, 'Not found');
  87. }
  88. $javaResponse = $this->callJava($request, '/session/proLogInAsPotentialPro', [
  89. 'confirmationToken'=>$token,
  90. 'cellNumber' => $cellNumber,
  91. 'firstName' => $request->get('first_name'),
  92. 'lastName' => $request->get('last_name'),
  93. 'emailAddress' => $request->get('email_address'),
  94. 'password'=>$request->get('password'),
  95. ]);
  96. if(!$javaResponse['success']){
  97. return redirect()->back()->withInput($request->input())->with('message', $javaResponse['message']);
  98. }
  99. $proSessionKey = $javaResponse['data'];
  100. return redirect()->to(config('stag.authUrl').'/pro_log_in_with_session_key/'.$proSessionKey);
  101. }
  102. public function logInWithHrInvitationToken(Request $request, $hrInvitationToken){
  103. //check that token is available
  104. if(!$hrInvitationToken){
  105. return redirect()->to('/');
  106. }
  107. //check that token is valid
  108. $proHrInvitation = ProHrInvitation::where('invitation_token', $hrInvitationToken)->first();
  109. if(!$proHrInvitation || !$proHrInvitation->is_active){
  110. return redirect()->to('/');
  111. }
  112. //send auth token for company pro and return sessionKey and store session key in cookie
  113. $javaResponse = $this->callJava($request, '/potentialPro/createAndSendSmsAuthToken', [
  114. 'cellNumber'=>$proHrInvitation->pro->cell_number
  115. ]);
  116. if(!$javaResponse['success']){
  117. return redirect()->back()->withInput($request->input())->with('message', $javaResponse['message']);
  118. }
  119. Cookie::queue('current_cell_number', $proHrInvitation->pro->cell_number, 300);
  120. return redirect()->to(route('confirm-auth-token'));
  121. }
  122. }