78 lines
2.5 KiB
PHP
78 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Exceptions\RestPki\CertificadoInvalidException;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Lacuna\RestPki\PadesMeasurementUnits;
|
|
use Lacuna\RestPki\PadesSignatureFinisher2;
|
|
use Lacuna\RestPki\PadesSignatureStarter;
|
|
use Lacuna\RestPki\RestPkiClient;
|
|
use Lacuna\RestPki\StandardSecurityContexts;
|
|
use Lacuna\RestPki\StandardSignaturePolicies;
|
|
|
|
class RestPkiController extends Controller
|
|
{
|
|
private $client;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->client = new RestPkiClient(env('PKI_ENDPOINT_URL'), env('PKI_ACCESS_TOKEN'));
|
|
}
|
|
|
|
public function start(Request $request)
|
|
{
|
|
$visualRepresentation = [
|
|
'text' => [
|
|
'text' => 'Assinado eletronicamente por {{signerName}} ({{signerNationalId}})',
|
|
'fontSize' => 8.0,
|
|
'includeSigningTime' => true,
|
|
],
|
|
'position' => [
|
|
'pageNumber' => -1,
|
|
'auto' => [
|
|
'container' => [
|
|
'left' => 5.5,
|
|
'right' => 1.5,
|
|
'bottom' => 5.5,
|
|
'height' => 15.94,
|
|
],
|
|
'signatureRectangleSize' => [
|
|
'height' => 15.94,
|
|
'width' => 600.0,
|
|
],
|
|
'rowSpacing' => 0.0,
|
|
],
|
|
],
|
|
];
|
|
|
|
$signatureStarter = new PadesSignatureStarter($this->client);
|
|
$signatureStarter->signaturePolicy = StandardSignaturePolicies::PADES_BASIC_WITHOUT_LTV;
|
|
$signatureStarter->securityContext = StandardSecurityContexts::PKI_BRAZIL;
|
|
$signatureStarter->measurementUnits = PadesMeasurementUnits::PDFPOINTS;
|
|
$signatureStarter->visualRepresentation = $visualRepresentation;
|
|
$signatureStarter->setPdfToSignFromContentBase64($request->base64);
|
|
|
|
$token = $signatureStarter->startWithWebPki();
|
|
|
|
return response()->json(['token' => $token], Response::HTTP_OK);
|
|
}
|
|
|
|
public function finish(Request $request)
|
|
{
|
|
try {
|
|
$signatureFinisher = new PadesSignatureFinisher2($this->client);
|
|
$signatureFinisher->token = $request->token;
|
|
|
|
$signatureResult = $signatureFinisher->finish();
|
|
|
|
return response()->json($signatureResult->getContentBase64(), Response::HTTP_OK);
|
|
|
|
} catch (\Throwable $e) {
|
|
|
|
throw new CertificadoInvalidException;
|
|
}
|
|
}
|
|
}
|