chore: move routes definition to attributes

Signed-off-by: Vitor Mattos <vitor@php.rio>
This commit is contained in:
Vitor Mattos 2024-06-28 17:55:30 -03:00
parent 828a83fd6a
commit db949df769
No known key found for this signature in database
GPG key ID: B7AB4B76A7CA7318
29 changed files with 6818 additions and 7159 deletions

View file

@ -10,25 +10,9 @@ $requirements = [
'path' => '.+',
];
$routes = [
return [
'routes' => [
// API
['name' => 'api#preflighted_cors', 'url' => '/api/{apiVersion}/{path}', 'verb' => 'OPTIONS', 'requirements' => $requirements],
],
];
return array_merge_recursive(
$routes,
include(__DIR__ . '/routes/routesAccountController.php'),
include(__DIR__ . '/routes/routesAdminController.php'),
include(__DIR__ . '/routes/routesDevelopController.php'),
include(__DIR__ . '/routes/routesFileController.php'),
include(__DIR__ . '/routes/routesFileElementsController.php'),
include(__DIR__ . '/routes/routesIdentifyAccountController.php'),
include(__DIR__ . '/routes/routesNotifyController.php'),
include(__DIR__ . '/routes/routesPageController.php'),
include(__DIR__ . '/routes/routesRequestSignatureController.php'),
include(__DIR__ . '/routes/routesSettingsController.php'),
include(__DIR__ . '/routes/routesSignatureElementsController.php'),
include(__DIR__ . '/routes/routesSignFileController.php'),
);

View file

@ -1,27 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'account#createToSign', 'url' => '/api/{apiVersion}/account/create/{uuid}', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'account#me', 'url' => '/api/{apiVersion}/account/me', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'account#uploadPfx', 'url' => '/api/{apiVersion}/account/pfx', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'account#readPfxData', 'url' => '/api/{apiVersion}/account/pfx/read', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'account#updatePfxPassword', 'url' => '/api/{apiVersion}/account/pfx', 'verb' => 'PATCH', 'requirements' => $requirements],
['name' => 'account#deletePfx', 'url' => '/api/{apiVersion}/account/pfx', 'verb' => 'DELETE', 'requirements' => $requirements],
['name' => 'account#updateSettings', 'url' => '/api/{apiVersion}/account/settings', 'verb' => 'PATCH', 'requirements' => $requirements],
['name' => 'account#signatureGenerate', 'url' => '/api/{apiVersion}/account/signature', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'account#addFiles', 'url' => '/api/{apiVersion}/account/files', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'account#deleteFile', 'url' => '/api/{apiVersion}/account/files', 'verb' => 'DELETE', 'requirements' => $requirements],
['name' => 'account#accountFileListToOwner', 'url' => '/api/{apiVersion}/account/files', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'account#accountFileListToApproval', 'url' => '/api/{apiVersion}/account/files/approval/list', 'verb' => 'GET', 'requirements' => $requirements],
],
];

View file

@ -1,20 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'admin#installAndValidate', 'url' => '/api/{apiVersion}/admin/install-and-validate', 'verb' => 'GET'],
['name' => 'admin#generateCertificateCfssl', 'url' => '/api/{apiVersion}/admin/certificate/cfssl', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'admin#generateCertificateOpenSsl', 'url' => '/api/{apiVersion}/admin/certificate/openssl', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'admin#loadCertificate', 'url' => '/api/{apiVersion}/admin/certificate', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'admin#configureCheck', 'url' => '/api/{apiVersion}/admin/configure-check', 'verb' => 'GET', 'requirements' => $requirements],
],
];

View file

@ -1,12 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
return [
'routes' => [
['name' => 'develop#pdf', 'url' => '/develop/pdf', 'verb' => 'GET'],
],
];

View file

@ -1,21 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'File#save', 'url' => '/api/{apiVersion}/file', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'File#list', 'url' => '/api/{apiVersion}/file/list', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'File#getThumbnail', 'url' => '/api/{apiVersion}/file/thumbnail/{nodeId}', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'File#validate', 'url' => '/api/{apiVersion}/file/validate/', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'File#validateUuid', 'url' => '/api/{apiVersion}/file/validate/uuid/{uuid}', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'File#validateFileId', 'url' => '/api/{apiVersion}/file/validate/file_id/{fileId}', 'verb' => 'GET', 'requirements' => $requirements],
],
];

