Skip to main content

komga_sdk/apis/
user_session_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 [`convert_header_session_to_cookie`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum ConvertHeaderSessionToCookieError {
22    Status400(models::ValidationErrorResponse),
23    UnknownValue(serde_json::Value),
24}
25
26/// struct for typed errors of method [`post_logout`]
27#[derive(Debug, Clone, Serialize, Deserialize)]
28#[serde(untagged)]
29pub enum PostLogoutError {
30    UnknownValue(serde_json::Value),
31}
32
33/// struct for typed errors of method [`post_logout1`]
34#[derive(Debug, Clone, Serialize, Deserialize)]
35#[serde(untagged)]
36pub enum PostLogout1Error {
37    UnknownValue(serde_json::Value),
38}
39
40
41/// Forcefully return Set-Cookie header, even if the session is contained in the X-Auth-Token header.
42pub async fn convert_header_session_to_cookie(configuration: &configuration::Configuration, ) -> Result<(), Error<ConvertHeaderSessionToCookieError>> {
43
44    let uri_str = format!("{}/api/v1/login/set-cookie", configuration.base_path);
45    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
46
47    if let Some(ref user_agent) = configuration.user_agent {
48        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
49    }
50    if let Some(ref apikey) = configuration.api_key {
51        let key = apikey.key.clone();
52        let value = match apikey.prefix {
53            Some(ref prefix) => format!("{} {}", prefix, key),
54            None => key,
55        };
56        req_builder = req_builder.header("X-API-Key", value);
57    };
58    if let Some(ref auth_conf) = configuration.basic_auth {
59        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
60    };
61
62    let req = req_builder.build()?;
63    let resp = configuration.client.execute(req).await?;
64
65    let status = resp.status();
66
67    if !status.is_client_error() && !status.is_server_error() {
68        Ok(())
69    } else {
70        let content = resp.text().await?;
71        let entity: Option<ConvertHeaderSessionToCookieError> = serde_json::from_str(&content).ok();
72        Err(Error::ResponseError(ResponseContent { status, content, entity }))
73    }
74}
75
76/// Invalidates the current session and clean up any remember-me authentication.
77pub async fn post_logout(configuration: &configuration::Configuration, ) -> Result<(), Error<PostLogoutError>> {
78
79    let uri_str = format!("{}/api/logout", configuration.base_path);
80    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
81
82    if let Some(ref user_agent) = configuration.user_agent {
83        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
84    }
85    if let Some(ref apikey) = configuration.api_key {
86        let key = apikey.key.clone();
87        let value = match apikey.prefix {
88            Some(ref prefix) => format!("{} {}", prefix, key),
89            None => key,
90        };
91        req_builder = req_builder.header("X-API-Key", value);
92    };
93    if let Some(ref auth_conf) = configuration.basic_auth {
94        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
95    };
96
97    let req = req_builder.build()?;
98    let resp = configuration.client.execute(req).await?;
99
100    let status = resp.status();
101
102    if !status.is_client_error() && !status.is_server_error() {
103        Ok(())
104    } else {
105        let content = resp.text().await?;
106        let entity: Option<PostLogoutError> = serde_json::from_str(&content).ok();
107        Err(Error::ResponseError(ResponseContent { status, content, entity }))
108    }
109}
110
111/// Invalidates the current session and clean up any remember-me authentication.
112pub async fn post_logout1(configuration: &configuration::Configuration, ) -> Result<(), Error<PostLogout1Error>> {
113
114    let uri_str = format!("{}/api/logout", configuration.base_path);
115    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
116
117    if let Some(ref user_agent) = configuration.user_agent {
118        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
119    }
120    if let Some(ref apikey) = configuration.api_key {
121        let key = apikey.key.clone();
122        let value = match apikey.prefix {
123            Some(ref prefix) => format!("{} {}", prefix, key),
124            None => key,
125        };
126        req_builder = req_builder.header("X-API-Key", value);
127    };
128    if let Some(ref auth_conf) = configuration.basic_auth {
129        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
130    };
131
132    let req = req_builder.build()?;
133    let resp = configuration.client.execute(req).await?;
134
135    let status = resp.status();
136
137    if !status.is_client_error() && !status.is_server_error() {
138        Ok(())
139    } else {
140        let content = resp.text().await?;
141        let entity: Option<PostLogout1Error> = serde_json::from_str(&content).ok();
142        Err(Error::ResponseError(ResponseContent { status, content, entity }))
143    }
144}
145