validate([ 'pn_provider' => 'required', 'pn_param' => 'required', 'pn_prid' => 'required', ]); if (Token::where('pn_provider', $request->get('pn_provider')) ->where('pn_param', $request->get('pn_param')) ->where('pn_prid', $request->get('pn_prid')) ->where('used', false) ->count() > 0) { abort(403, 'A similar token was already used'); } if (Token::where('pn_provider', $request->get('pn_provider')) ->where('pn_param', $request->get('pn_param')) ->where('pn_prid', $request->get('pn_prid')) ->count() > 3) { abort(403, 'The limit of tokens generated for this device has been reached'); } $token = new Token; $token->token = Str::random(WebAuthenticateController::$emailCodeSize); $token->pn_provider = $request->get('pn_provider'); $token->pn_param = $request->get('pn_param'); $token->pn_prid = $request->get('pn_prid'); // Send the token to the device via Push Notification $fp = new FlexisipPusherConnector($token->pn_provider, $token->pn_param, $token->pn_prid); if ($fp->sendToken($token->token)) { $token->save(); } else { abort(503, "Token not sent"); } } }