View file

@ -1,18 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'FileElement#post', 'url' => '/api/{apiVersion}/file-element/{uuid}', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'FileElement#patch', 'url' => '/api/{apiVersion}/file-element/{uuid}/{elementId}', 'verb' => 'PATCH', 'requirements' => $requirements],
['name' => 'FileElement#delete', 'url' => '/api/{apiVersion}/file-element/{uuid}/{elementId}', 'verb' => 'DELETE', 'requirements' => $requirements],
],
];

View file

@ -1,16 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'IdentifyAccount#search', 'url' => '/api/{apiVersion}/identify-account/search', 'verb' => 'GET', 'requirements' => $requirements],
],
];

View file

@ -1,18 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'notify#signer', 'url' => '/api/{apiVersion}/notify/signer', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'notify#signers', 'url' => '/api/{apiVersion}/notify/signers', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'notify#notificationDismiss', 'url' => '/api/{apiVersion}/notif/notification', 'verb' => 'DELETE', 'requirements' => $requirements],
],
];

View file

@ -1,34 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'routes' => [
// Pages - restricted
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'page#indexF', 'url' => '/f/', 'verb' => 'GET'],
['name' => 'page#incomplete', 'url' => '/f/incomplete', 'verb' => 'GET'],
['name' => 'page#signFPath', 'url' => '/f/sign/{uuid}/{path}', 'verb' => 'GET', 'requirements' => ['path' => '.+'], 'postfix' => 'extra'],
['name' => 'page#signF', 'url' => '/f/sign/{uuid}', 'verb' => 'GET'],
['name' => 'page#indexFPath', 'url' => '/f/{path}', 'verb' => 'GET', 'requirements' => ['path' => '.+'], 'postfix' => 'front'],
['name' => 'page#getPdfFile', 'url' => '/pdf/{uuid}', 'verb' => 'GET'],
['name' => 'page#resetPassword', 'url' => '/reset-password', 'verb' => 'GET'],
// Pages - public
['name' => 'page#incompleteP', 'url' => '/p/incomplete', 'verb' => 'GET'],
['name' => 'page#sign', 'url' => '/p/sign/{uuid}', 'verb' => 'GET'],
['name' => 'page#sign', 'url' => '/p/sign/{uuid}/{path}', 'verb' => 'GET', 'requirements' => ['path' => '.+'], 'postfix' => 'extra'],
['name' => 'page#signAccountFile', 'url' => '/p/account/files/approve/{uuid}', 'verb' => 'GET'],
['name' => 'page#signAccountFile', 'url' => '/p/account/files/approve/{uuid}/{path}', 'verb' => 'GET', 'requirements' => ['path' => '.+'], 'postfix' => 'extra'],
['name' => 'page#validation', 'url' => '/p/validation', 'verb' => 'GET'],
['name' => 'page#validationFileWithShortUrl', 'url' => '/validation/{uuid}', 'verb' => 'GET'],
['name' => 'page#validationFile', 'url' => '/p/validation/{uuid}', 'verb' => 'GET'],
['name' => 'page#getPdf', 'url' => '/p/pdf/{uuid}', 'verb' => 'GET']
],
];

View file

@ -1,19 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'RequestSignature#request', 'url' => '/api/{apiVersion}/request-signature', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'RequestSignature#updateSign', 'url' => '/api/{apiVersion}/request-signature', 'verb' => 'PATCH', 'requirements' => $requirements],
['name' => 'RequestSignature#deleteAllRequestSignatureUsingFileId', 'url' => '/api/{apiVersion}/sign/file_id/{fileId}', 'verb' => 'DELETE', 'requirements' => $requirements],
['name' => 'RequestSignature#deleteOneRequestSignatureUsingFileId', 'url' => '/api/{apiVersion}/sign/file_id/{fileId}/{signRequestId}', 'verb' => 'DELETE', 'requirements' => $requirements],
],
];

View file

@ -1,16 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'setting#hasRootCert', 'url' => '/api/{apiVersion}/setting/has-root-cert', 'verb' => 'GET', 'requirements' => $requirements],
],
];

View file

