1 use {
2 crate::client_credentials::{ClientCredentials, base_url_builder as tenant_base_url_builder},
3 reqwest::{Client, StatusCode},
4 smbcloud_model::error_codes::{ErrorCode, ErrorResponse},
5 smbcloud_network::environment::Environment,
6 };
7
8 pub async fn logout_with_client(
9 env: Environment,
10 client: ClientCredentials<'_>,
11 access_token: String,
12 ) -> Result<(), ErrorResponse> {
13 let response = match Client::new()
14 .delete(build_logout_url(env, client))
15 .header("Authorization", access_token)
16 .header("Accept", "application/json")
17 .header("Content-Type", "application/x-www-form-urlencoded")
18 .send()
19 .await
20 {
21 Ok(response) => response,
22 Err(_) => {
23 return Err(ErrorResponse::Error {
24 error_code: ErrorCode::Unknown,
25 message: ErrorCode::Unknown.message(None).to_string(),
26 });
27 }
28 };
29
30 match response.status() {
31 StatusCode::OK => Ok(()),
32 _ => Err(ErrorResponse::Error {
33 error_code: ErrorCode::Unauthorized,
34 message: ErrorCode::Unauthorized.message(None).to_string(),
35 }),
36 }
37 }
38
39 fn build_logout_url(env: Environment, client: ClientCredentials<'_>) -> String {
40 let mut url_builder = tenant_base_url_builder(env, client);
41 url_builder.add_route("v1/client/users/sign_out");
42 url_builder.build()
43 }