From 6c9531ef4fe092a80746c8e468930e0ba5c7fa65 Mon Sep 17 00:00:00 2001 From: Ruman Saleem Date: Sun, 9 Mar 2025 02:09:22 +0530 Subject: [PATCH] Adds feature to Edit Custom certificates. --- backend/internal/certificate.js | 4 +- backend/routes/nginx/certificates.js | 18 +++++ .../paths/nginx/certificates/certID/put.json | 77 +++++++++++++++++++ backend/schema/swagger.json | 3 + frontend/js/app/nginx/certificates/form.ejs | 18 +++-- frontend/js/app/nginx/certificates/form.js | 35 ++++++--- .../js/app/nginx/certificates/list/item.ejs | 4 + .../js/app/nginx/certificates/list/item.js | 6 ++ frontend/js/i18n/messages.json | 3 +- frontend/js/models/certificate.js | 7 ++ 10 files changed, 158 insertions(+), 17 deletions(-) create mode 100644 backend/schema/paths/nginx/certificates/certID/put.json diff --git a/backend/internal/certificate.js b/backend/internal/certificate.js index f2e845a24..74041e095 100644 --- a/backend/internal/certificate.js +++ b/backend/internal/certificate.js @@ -272,7 +272,9 @@ const internalCertificate = { .then(utils.omitRow(omissions())) .then((saved_row) => { saved_row.meta = internalCertificate.cleanMeta(saved_row.meta); - data.meta = internalCertificate.cleanMeta(data.meta); + if (data.meta) { + data.meta = internalCertificate.cleanMeta(data.meta); + } // Add row.nice_name for custom certs if (saved_row.provider === 'other') { diff --git a/backend/routes/nginx/certificates.js b/backend/routes/nginx/certificates.js index bf47c03fc..95a23c283 100644 --- a/backend/routes/nginx/certificates.js +++ b/backend/routes/nginx/certificates.js @@ -147,6 +147,24 @@ router .catch(next); }) + /** + * PUT /api/nginx/certificates/123 + * + * Updates a specific certificate + */ + .put((req, res, next) => { + const data = { id: req.params.certificate_id, ...req.body }; + apiValidator(schema.getValidationSchema('/nginx/certificates/{certID}', 'put'), data) + .then((data) => { + return internalCertificate.update(res.locals.access, data); + }) + .then((result) => { + res.status(201) + .send(result); + }) + .catch(next); + }) + /** * DELETE /api/nginx/certificates/123 * diff --git a/backend/schema/paths/nginx/certificates/certID/put.json b/backend/schema/paths/nginx/certificates/certID/put.json new file mode 100644 index 000000000..2c50a8c96 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/certID/put.json @@ -0,0 +1,77 @@ +{ + "operationId": "updateCertificate", + "summary": "Update a Certificate", + "tags": ["Certificates"], + "security": [ + { + "BearerAuth": ["certificates"] + } + ], + "parameters": [ + { + "in": "path", + "name": "certID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "requestBody": { + "description": "Certificate Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": ["provider"], + "properties": { + "id": { + "$ref": "../../../../common.json#/properties/id" + }, + "provider": { + "$ref": "../../../../components/certificate-object.json#/properties/provider" + }, + "nice_name": { + "$ref": "../../../../components/certificate-object.json#/properties/nice_name" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 4, + "created_on": "2024-10-09T05:31:58.000Z", + "modified_on": "2024-10-09T05:32:11.000Z", + "owner_user_id": 1, + "provider": "letsencrypt", + "nice_name": "test.example.com", + "domain_names": ["test.example.com"], + "expires_on": "2025-01-07T04:34:18.000Z", + "meta": { + "letsencrypt_email": "jc@jc21.com", + "letsencrypt_agree": true, + "dns_challenge": false + } + } + } + }, + "schema": { + "$ref": "../../../../components/certificate-object.json" + } + } + } + } + } +} diff --git a/backend/schema/swagger.json b/backend/schema/swagger.json index 4a502b4e4..2be151b96 100644 --- a/backend/schema/swagger.json +++ b/backend/schema/swagger.json @@ -70,6 +70,9 @@ "get": { "$ref": "./paths/nginx/certificates/certID/get.json" }, + "put": { + "$ref": "./paths/nginx/certificates/certID/put.json" + }, "delete": { "$ref": "./paths/nginx/certificates/certID/delete.json" } diff --git a/frontend/js/app/nginx/certificates/form.ejs b/frontend/js/app/nginx/certificates/form.ejs index 6adb4b01c..e75593af0 100644 --- a/frontend/js/app/nginx/certificates/form.ejs +++ b/frontend/js/app/nginx/certificates/form.ejs @@ -1,6 +1,6 @@