From 3cc3a9876e022a4a713847354593a52785e80ce7 Mon Sep 17 00:00:00 2001 From: Dmitriy Fofanov Date: Wed, 25 Feb 2026 10:13:17 +0300 Subject: [PATCH] fix: use POST /upload endpoint for updating NPM certificates NPM returns 404 on PUT /api/nginx/certificates/{id} with multipart data. The correct endpoint for uploading certificate files is: POST /api/nginx/certificates/{id}/upload Also removed unnecessary 'provider' data field from the upload request. --- letsencrypt_regru_api.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/letsencrypt_regru_api.py b/letsencrypt_regru_api.py index 37d7f24..3be1ee4 100644 --- a/letsencrypt_regru_api.py +++ b/letsencrypt_regru_api.py @@ -798,6 +798,12 @@ class NginxProxyManagerAPI: """ Обновление существующего сертификата + NPM использует отдельный endpoint для загрузки файлов сертификата: + POST /api/nginx/certificates/{id}/upload (multipart/form-data) + + PUT /api/nginx/certificates/{id} принимает только JSON-метаданные, + а не файлы, поэтому для обновления файлов используется /upload. + Args: cert_id: ID сертификата в NPM cert_path: Путь к файлу сертификата (fullchain.pem или cert.pem) @@ -806,18 +812,13 @@ class NginxProxyManagerAPI: Returns: True если успешно """ - url = f"{self.host}/api/nginx/certificates/{cert_id}" + url = f"{self.host}/api/nginx/certificates/{cert_id}/upload" try: files, _cert_key = self._prepare_cert_files(cert_path, key_path) - # Дополнительные поля формы - data = { - 'provider': 'other', # other для custom сертификатов - } - self.logger.info(f"Обновление сертификата ID {cert_id} в NPM...") - response = self.session.put(url, files=files, data=data, timeout=30) + response = self.session.post(url, files=files, timeout=30) response.raise_for_status() self.logger.info("Сертификат успешно обновлен в NPM")