Add verify ssl option to paperless-ngx integration (#146802)

* add verify ssl config option

* Refactoring

* Use .get() with default value instead of migration

* Reconfigure fix

* minor changes
This commit is contained in:
Florian von Garrel 2025-06-16 14:31:22 +02:00 committed by GitHub
parent 61b00892c3
commit c335b5b37c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 28 additions and 15 deletions

View File

@ -9,7 +9,7 @@ from pypaperless.exceptions import (
PaperlessInvalidTokenError, PaperlessInvalidTokenError,
) )
from homeassistant.const import CONF_API_KEY, CONF_URL, Platform from homeassistant.const import CONF_API_KEY, CONF_URL, CONF_VERIFY_SSL, Platform
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ( from homeassistant.exceptions import (
ConfigEntryAuthFailed, ConfigEntryAuthFailed,
@ -69,7 +69,7 @@ async def _get_paperless_api(
api = Paperless( api = Paperless(
entry.data[CONF_URL], entry.data[CONF_URL],
entry.data[CONF_API_KEY], entry.data[CONF_API_KEY],
session=async_get_clientsession(hass), session=async_get_clientsession(hass, entry.data.get(CONF_VERIFY_SSL, True)),
) )
try: try:

View File

@ -16,7 +16,7 @@ from pypaperless.exceptions import (
import voluptuous as vol import voluptuous as vol
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_API_KEY, CONF_URL from homeassistant.const import CONF_API_KEY, CONF_URL, CONF_VERIFY_SSL
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import DOMAIN, LOGGER from .const import DOMAIN, LOGGER
@ -25,6 +25,7 @@ STEP_USER_DATA_SCHEMA = vol.Schema(
{ {
vol.Required(CONF_URL): str, vol.Required(CONF_URL): str,
vol.Required(CONF_API_KEY): str, vol.Required(CONF_API_KEY): str,
vol.Required(CONF_VERIFY_SSL, default=True): bool,
} }
) )
@ -78,15 +79,19 @@ class PaperlessConfigFlow(ConfigFlow, domain=DOMAIN):
if not errors: if not errors:
return self.async_update_reload_and_abort(entry, data=user_input) return self.async_update_reload_and_abort(entry, data=user_input)
if user_input is not None:
suggested_values = user_input
else:
suggested_values = {
CONF_URL: entry.data[CONF_URL],
CONF_VERIFY_SSL: entry.data.get(CONF_VERIFY_SSL, True),
}
return self.async_show_form( return self.async_show_form(
step_id="reconfigure", step_id="reconfigure",
data_schema=self.add_suggested_values_to_schema( data_schema=self.add_suggested_values_to_schema(
data_schema=STEP_USER_DATA_SCHEMA, data_schema=STEP_USER_DATA_SCHEMA,
suggested_values={ suggested_values=suggested_values,
CONF_URL: user_input[CONF_URL]
if user_input is not None
else entry.data[CONF_URL],
},
), ),
errors=errors, errors=errors,
) )
@ -122,13 +127,15 @@ class PaperlessConfigFlow(ConfigFlow, domain=DOMAIN):
errors=errors, errors=errors,
) )
async def _validate_input(self, user_input: dict[str, str]) -> dict[str, str]: async def _validate_input(self, user_input: dict[str, Any]) -> dict[str, str]:
errors: dict[str, str] = {} errors: dict[str, str] = {}
client = Paperless( client = Paperless(
user_input[CONF_URL], user_input[CONF_URL],
user_input[CONF_API_KEY], user_input[CONF_API_KEY],
session=async_get_clientsession(self.hass), session=async_get_clientsession(
self.hass, user_input.get(CONF_VERIFY_SSL, True)
),
) )
try: try:

View File

@ -4,11 +4,13 @@
"user": { "user": {
"data": { "data": {
"url": "[%key:common::config_flow::data::url%]", "url": "[%key:common::config_flow::data::url%]",
"api_key": "[%key:common::config_flow::data::api_key%]" "api_key": "[%key:common::config_flow::data::api_key%]",
"verify_ssl": "[%key:common::config_flow::data::verify_ssl%]"
}, },
"data_description": { "data_description": {
"url": "URL to connect to the Paperless-ngx instance", "url": "URL to connect to the Paperless-ngx instance",
"api_key": "API key to connect to the Paperless-ngx API" "api_key": "API key to connect to the Paperless-ngx API",
"verify_ssl": "Verify the SSL certificate of the Paperless-ngx instance. Disable this option if youre using a self-signed certificate."
}, },
"title": "Add Paperless-ngx instance" "title": "Add Paperless-ngx instance"
}, },
@ -24,11 +26,13 @@
"reconfigure": { "reconfigure": {
"data": { "data": {
"url": "[%key:common::config_flow::data::url%]", "url": "[%key:common::config_flow::data::url%]",
"api_key": "[%key:common::config_flow::data::api_key%]" "api_key": "[%key:common::config_flow::data::api_key%]",
"verify_ssl": "[%key:common::config_flow::data::verify_ssl%]"
}, },
"data_description": { "data_description": {
"url": "[%key:component::paperless_ngx::config::step::user::data_description::url%]", "url": "[%key:component::paperless_ngx::config::step::user::data_description::url%]",
"api_key": "[%key:component::paperless_ngx::config::step::user::data_description::api_key%]" "api_key": "[%key:component::paperless_ngx::config::step::user::data_description::api_key%]",
"verify_ssl": "[%key:component::paperless_ngx::config::step::user::data_description::verify_ssl%]"
}, },
"title": "Reconfigure Paperless-ngx instance" "title": "Reconfigure Paperless-ngx instance"
} }

View File

@ -1,15 +1,17 @@
"""Constants for the Paperless NGX integration tests.""" """Constants for the Paperless NGX integration tests."""
from homeassistant.const import CONF_API_KEY, CONF_URL from homeassistant.const import CONF_API_KEY, CONF_URL, CONF_VERIFY_SSL
USER_INPUT_ONE = { USER_INPUT_ONE = {
CONF_URL: "https://192.168.69.16:8000", CONF_URL: "https://192.168.69.16:8000",
CONF_API_KEY: "12345678", CONF_API_KEY: "12345678",
CONF_VERIFY_SSL: True,
} }
USER_INPUT_TWO = { USER_INPUT_TWO = {
CONF_URL: "https://paperless.example.de", CONF_URL: "https://paperless.example.de",
CONF_API_KEY: "87654321", CONF_API_KEY: "87654321",
CONF_VERIFY_SSL: True,
} }
USER_INPUT_REAUTH = {CONF_API_KEY: "192837465"} USER_INPUT_REAUTH = {CONF_API_KEY: "192837465"}