Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @param Request $request
- * @return JsonResponse|null
- * @throws ValidationException
- */
- public function requestSms(Request $request): ?JsonResponse
- {
- $data = $this->validate($request, [
- 'phone' => 'required|string',
- 'device' => 'required|string'
- ]);
- if ($this->hasTooManyLoginAttempts($request)) {
- $this->fireLockoutEvent($request);
- $this->sendLockoutResponse($request);
- }
- /**
- * @var PhoneVerification $phoneVerification
- */
- $phoneVerification = PhoneVerification::query()
- ->where('valid_until', '>', now())
- ->where('phone', $data['phone'])
- ->first();
- if($phoneVerification == null){
- $phoneVerification = PhoneVerification::query()
- ->create([
- 'phone' => $data['phone'],
- 'verification_code' => mt_rand(1000, 9999) . '',
- 'last_request_ip' => AuthUtils::getRealIpAddr(),
- 'last_request_device' => $data['device'],
- 'last_request_at' => now(),
- 'valid_until' => now()->addDay()
- ]);
- }
- if ($phoneVerification->next_request_at == null || $phoneVerification->next_request_at->isBefore(now())) {
- //can send SMS
- if ($phoneVerification->request_count == 0) {
- $phoneVerification->next_request_at = now()->addMinutes(5);
- }
- else if ($phoneVerification->request_count == 1) {
- $phoneVerification->next_request_at = now()->addMinutes(30);
- } else if ($phoneVerification->request_count == 2) {
- $phoneVerification->next_request_at = now()->addHour();
- } else if ($phoneVerification->request_count == 3) {
- $phoneVerification->next_request_at = now()->addHours(6);
- } else if ($phoneVerification->request_count == 4) {
- $phoneVerification->next_request_at = now()->addDay();
- }
- $phoneVerification->request_count++;
- $phoneVerification->last_request_ip = AuthUtils::getRealIpAddr();
- $phoneVerification->last_request_device = $data['device'];
- $phoneVerification->last_request_at = now();
- $phoneVerification->save();
- /**
- * @var User $user
- */
- $user = User::query()
- ->where('phone', $phoneVerification->phone)
- ->first();
- if(!($user != null && $user->role_id == Constants::ROLE_POS_USER)){
- SmsService::sendSms($data['phone'], 'Your Class App verification code is ' . $phoneVerification->verification_code);
- }
- return response()->json($phoneVerification);
- }
- $this->incrementLoginAttempts($request);
- abort(response([
- 'message' => 'You cannot request another SMS yet!',
- 'phone_verification' => $phoneVerification
- ], 400));
- return null;
- }
- /**
- * @param Request $request
- * @return JsonResponse
- * @throws ValidationException
- */
- public function login(Request $request): JsonResponse
- {
- $data = $this->validate($request, [
- 'verificationId' => 'required',
- 'verificationCode' => 'required|string'
- ]);
- if ($this->hasTooManyLoginAttempts($request)) {
- $this->fireLockoutEvent($request);
- $this->sendLockoutResponse($request);
- }
- /**
- * @var PhoneVerification $phoneVerification
- */
- $phoneVerification = PhoneVerification::query()
- ->where('id', $data['verificationId'])
- ->first();
- if($phoneVerification == null){
- $this->incrementLoginAttempts($request);
- abort(response(['message' => 'Invalid verification ID!'], 400));
- }
- if($phoneVerification->verification_code != $data['verificationCode']){
- $this->incrementLoginAttempts($request);
- abort(response(['message' => 'Invalid verification code!'], 422));
- }
- if($phoneVerification->valid_until->isBefore(now())){
- $this->incrementLoginAttempts($request);
- abort(response(['message' => 'Verification code expired!'], 422));
- }
- $phoneVerification->valid_until = now();
- $phoneVerification->save();
- /**
- * @var User $user
- */
- $user = User::query()->where('phone', '=', $phoneVerification->phone)->first();
- if ($user == null)
- $user = User::query()->create([
- 'phone' => $phoneVerification->phone,
- 'role_id' => Constants::ROLE_REGULAR_USER,
- ]);
- else {
- if ($user->deleted_at != null)
- abort(response(['message' => 'Account invalid, please contact our support or try again later.'], 401));
- if ($user->is_locked)
- abort(response(['message' => 'Account locked, please contact our support or try again later.'], 401));
- }
- /**
- * @var User $user
- */
- $accessToken = $user->createToken(env('APP_NAME'))->plainTextToken;
- $token = [
- 'access_token' => $accessToken
- ];
- Log::info("Authenticated login request for user #$user->id : $user->name");
- return \response()->json($token);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement