AppSessionController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Lib\Backend;
  4. use App\Models\Pro;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Cookie;
  7. use Illuminate\Support\Facades\Http;
  8. class AppSessionController extends Controller
  9. {
  10. public function confirmSmsAuthToken(Request $request)
  11. {
  12. return view('confirm_sms_auth_token');
  13. }
  14. public function setPassword(Request $request)
  15. {
  16. return view('set_password');
  17. }
  18. public function setSecurityQuestions(Request $request)
  19. {
  20. return view('set_security_questions');
  21. }
  22. public function postConfirmSmsAuthToken(Request $request) {
  23. try {
  24. $url = env('BACKEND_URL', 'http://localhost:8080') . '/api/session/confirmSmsAuthToken';
  25. $data = [
  26. 'cellNumber' => $request->input('cellNumber'),
  27. 'token' => $request->input('token'),
  28. ];
  29. $response = Http::asForm()
  30. ->withHeaders(['sessionKey'=>$request->cookie('sessionKey')])
  31. ->post($url, $data)
  32. ->json();
  33. if(!isset($response['success']) || !$response['success']){
  34. $message = 'API error';
  35. if(isset($response['error'])) {
  36. $message = $response['error'];
  37. if(isset($response['path'])) $message .= ': ' . $response['path'];
  38. }
  39. else if(isset($response['message'])) $message = $response['message'];
  40. return redirect('/confirm_sms_auth_token')
  41. ->withInput()
  42. ->with('message', $message);
  43. }
  44. return redirect('/');
  45. } catch (\Exception $e) {
  46. return redirect()->back()->with('message', $e->getMessage());
  47. }
  48. }
  49. public function postSetPassword(Request $request) {
  50. try {
  51. $url = env('BACKEND_URL', 'http://localhost:8080') . '/api/pro/selfPutPassword';
  52. $data = [
  53. 'newPassword' => $request->input('newPassword'),
  54. 'newPasswordConfirmation' => $request->input('newPasswordConfirmation'),
  55. ];
  56. $response = Http::asForm()
  57. ->withHeaders(['sessionKey'=>$request->cookie('sessionKey')])
  58. ->post($url, $data)
  59. ->json();
  60. if(!isset($response['success']) || !$response['success']){
  61. $message = 'API error';
  62. if(isset($response['error'])) {
  63. $message = $response['error'];
  64. if(isset($response['path'])) $message .= ': ' . $response['path'];
  65. }
  66. else if(isset($response['message'])) $message = $response['message'];
  67. return redirect('/set_password')
  68. ->withInput()
  69. ->with('message', $message);
  70. }
  71. return redirect('/');
  72. } catch (\Exception $e) {
  73. return redirect()->back()->with('message', $e->getMessage());
  74. }
  75. }
  76. public function postSetSecurityQuestions(Request $request) {
  77. try {
  78. $url = env('BACKEND_URL', 'http://localhost:8080') . '/api/pro/selfPutSecurityQuestions';
  79. $data = [
  80. 'securityQuestion1' => $request->input('securityQuestion1'),
  81. 'securityAnswer1' => $request->input('securityAnswer1'),
  82. 'securityQuestion2' => $request->input('securityQuestion2'),
  83. 'securityAnswer2' => $request->input('securityAnswer2'),
  84. ];
  85. $response = Http::asForm()
  86. ->withHeaders(['sessionKey'=>$request->cookie('sessionKey')])
  87. ->post($url, $data)
  88. ->json();
  89. if(!isset($response['success']) || !$response['success']){
  90. $message = 'API error';
  91. if(isset($response['error'])) {
  92. $message = $response['error'];
  93. if(isset($response['path'])) $message .= ': ' . $response['path'];
  94. }
  95. else if(isset($response['message'])) $message = $response['message'];
  96. return redirect('/set_password')
  97. ->withInput()
  98. ->with('message', $message);
  99. }
  100. return redirect('/');
  101. } catch (\Exception $e) {
  102. return redirect()->back()->with('message', $e->getMessage());
  103. }
  104. }
  105. public function showRequestPasswordReset(Request $request)
  106. {
  107. return view('request_password_reset');
  108. }
  109. public function processRequestPasswordReset(Request $request)
  110. {
  111. try {
  112. $url = env('BACKEND_URL', 'http://localhost:8080') . '/api/pro/requestPasswordReset';
  113. $data = [
  114. 'cellNumber' => $request->input('cellNumber'),
  115. ];
  116. $response = Http::asForm()
  117. ->post($url, $data)
  118. ->json();
  119. if(!isset($response['success']) || !$response['success']){
  120. $message = 'API error';
  121. if(isset($response['error'])) {
  122. $message = $response['error'];
  123. if(isset($response['path'])) $message .= ': ' . $response['path'];
  124. }
  125. else if(isset($response['message'])) $message = $response['message'];
  126. return redirect('/request_password_reset')
  127. ->withInput()
  128. ->with('message', $message);
  129. }
  130. // load pro and set security questions in the session
  131. $guestPro = Pro::where('cell_number', $request->input('cellNumber'))->first();
  132. $request->session()->put('sq1', $guestPro->security_question_1);
  133. $request->session()->put('sq2', $guestPro->security_question_2);
  134. return redirect('/self_reset_password');
  135. } catch (\Exception $e) {
  136. return redirect()->back()->with('message', $e->getMessage());
  137. }
  138. }
  139. public function showSelfResetPassword(Request $request)
  140. {
  141. return view('self_reset_password');
  142. }
  143. public function processSelfResetPassword(Request $request)
  144. {
  145. try {
  146. $url = env('BACKEND_URL', 'http://localhost:8080') . '/api/pro/selfResetPassword';
  147. $data = [
  148. 'cellNumber' => $request->input('cellNumber'),
  149. 'passwordResetToken' => $request->input('passwordResetToken'),
  150. 'securityQuestionAnswer1' => $request->input('securityQuestionAnswer1'),
  151. 'securityQuestionAnswer2' => $request->input('securityQuestionAnswer2'),
  152. 'password' => $request->input('password'),
  153. 'passwordConfirmation' => $request->input('passwordConfirmation'),
  154. ];
  155. $response = Http::asForm()
  156. ->post($url, $data)
  157. ->json();
  158. if(!isset($response['success']) || !$response['success']){
  159. $message = 'API error';
  160. if(isset($response['error'])) {
  161. $message = $response['error'];
  162. if(isset($response['path'])) $message .= ': ' . $response['path'];
  163. }
  164. else if(isset($response['message'])) $message = $response['message'];
  165. return redirect('/self_reset_password')
  166. ->withInput()
  167. ->with('message', $message);
  168. }
  169. $request->session()->remove('sq1');
  170. $request->session()->remove('sq2');
  171. return redirect('/login');
  172. } catch (\Exception $e) {
  173. return redirect()->back()->with('message', $e->getMessage());
  174. }
  175. }
  176. public function proLogIn(){
  177. return view('public.pro-log-in');
  178. }
  179. public function processProLogOut(Request $request){
  180. $logOutUrl = env('BACKEND_URL', 'http://localhost:8080') . '/api/session/logOut';
  181. $response = Http::asForm()->withHeaders(['sessionKey'=>$request->cookie('sessionKey')])->post($logOutUrl)->json();
  182. if(!$response['success']){
  183. return back()->with("message", $response['message']);
  184. }
  185. Cookie::queue(Cookie::forget('sessionKey'));
  186. return redirect(route('pro-request-sms-login-token'));
  187. }
  188. public function login(Request $request)
  189. {
  190. $api = new Backend();
  191. try {
  192. $apiResponse = $api->post('session/proLogInWithPassword', [
  193. 'cellNumber' => $request->post('cellNumber'),
  194. 'password' => $request->post('password')
  195. ]);
  196. $data = json_decode($apiResponse->getContents());
  197. if (!property_exists($data, 'success') || !$data->success) {
  198. return back()->with('message', 'Invalid login credentials.')
  199. ->withInput($request->input());
  200. }
  201. Cookie::queue('sessionKey', $data->data->sessionKey);
  202. return redirect('/confirm_sms_auth_token');
  203. } catch (\Exception $e) {
  204. return redirect()->back()->with('message', $e->getMessage());
  205. }
  206. }
  207. public function postToAPI(Request $request) {
  208. session()->remove('message');
  209. // call java api
  210. $data = [];
  211. $fields = $request->all();
  212. foreach ($fields as $key => $value) {
  213. if($key[0] !== '_') {
  214. $data[$key] = $value;
  215. }
  216. }
  217. if(!isset($data['uid']) && isset($fields['_uid'])) {
  218. $data['uid'] = $fields['_uid'];
  219. }
  220. $url = env('BACKEND_URL', 'http://localhost:8080') . $request->input('_api');
  221. $file = $request->file('file');
  222. if($file) {
  223. $localFile = $file->store("storage/uploads");
  224. $stream = fopen(storage_path("app/" . $localFile), 'r');
  225. $response = Http::asMultipart()
  226. ->withHeaders(['sessionKey'=>$request->cookie('sessionKey')])
  227. ->attach('file', $stream, $file->getClientOriginalName())
  228. ->post($url, $data)
  229. ->json();
  230. fclose($stream);
  231. }
  232. else {
  233. $response = Http::asForm()
  234. ->withHeaders(['sessionKey'=>$request->cookie('sessionKey')])
  235. ->post($url, $data)
  236. ->json();
  237. }
  238. if(!isset($response['success']) || !$response['success']){
  239. $message = 'API error';
  240. if(isset($response['error'])) {
  241. $message = $response['error'];
  242. if(isset($response['path'])) $message .= ': ' . $response['path'];
  243. }
  244. else if(isset($response['message'])) $message = $response['message'];
  245. return redirect($request->input('_return'))
  246. ->withInput()
  247. ->with('message', $message);
  248. }
  249. return redirect($request->input('_success'));
  250. }
  251. public function postToAPIAjax(Request $request) {
  252. session()->remove('message');
  253. // call java api
  254. $data = [];
  255. $fields = $request->all();
  256. foreach ($fields as $key => $value) {
  257. if($key[0] !== '_') {
  258. $data[$key] = $value;
  259. }
  260. }
  261. if(!isset($data['uid']) && isset($fields['_uid'])) {
  262. $data['uid'] = $fields['_uid'];
  263. }
  264. $url = env('BACKEND_URL', 'http://localhost:8080') . $request->input('_api');
  265. // dd($url);
  266. $response = Http::asForm()
  267. ->withHeaders(['sessionKey'=>$request->cookie('sessionKey')])
  268. ->post($url, $data)
  269. ->json();
  270. // dd($response);
  271. return response()->json($response);
  272. }
  273. }