Skip to main content

komga_sdk/apis/
server_settings_api.rs

1/*
2 * Komga API
3 *
4 * Komga REST API.  ## Reference  Check the API reference: - on the [Komga website](https://komga.org/docs/openapi/komga-api) - on any running Komga instance at `/swagger-ui.html` - on [GitHub](https://raw.githubusercontent.com/gotson/komga/refs/heads/master/komga/docs/openapi.json)  ## Authentication  Most endpoints require authentication. Authentication is done using either: - Basic Authentication - Passing an API Key in the `X-API-Key` header  ## Sessions  Upon successful authentication, a session is created, and can be reused.  - By default, a `KOMGA-SESSION` cookie is set via `Set-Cookie` response header. This works well for browsers and clients that can handle cookies. - If you specify a header `X-Auth-Token` during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session.  If you need to set the session cookie later on, you can call `/api/v1/login/set-cookie` with `X-Auth-Token`. The response will contain the `Set-Cookie` header.  ## Remember Me  During authentication, if a request parameter `remember-me` is passed and set to `true`, the server will also return a `komga-remember-me` cookie. This cookie will be used to login automatically even if the session has expired.  ## Logout  You can explicitly logout an existing session by calling `/api/logout`. This would return a `204`.  ## Deprecation  API endpoints marked as deprecated will be removed in the next major version.
5 *
6 * The version of the OpenAPI document: 1.23.4
7 * 
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17
18/// struct for typed errors of method [`get_server_settings`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum GetServerSettingsError {
22    Status400(models::ValidationErrorResponse),
23    UnknownValue(serde_json::Value),
24}
25
26/// struct for typed errors of method [`update_server_settings`]
27#[derive(Debug, Clone, Serialize, Deserialize)]
28#[serde(untagged)]
29pub enum UpdateServerSettingsError {
30    Status400(models::ValidationErrorResponse),
31    UnknownValue(serde_json::Value),
32}
33
34
35/// Required role: **ADMIN**
36pub async fn get_server_settings(configuration: &configuration::Configuration, ) -> Result<models::SettingsDto, Error<GetServerSettingsError>> {
37
38    let uri_str = format!("{}/api/v1/settings", configuration.base_path);
39    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
40
41    if let Some(ref user_agent) = configuration.user_agent {
42        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
43    }
44    if let Some(ref apikey) = configuration.api_key {
45        let key = apikey.key.clone();
46        let value = match apikey.prefix {
47            Some(ref prefix) => format!("{} {}", prefix, key),
48            None => key,
49        };
50        req_builder = req_builder.header("X-API-Key", value);
51    };
52    if let Some(ref auth_conf) = configuration.basic_auth {
53        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
54    };
55
56    let req = req_builder.build()?;
57    let resp = configuration.client.execute(req).await?;
58
59    let status = resp.status();
60    let content_type = resp
61        .headers()
62        .get("content-type")
63        .and_then(|v| v.to_str().ok())
64        .unwrap_or("application/octet-stream");
65    let content_type = super::ContentType::from(content_type);
66
67    if !status.is_client_error() && !status.is_server_error() {
68        let content = resp.text().await?;
69        match content_type {
70            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
71            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::SettingsDto`"))),
72            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::SettingsDto`")))),
73        }
74    } else {
75        let content = resp.text().await?;
76        let entity: Option<GetServerSettingsError> = serde_json::from_str(&content).ok();
77        Err(Error::ResponseError(ResponseContent { status, content, entity }))
78    }
79}
80
81/// You can omit fields you don't want to update  Required role: **ADMIN**
82pub async fn update_server_settings(configuration: &configuration::Configuration, settings_update_dto: models::SettingsUpdateDto) -> Result<(), Error<UpdateServerSettingsError>> {
83    // add a prefix to parameters to efficiently prevent name collisions
84    let p_body_settings_update_dto = settings_update_dto;
85
86    let uri_str = format!("{}/api/v1/settings", configuration.base_path);
87    let mut req_builder = configuration.client.request(reqwest::Method::PATCH, &uri_str);
88
89    if let Some(ref user_agent) = configuration.user_agent {
90        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
91    }
92    if let Some(ref apikey) = configuration.api_key {
93        let key = apikey.key.clone();
94        let value = match apikey.prefix {
95            Some(ref prefix) => format!("{} {}", prefix, key),
96            None => key,
97        };
98        req_builder = req_builder.header("X-API-Key", value);
99    };
100    if let Some(ref auth_conf) = configuration.basic_auth {
101        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
102    };
103    req_builder = req_builder.json(&p_body_settings_update_dto);
104
105    let req = req_builder.build()?;
106    let resp = configuration.client.execute(req).await?;
107
108    let status = resp.status();
109
110    if !status.is_client_error() && !status.is_server_error() {
111        Ok(())
112    } else {
113        let content = resp.text().await?;
114        let entity: Option<UpdateServerSettingsError> = serde_json::from_str(&content).ok();
115        Err(Error::ResponseError(ResponseContent { status, content, entity }))
116    }
117}
118