@ -1,20 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'signFile#signUsingUuid', 'url' => '/api/{apiVersion}/sign/uuid/{uuid}', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'signFile#signUsingFileId', 'url' => '/api/{apiVersion}/sign/file_id/{fileId}', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'signFile#signRenew', 'url' => '/api/{apiVersion}/sign/uuid/{uuid}/renew/{method}', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'signFile#getCodeUsingUuid', 'url' => '/api/{apiVersion}/sign/uuid/{uuid}/code', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'signFile#getCodeUsingFileId', 'url' => '/api/{apiVersion}/sign/file_id/{fileId}/code', 'verb' => 'POST', 'requirements' => $requirements],
],
];

View file

@ -1,21 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
$requirements = [
'apiVersion' => '(v1)',
];
return [
'ocs' => [
['name' => 'SignatureElements#createSignatureElement', 'url' => '/api/{apiVersion}/signature/elements', 'verb' => 'POST', 'requirements' => $requirements],
['name' => 'SignatureElements#getSignatureElements', 'url' => '/api/{apiVersion}/signature/elements', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'SignatureElements#getSignatureElementPreview','url' => '/api/{apiVersion}/signature/elements/preview/{nodeId}', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'SignatureElements#getSignatureElement', 'url' => '/api/{apiVersion}/signature/elements/{nodeId}', 'verb' => 'GET', 'requirements' => $requirements],
['name' => 'SignatureElements#patchSignatureElement', 'url' => '/api/{apiVersion}/signature/elements/{nodeId}', 'verb' => 'PATCH', 'requirements' => $requirements],
['name' => 'SignatureElements#deleteSignatureElement', 'url' => '/api/{apiVersion}/signature/elements/{nodeId}', 'verb' => 'DELETE', 'requirements' => $requirements],
],
];

View file

