LogInController.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Cookie;
  5. use Laravel\Socialite\Facades\Socialite;
  6. use App\Models\User;
  7. use App\Http\Services\EmailService;
  8. use App\Models\AppSession;
  9. class LogInController extends Controller
  10. {
  11. protected $emailService;
  12. public function __construct(EmailService $emailService)
  13. {
  14. parent::__construct();
  15. $this->emailService = $emailService;
  16. }
  17. public function logIn(Request $request)
  18. {
  19. return view('app.auth.log-in');
  20. }
  21. public function processLogIn(Request $request)
  22. {
  23. $request->validate([
  24. 'email' => 'required|email',
  25. 'password' => 'required|string'
  26. ]);
  27. $userLogInResponse = $this->callJava('/api/auth/logInStandard', [
  28. 'email' => $request->get('email'),
  29. 'password' => $request->get('password')
  30. ], null);
  31. if (!@$userLogInResponse['success']) {
  32. return redirect()->back()->with('error', $userLogInResponse['message'])->withInput($request->all());
  33. }
  34. $sessionKey = $userLogInResponse['data'];
  35. Cookie::queue(config('app.sessionKeyName'), $sessionKey);
  36. return redirect()->to(route('admin.dashboard'));
  37. }
  38. public function processLogOut(Request $request)
  39. {
  40. $sessionKey = Cookie::get(config('app.sessionKeyName'));
  41. $this->callJava('/api/auth/logOut', [], $sessionKey);
  42. Cookie::forget(config('app.sessionKeyName'));
  43. return redirect()->to(route('index'));
  44. }
  45. public function logInWithGoogle(Request $request)
  46. {
  47. return Socialite::driver('google')->redirect();
  48. }
  49. public function processLogInWithGoogle(Request $request)
  50. {
  51. $user = null;
  52. try {
  53. $user = Socialite::driver('google')->user();
  54. } catch (\Exception $ex) {
  55. return redirect()->back()->with('error', 'Unable to complete the process');
  56. }
  57. $userAlreadyExists = User::where('google_login_email', $user['email'])->first();
  58. if(!$userAlreadyExists){
  59. return redirect()->to(route('log-in'))->with('error', 'No such admin account!');
  60. }
  61. if($userAlreadyExists && !$userAlreadyExists->is_super_admin){
  62. return redirect()->to(route('log-in'))->with('error', 'You do not have sufficient priviledges to log in!');
  63. }
  64. $userUidToEnableGoogleLogIn = $request->session()->get('user_uid_to_enable_google_log_in');
  65. if ($userUidToEnableGoogleLogIn) {
  66. $request->session()->forget('user_uid_to_enable_google_log_in');
  67. $enableGoogleLoginResponse = $this->callJava('/api/auth/enableLoginWithGoogle', [
  68. 'googleLoginEmail' => $user['email'],
  69. 'googleDataJson' => json_encode($user)
  70. ], $this->sessionKey);
  71. if (!@$enableGoogleLoginResponse['success']) {
  72. return redirect()->to(route('my-account.log-in-settings'))->with('error', $enableGoogleLoginResponse['message'] ?? 'Enable Google log in failed!');
  73. }
  74. return redirect()->to(route('my-account.log-in-settings'))->with('success', 'Google login has been enabled.');
  75. }else {
  76. $userLogInResponse = $this->callJava('/api/auth/logInWithGoogle', [
  77. 'name' => $user['name'],
  78. 'googleLoginEmail' => $user['email'],
  79. 'detailJson' => json_encode($user),
  80. 'ipAddress' => $request->ip(),
  81. 'userAgent' => $request->header('User-Agent')
  82. ], null);
  83. if (!@$userLogInResponse['success']) {
  84. return redirect()->back()->with('error', $userLogInResponse['message'])->withInput($request->all());
  85. }
  86. $sessionKey = $userLogInResponse['data'];
  87. $appSession = AppSession::where('session_key', $sessionKey)->first();
  88. $newUser = $appSession->user;
  89. if($newUser && !$userAlreadyExists){
  90. }
  91. Cookie::queue(config('app.sessionKeyName'), $sessionKey);
  92. return redirect()->to(route('dashboard'));
  93. }
  94. }
  95. public function logInWithFacebook(Request $request)
  96. {
  97. return Socialite::driver('facebook')->redirect();
  98. }
  99. public function processLogInWithFacebook(Request $request)
  100. {
  101. try {
  102. $user = Socialite::driver('facebook')->user();
  103. } catch (\Exception $ex) {
  104. return redirect()->back()->with('error', 'Unable to complete the process');
  105. }
  106. $userAlreadyExists = User::where('facebook_login_email', $user['email'])->first();
  107. $userUidToEnableFacebookLogIn = $request->session()->get('user_uid_to_enable_facebook_log_in');
  108. if ($userUidToEnableFacebookLogIn) {
  109. $request->session()->forget('user_uid_to_enable_facebook_log_in');
  110. $enableFacebookLoginResponse = $this->callJava('/api/auth/enableLoginWithFacebook', [
  111. 'facebookLoginEmail' => $user['email'],
  112. 'facebookDataJson' => json_encode($user)
  113. ], $this->sessionKey);
  114. if (!@$enableFacebookLoginResponse['success']) {
  115. return redirect()->to(route('my-account.log-in-settings'))->with('error', $enableFacebookLoginResponse['message'] ?? 'Enable Facebook log in failed!');
  116. }
  117. return redirect()->to(route('my-account.log-in-settings'))->with('success', 'Facebook login has been enabled.');
  118. }else {
  119. $userLogInResponse = $this->callJava('/api/auth/logInWithFacebook', [
  120. 'name' => $user['name'],
  121. 'facebookLoginEmail' => $user['email'],
  122. 'detailJson' => json_encode($user),
  123. 'ipAddress' => $request->ip(),
  124. 'userAgent' => $request->header('User-Agent')
  125. ], null);
  126. if (!@$userLogInResponse['success']) {
  127. return redirect()->back()->with('error', $userLogInResponse['message'])->withInput($request->all());
  128. }
  129. $sessionKey = $userLogInResponse['data'];
  130. $appSession = AppSession::where('session_key', $sessionKey)->first();
  131. $newUser = $appSession->user;
  132. if($newUser && !$userAlreadyExists){
  133. }
  134. Cookie::queue(config('app.sessionKeyName'), $sessionKey);
  135. return redirect()->to(route('my-account.index'));
  136. }
  137. }
  138. public function forgotPassword(Request $request)
  139. {
  140. return view('app.auth.forgot-password');
  141. }
  142. public function processForgotPassword(Request $request)
  143. {
  144. $request->validate([
  145. 'email' => 'required|email'
  146. ]);
  147. $email = $request->get('email');
  148. //call java
  149. $this->callJava('/api/auth/requestPasswordReset', [
  150. 'emailAddress' => $email
  151. ], null);
  152. $user = User::where('email', $email)->first();
  153. if ($user) {
  154. $this->emailService->sendUserPasswordResetEmail($user);
  155. }
  156. return redirect()->to(route('forgot-password-success'));
  157. }
  158. public function forgotPasswordSuccess(Request $request)
  159. {
  160. return view('app.auth.forgot-password-success');
  161. }
  162. public function resetPassword(Request $request, $passwordResetToken)
  163. {
  164. return view('app.auth.reset-password', compact('passwordResetToken'));
  165. }
  166. public function processResetPassword(Request $request)
  167. {
  168. $request->validate([
  169. 'passwordResetToken' => 'required',
  170. 'newPassword' => 'required',
  171. 'newPasswordConfirmation' => 'required'
  172. ]);
  173. //get credentials
  174. $passwordResetToken = $request->get('passwordResetToken');
  175. $newPassword = $request->get('newPassword');
  176. $newPasswordConfirmation = $request->get('newPasswordConfirmation');
  177. $user = User::where('password_reset_token', $passwordResetToken)->first();
  178. if(!$user) return redirect()->back()->with('error', 'Invalid token');
  179. //call java
  180. $resetPasswordResponse = $this->callJava('/api/auth/resetPassword', [
  181. 'emailAddress' => $user->email,
  182. 'passwordResetToken' => $passwordResetToken,
  183. 'newPassword' => $newPassword,
  184. 'confirmNewPassword' => $newPasswordConfirmation,
  185. ], null);
  186. if (!@$resetPasswordResponse['success']) {
  187. return redirect()->back()->with('error', $resetPasswordResponse['message'])->withInput($request->all());
  188. }
  189. return redirect()->to(route('log-in'))->with('success', "Your password has been updated.");
  190. }
  191. }