Skip to main content

pocketbase_sdk/
admin.rs

1use crate::client::Auth;
2use crate::client::Client;
3use crate::httpc::Httpc;
4use anyhow::{anyhow, Result};
5use serde::Deserialize;
6use serde_json::json;
7
8pub struct Admin<'a> {
9    pub base_url: &'a str,
10}
11
12#[derive(Debug, Clone, Deserialize)]
13struct AuthSuccessResponse {
14    token: String,
15}
16
17impl<'a> Admin<'a> {
18    pub fn auth_with_password(&self, identifier: &str, secret: &str) -> Result<Client<Auth>> {
19        let url = format!("{}/api/admins/auth-with-password", self.base_url);
20        let credentials = json!({
21            "identity": identifier,
22            "password": secret,
23        });
24        let client = Client::new(self.base_url);
25        match Httpc::post(&client, &url, credentials.to_string()) {
26            Ok(response) => {
27                let raw_response = response.into_json::<AuthSuccessResponse>();
28                match raw_response {
29                    Ok(AuthSuccessResponse { token }) => Ok(Client {
30                        base_url: self.base_url.to_string(),
31                        state: Auth,
32                        auth_token: Some(token),
33                    }),
34                    Err(e) => Err(anyhow!("{}", e)),
35                }
36            }
37            Err(e) => Err(anyhow!("{}", e)),
38        }
39    }
40
41    pub fn new(base_url: &'a str) -> Admin<'a> {
42        Admin { base_url }
43    }
44}