@ -25,6 +25,7 @@ use OCA\Libresign\Service\SignerElementsService;
use OCA\Libresign\Service\SignFileService;
use OCP\Accounts\IAccountManager;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\CORS;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
@ -84,6 +85,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
#[NoCSRFRequired]
#[PublicPage]
#[UseSession]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/account/create/{uuid}', requirements: ['apiVersion' => '(v1)'])]
public function createToSign(string $uuid, string $email, string $password, ?string $signPassword): DataResponse {
try {
$data = [
@ -145,6 +147,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/account/signature', requirements: ['apiVersion' => '(v1)'])]
public function signatureGenerate(
string $signPassword
): DataResponse {
@ -194,6 +197,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/account/files', requirements: ['apiVersion' => '(v1)'])]
public function addFiles(array $files): DataResponse {
try {
$this->accountService->addFilesToAccount($files, $this->userSession->getUser());
@ -232,6 +236,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/account/files', requirements: ['apiVersion' => '(v1)'])]
public function deleteFile(int $nodeId): DataResponse {
try {
$this->accountService->deleteFileFromAccount($nodeId, $this->userSession->getUser());
@ -262,6 +267,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
#[CORS]
#[NoCSRFRequired]
#[PublicPage]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/account/me', requirements: ['apiVersion' => '(v1)'])]
public function me(): DataResponse {
$user = $this->userSession->getUser();
if (!$user) {
@ -299,6 +305,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/account/files', requirements: ['apiVersion' => '(v1)'])]
public function accountFileListToOwner(array $filter = [], ?int $page = null, ?int $length = null): DataResponse {
try {
$filter['userId'] = $this->userSession->getUser()->getUID();
@ -327,6 +334,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/account/files/approval/list', requirements: ['apiVersion' => '(v1)'])]
public function accountFileListToApproval(array $filter = [], ?int $page = null, ?int $length = null): DataResponse {
try {
$this->validateHelper->userCanApproveValidationDocuments($this->userSession->getUser());
@ -354,6 +362,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'PATCH', url: '/api/{apiVersion}/account/settings', requirements: ['apiVersion' => '(v1)'])]
public function updateSettings(?string $phone = null): DataResponse {
try {
$user = $this->userSession->getUser();
@ -398,6 +407,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'delete', url: '/api/{apiVersion}/account/pfx', requirements: ['apiVersion' => '(v1)'])]
public function deletePfx(): DataResponse {
$this->accountService->deletePfx($this->userSession->getUser());
return new DataResponse(
@ -419,6 +429,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/account/pfx', requirements: ['apiVersion' => '(v1)'])]
public function uploadPfx(): DataResponse {
$file = $this->request->getUploadedFile('file');
try {
@ -458,6 +469,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'PATCH', url: '/api/{apiVersion}/account/pfx', requirements: ['apiVersion' => '(v1)'])]
public function updatePfxPassword($current, $new): DataResponse {
try {
$this->accountService->updatePfxPassword($this->userSession->getUser(), $current, $new);
@ -490,6 +502,7 @@ class AccountController extends AEnvironmentAwareController implements ISignatur
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/account/pfx/read', requirements: ['apiVersion' => '(v1)'])]
public function readPfxData(string $password): DataResponse {
try {
$data = $this->accountService->readPfxData($this->userSession->getUser(), $password);

View file

@ -17,6 +17,7 @@ use OCA\Libresign\ResponseDefinitions;
use OCA\Libresign\Service\Install\ConfigureCheckService;
use OCA\Libresign\Service\Install\InstallService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Services\IAppConfig;
@ -58,6 +59,7 @@ class AdminController extends AEnvironmentAwareController {
* 401: Account not found
*/
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/admin/certificate/cfssl', requirements: ['apiVersion' => '(v1)'])]
public function generateCertificateCfssl(
array $rootCert,
string $cfsslUri = '',
@ -93,6 +95,7 @@ class AdminController extends AEnvironmentAwareController {
* 401: Account not found
*/
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/admin/certificate/openssl', requirements: ['apiVersion' => '(v1)'])]
public function generateCertificateOpenSsl(
array $rootCert,
string $configPath = ''
@ -142,6 +145,7 @@ class AdminController extends AEnvironmentAwareController {
* 200: OK
*/
#[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/admin/certificate', requirements: ['apiVersion' => '(v1)'])]
public function loadCertificate(): DataResponse {
$engine = $this->certificateEngineHandler->getEngine();
/** @var LibresignEngineHandler */
@ -175,6 +179,7 @@ class AdminController extends AEnvironmentAwareController {
* 200: OK
*/
#[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/admin/configure-check', requirements: ['apiVersion' => '(v1)'])]
public function configureCheck(): DataResponse {
/** @var LibresignConfigureCheck[] */
$configureCheckList = $this->configureCheckService->checkAll();
@ -187,6 +192,7 @@ class AdminController extends AEnvironmentAwareController {
* @IgnoreOpenAPI
*/
#[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/admin/install-and-validate', requirements: ['apiVersion' => '(v1)'])]
public function installAndValidate(): void {
try {
$async = \function_exists('proc_open');

View file

@ -11,6 +11,7 @@ namespace OCA\Libresign\Controller;
use OCA\Libresign\AppInfo\Application;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
use OCP\AppFramework\Http\DataResponse;
@ -42,6 +43,7 @@ class DevelopController extends Controller {
*/
#[NoCSRFRequired]
#[PublicPage]
#[FrontpageRoute(verb: 'GET', url: '/develop/pdf')]
public function pdf(): FileDisplayResponse|Response {
if (!$this->isDebugMode()) {
return new DataResponse([], Http::STATUS_NOT_FOUND);

View file

@ -22,6 +22,7 @@ use OCA\Libresign\Service\IdentifyMethodService;
use OCA\Libresign\Service\SessionService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
@ -83,6 +84,7 @@ class FileController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[PublicPage]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/file/validate/uuid/{uuid}', requirements: ['apiVersion' => '(v1)'])]
public function validateUuid(string $uuid): DataResponse {
return $this->validate('Uuid', $uuid);
}
@ -102,6 +104,7 @@ class FileController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[PublicPage]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/file/validate/file_id/{fileId}', requirements: ['apiVersion' => '(v1)'])]
public function validateFileId(int $fileId): DataResponse {
return $this->validate('FileId', $fileId);
}
@ -122,6 +125,7 @@ class FileController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[PublicPage]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/file/validate/', requirements: ['apiVersion' => '(v1)'])]
public function validate(?string $type = null, $identifier = null): DataResponse {
try {
if ($type === 'Uuid' && !empty($identifier)) {
@ -195,6 +199,7 @@ class FileController extends AEnvironmentAwareController {
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/file/list', requirements: ['apiVersion' => '(v1)'])]
public function list($page = null, $length = null, ?array $filter = []): DataResponse {
$return = $this->fileService
->setMe($this->userSession->getUser())
@ -222,6 +227,7 @@ class FileController extends AEnvironmentAwareController {
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/file/thumbnail/{nodeId}', requirements: ['apiVersion' => '(v1)'])]
public function getThumbnail(
int $nodeId = -1,
int $x = 32,
@ -313,6 +319,7 @@ class FileController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireManager]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/file', requirements: ['apiVersion' => '(v1)'])]
public function save(array $file, string $name = '', array $settings = []): DataResponse {
try {
if (empty($name)) {

View file

@ -13,6 +13,7 @@ use OCA\Libresign\Helper\ValidateHelper;
use OCA\Libresign\ResponseDefinitions;
use OCA\Libresign\Service\FileElementService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataResponse;
@ -52,6 +53,7 @@ class FileElementController extends AEnvironmentAwareController {
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/file-element/{uuid}', requirements: ['apiVersion' => '(v1)'])]
public function post(string $uuid, int $signRequestId, int $elementId = null, string $type = '', array $metadata = [], array $coordinates = []): DataResponse {
$visibleElement = [
'elementId' => $elementId,
@ -101,6 +103,7 @@ class FileElementController extends AEnvironmentAwareController {
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'PATCH', url: '/api/{apiVersion}/file-element/{uuid}/{elementId}', requirements: ['apiVersion' => '(v1)'])]
public function patch(string $uuid, int $signRequestId, int $elementId = null, string $type = '', array $metadata = [], array $coordinates = []): DataResponse {
return $this->post($uuid, $signRequestId, $elementId, $type, $metadata, $coordinates);
}
@ -119,6 +122,7 @@ class FileElementController extends AEnvironmentAwareController {
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/file-element/{uuid}/{elementId}', requirements: ['apiVersion' => '(v1)'])]
public function delete(string $uuid, int $elementId): DataResponse {
try {
$this->validateHelper->validateExistingFile([

View file

@ -14,6 +14,7 @@ use OCA\Libresign\ResponseDefinitions;
use OCA\Libresign\Service\IdentifyMethod\Account;
use OCA\Libresign\Service\IdentifyMethod\Email;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\Collaboration\Collaborators\ISearch;
@ -53,6 +54,7 @@ class IdentifyAccountController extends AEnvironmentAwareController {
*/
#[NoAdminRequired]
#[RequireManager]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/identify-account/search', requirements: ['apiVersion' => '(v1)'])]
public function search(string $search = '', int $page = 1, int $limit = 25): DataResponse {
$shareTypes = $this->getShareTypes();
$lookup = false;

View file

@ -12,6 +12,7 @@ use OCA\Libresign\AppInfo\Application;
use OCA\Libresign\Exception\LibresignException;
use OCA\Libresign\Service\NotifyService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataResponse;
@ -41,6 +42,7 @@ class NotifyController extends AEnvironmentAwareController {
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/notify/signers', requirements: ['apiVersion' => '(v1)'])]
public function signers(int $fileId, array $signers): DataResponse {
try {
$this->notifyService->signers($fileId, $signers);
@ -74,6 +76,7 @@ class NotifyController extends AEnvironmentAwareController {
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/notify/signer', requirements: ['apiVersion' => '(v1)'])]
public function signer(int $fileId, int $signRequestId): DataResponse {
try {
$this->notifyService->signer($fileId, $signRequestId);
@ -107,6 +110,7 @@ class NotifyController extends AEnvironmentAwareController {
* 200: OK
*/
#[NoAdminRequired]
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/notify/notification', requirements: ['apiVersion' => '(v1)'])]
public function notificationDismiss(int $signRequestId, int $timestamp): DataResponse {
$this->notifyService->notificationDismiss(
$signRequestId,

View file

@ -26,6 +26,7 @@ use OCA\Libresign\Service\SignFileService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\AnonRateLimit;
use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
@ -77,6 +78,7 @@ class PageController extends AEnvironmentPageAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireSetupOk(template: 'main')]
#[FrontpageRoute(verb: 'GET', url: '/')]
public function index(): TemplateResponse {
$this->initialState->provideInitialState('config', $this->accountService->getConfig($this->userSession->getUser()));
$this->initialState->provideInitialState('certificate_engine', $this->accountService->getCertificateEngineName());
@ -118,6 +120,7 @@ class PageController extends AEnvironmentPageAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireSetupOk(template: 'main')]
#[FrontpageRoute(verb: 'GET', url: '/f/')]
public function indexF(): TemplateResponse {
return $this->index();
}
@ -131,6 +134,7 @@ class PageController extends AEnvironmentPageAwareController {
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[FrontpageRoute(verb: 'GET', url: '/f/incomplete')]
public function incomplete(): TemplateResponse {
Util::addScript(Application::APP_ID, 'libresign-main');
$response = new TemplateResponse(Application::APP_ID, 'main');
@ -146,6 +150,7 @@ class PageController extends AEnvironmentPageAwareController {
*/
#[PublicPage]
#[NoCSRFRequired]
#[FrontpageRoute(verb: 'GET', url: '/p/incomplete')]
public function incompleteP(): TemplateResponse {
Util::addScript(Application::APP_ID, 'libresign-main');
$response = new TemplateResponse(Application::APP_ID, 'main', [], TemplateResponse::RENDER_AS_BASE);
@ -165,6 +170,7 @@ class PageController extends AEnvironmentPageAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireSetupOk(template: 'main')]
#[FrontpageRoute(verb: 'GET', url: '/f/{path}', requirements: ['path' => '.+'])]
public function indexFPath(): TemplateResponse {
return $this->index();
}
@ -183,6 +189,7 @@ class PageController extends AEnvironmentPageAwareController {
#[RequireSetupOk]
#[PublicPage]
#[RequireSignRequestUuid]
#[FrontpageRoute(verb: 'GET', url: '/f/sign/{uuid}')]
public function signF(string $uuid): TemplateResponse {
$this->initialState->provideInitialState('action', JSActions::ACTION_SIGN_INTERNAL);
return $this->index();
@ -203,6 +210,7 @@ class PageController extends AEnvironmentPageAwareController {
#[RequireSetupOk]
#[PublicPage]
#[RequireSignRequestUuid]
#[FrontpageRoute(verb: 'GET', url: '/f/sign/{uuid}/{path}', requirements: ['path' => '.+'])]
public function signFPath(string $uuid): TemplateResponse {
$this->initialState->provideInitialState('action', JSActions::ACTION_SIGN_INTERNAL);
return $this->index();
@ -223,6 +231,7 @@ class PageController extends AEnvironmentPageAwareController {
#[RequireSetupOk]
#[PublicPage]
#[RequireSignRequestUuid]
#[FrontpageRoute(verb: 'GET', url: '/p/sign/{uuid}')]
public function sign(string $uuid): TemplateResponse {
$this->initialState->provideInitialState('action', JSActions::ACTION_SIGN);
$this->initialState->provideInitialState('config',
@ -281,6 +290,8 @@ class PageController extends AEnvironmentPageAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireSetupOk]
#[FrontpageRoute(verb: 'GET', url: '/p/account/files/approve/{uuid}')]
#[FrontpageRoute(verb: 'GET', url: '/p/account/files/approve/{uuid}/{path}', requirements: ['path' => '.+'], postfix: 'private')]
public function signAccountFile($uuid): TemplateResponse {
try {
$fileEntity = $this->signFileService->getFileByUuid($uuid);
@ -351,6 +362,7 @@ class PageController extends AEnvironmentPageAwareController {
#[RequireSetupOk]
#[PublicPage]
#[AnonRateLimit(limit: 30, period: 60)]
#[FrontpageRoute(verb: 'GET', url: '/p/pdf/{uuid}')]
public function getPdf($uuid) {
$this->throwIfValidationPageNotAccessible();
try {
@ -377,6 +389,7 @@ class PageController extends AEnvironmentPageAwareController {
#[PublicPage]
#[RequireSetupOk]
#[AnonRateLimit(limit: 30, period: 60)]
#[FrontpageRoute(verb: 'GET', url: '/pdf/{uuid}')]
public function getPdfFile($uuid): FileDisplayResponse {
$this->throwIfValidationPageNotAccessible();
$file = $this->getNextcloudFile();
@ -396,6 +409,7 @@ class PageController extends AEnvironmentPageAwareController {
#[RequireSetupOk(template: 'validation')]
#[PublicPage]
#[AnonRateLimit(limit: 30, period: 60)]
#[FrontpageRoute(verb: 'GET', url: '/p/validation')]
public function validation(): TemplateResponse {
$this->throwIfValidationPageNotAccessible();
if ($this->getFileEntity()) {
@ -440,6 +454,7 @@ class PageController extends AEnvironmentPageAwareController {
#[RequireSetupOk]
#[PublicPage]
#[AnonRateLimit(limit: 30, period: 60)]
#[FrontpageRoute(verb: 'GET', url: '/validation/{uuid}')]
public function validationFileWithShortUrl(): RedirectResponse {
$this->throwIfValidationPageNotAccessible();
return new RedirectResponse($this->url->linkToRoute('libresign.page.validationFile', ['uuid' => $this->request->getParam('uuid')]));
@ -458,6 +473,7 @@ class PageController extends AEnvironmentPageAwareController {
#[RequireSetupOk(template: 'main')]
#[PublicPage]
#[RequireSignRequestUuid]
#[FrontpageRoute(verb: 'GET', url: '/reset-password')]
public function resetPassword(): TemplateResponse {
$this->initialState->provideInitialState('config',
$this->accountService->getConfig($this->userSession->getUser())
@ -483,6 +499,7 @@ class PageController extends AEnvironmentPageAwareController {
#[RequireSetupOk(template: 'validation')]
#[PublicPage]
#[AnonRateLimit(limit: 30, period: 60)]
#[FrontpageRoute(verb: 'GET', url: '/p/validation/{uuid}')]
public function validationFile(string $uuid): TemplateResponse {
$this->throwIfValidationPageNotAccessible();
try {

View file

@ -15,6 +15,7 @@ use OCA\Libresign\ResponseDefinitions;
use OCA\Libresign\Service\FileService;
use OCA\Libresign\Service\RequestSignatureService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataResponse;
@ -60,6 +61,7 @@ class RequestSignatureController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireManager]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/request-signature', requirements: ['apiVersion' => '(v1)'])]
public function request(array $file, array $users, string $name, ?string $callback = null, ?int $status = 1): DataResponse {
$user = $this->userSession->getUser();
$data = [
@ -116,6 +118,7 @@ class RequestSignatureController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireManager]
#[ApiRoute(verb: 'PATCH', url: '/api/{apiVersion}/request-signature', requirements: ['apiVersion' => '(v1)'])]
public function updateSign(?array $users = [], ?string $uuid = null, ?array $visibleElements = null, ?array $file = [], ?int $status = null): DataResponse {
$user = $this->userSession->getUser();
$data = [
@ -174,6 +177,7 @@ class RequestSignatureController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireManager]
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/sign/file_id/{fileId}/{signRequestId}', requirements: ['apiVersion' => '(v1)'])]
public function deleteOneRequestSignatureUsingFileId(int $fileId, int $signRequestId): DataResponse {
try {
$data = [
@ -216,6 +220,7 @@ class RequestSignatureController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[RequireManager]
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/sign/file_id/{fileId}', requirements: ['apiVersion' => '(v1)'])]
public function deleteAllRequestSignatureUsingFileId(int $fileId): DataResponse {
try {
$data = [

View file

@ -11,6 +11,7 @@ namespace OCA\Libresign\Controller;
use OCA\Libresign\AppInfo\Application;
use OCA\Libresign\Handler\CertificateEngine\Handler as CertificateEngineHandler;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\OpenAPI;
@ -37,6 +38,7 @@ class SettingController extends AEnvironmentAwareController {
#[NoAdminRequired]
#[NoCSRFRequired]
#[OpenAPI(scope: OpenAPI::SCOPE_ADMINISTRATION)]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/setting/has-root-cert', requirements: ['apiVersion' => '(v1)'])]
public function hasRootCert(): DataResponse {
$checkData = [
'hasRootCert' => $this->certificateEngineHandler->getEngine()->isSetupOk()

View file

@ -22,6 +22,7 @@ use OCA\Libresign\Service\FileService;
use OCA\Libresign\Service\IdentifyMethodService;
use OCA\Libresign\Service\SignFileService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
@ -66,6 +67,7 @@ class SignFileController extends AEnvironmentAwareController implements ISignatu
#[NoCSRFRequired]
#[RequireManager]
#[PublicPage]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/sign/file_id/{fileId}', requirements: ['apiVersion' => '(v1)'])]
public function signUsingFileId(int $fileId, string $method, array $elements = [], string $identifyValue = '', string $token = ''): DataResponse {
return $this->sign($fileId, null, $method, $elements, $identifyValue, $token);
}
@ -88,6 +90,7 @@ class SignFileController extends AEnvironmentAwareController implements ISignatu
#[NoCSRFRequired]
#[RequireSigner]
#[PublicPage]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/sign/uuid/{uuid}', requirements: ['apiVersion' => '(v1)'])]
public function signUsingUuid(string $uuid, string $method, array $elements = [], string $identifyValue = '', string $token = ''): DataResponse {
return $this->sign(null, $uuid, $method, $elements, $identifyValue, $token);
}
@ -182,6 +185,7 @@ class SignFileController extends AEnvironmentAwareController implements ISignatu
#[NoCSRFRequired]
#[PublicPage]
#[CanSignRequestUuid]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/sign/uuid/{uuid}/renew/{method}', requirements: ['apiVersion' => '(v1)'])]
public function signRenew(string $method): DataResponse {
$this->signFileService->renew(
$this->getSignRequestEntity(),
@ -208,6 +212,7 @@ class SignFileController extends AEnvironmentAwareController implements ISignatu
#[NoCSRFRequired]
#[RequireSigner]
#[PublicPage]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/sign/uuid/{uuid}/code', requirements: ['apiVersion' => '(v1)'])]
public function getCodeUsingUuid(string $uuid): DataResponse {
try {
$signRequest = $this->signRequestMapper->getBySignerUuidAndUserId($uuid);
@ -233,6 +238,7 @@ class SignFileController extends AEnvironmentAwareController implements ISignatu
#[NoCSRFRequired]
#[RequireSigner]
#[PublicPage]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/sign/file_id/{fileId}/code', requirements: ['apiVersion' => '(v1)'])]
public function getCodeUsingFileId(int $fileId, ?string $identifyMethod, ?string $signMethod, ?string $identify): DataResponse {
try {
$signRequest = $this->signRequestMapper->getByFileIdAndUserId($fileId);

View file

@ -19,6 +19,7 @@ use OCA\Libresign\Service\SignerElementsService;
use OCA\Libresign\Service\SignFileService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
@ -63,6 +64,7 @@ class SignatureElementsController extends AEnvironmentAwareController implements
#[NoCSRFRequired]
#[PublicPage]
#[RequireSignRequestUuid(skipIfAuthenticated: true)]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/signature/elements', requirements: ['apiVersion' => '(v1)'])]
public function createSignatureElement(array $elements): DataResponse {
try {
$this->validateHelper->validateVisibleElements($elements, $this->validateHelper::TYPE_VISIBLE_ELEMENT_USER);
@ -109,6 +111,7 @@ class SignatureElementsController extends AEnvironmentAwareController implements
#[NoCSRFRequired]
#[PublicPage]
#[RequireSignRequestUuid(skipIfAuthenticated: true)]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/signature/elements', requirements: ['apiVersion' => '(v1)'])]
public function getSignatureElements(): DataResponse {
$userId = $this->userSession->getUser()?->getUID();
try {
@ -146,6 +149,7 @@ class SignatureElementsController extends AEnvironmentAwareController implements
#[PublicPage]
#[NoCSRFRequired]
#[RequireSignRequestUuid(skipIfAuthenticated: true)]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/signature/elements/preview/{nodeId}', requirements: ['apiVersion' => '(v1)'])]
public function getSignatureElementPreview(int $nodeId) {
try {
$node = $this->accountService->getFileByNodeIdAndSessionId(
@ -177,6 +181,7 @@ class SignatureElementsController extends AEnvironmentAwareController implements
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/signature/elements/preview/{nodeId}', requirements: ['apiVersion' => '(v1)'])]
public function getSignatureElement(int $nodeId): DataResponse {
$userId = $this->userSession->getUser()->getUID();
try {
@ -209,6 +214,7 @@ class SignatureElementsController extends AEnvironmentAwareController implements
#[PublicPage]
#[NoCSRFRequired]
#[RequireSignRequestUuid(skipIfAuthenticated: true)]
#[ApiRoute(verb: 'PATCH', url: '/api/{apiVersion}/signature/elements/preview/{nodeId}', requirements: ['apiVersion' => '(v1)'])]
public function patchSignatureElement(int $nodeId, string $type = '', array $file = []): DataResponse {
try {
$element['nodeId'] = $nodeId;
@ -264,6 +270,7 @@ class SignatureElementsController extends AEnvironmentAwareController implements
#[NoCSRFRequired]
#[PublicPage]
#[RequireSignRequestUuid(skipIfAuthenticated: true)]
#[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/signature/elements/{nodeId}', requirements: ['apiVersion' => '(v1)'])]
public function deleteSignatureElement(int $nodeId): DataResponse {
try {
$this->accountService->deleteSignatureElement(

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff