mirror of
https://gitlab.linphone.org/BC/public/flexisip-account-manager.git
synced 2026-01-17 10:08:05 +00:00
52 lines
1.8 KiB
PHP
52 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
|
|
use App\Token;
|
|
use App\Libraries\FlexisipPusherConnector;
|
|
use App\Http\Controllers\Account\AuthenticateController as WebAuthenticateController;
|
|
|
|
class TokenController extends Controller
|
|
{
|
|
public function create(Request $request)
|
|
{
|
|
$request->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");
|
|
}
|
|
}
|
|
}
|