summaryrefslogtreecommitdiff
path: root/src/namespace/auth.rs
blob: c7a0c671751569c0b370e001fb79ff0f4496b5f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use std::collections::BTreeMap;
use crate::models::Credentials;
use crate::client::Client; 
use crate::client::{ClientTrait, ApiRequest};
use reqwest::Method;
use std::marker::PhantomData;

pub struct Namespace<T> {
    client: Client,
    _type: PhantomData<T>
}

impl<T> Namespace<T> {
    pub fn new(client: &Client) -> Self {
        Namespace {
            client: client.clone(),
            _type: PhantomData,
        }
    }
}

pub struct Auth {}
type AuthNamespace = Namespace<Auth>;

impl AuthNamespace {
    pub fn client_credentials(self, secret: &str) 
        -> ApiRequest<Credentials> {
            use self::client_credentials;
            client_credentials(self.client, secret)
        }
}

impl Client {
    pub fn auth(&self) -> AuthNamespace {
        AuthNamespace::new(self)
    }
}

//TODO: Implement scopes
pub fn client_credentials(client: Client, secret: &str)
    -> ApiRequest<Credentials> {

    let url =
        String::from("https://") + 
        client.auth_domain() + "/oauth2/token";

    let mut params = BTreeMap::new();
    params.insert("client_id", client.id());
    params.insert("client_secret", secret);
    params.insert("grant_type", "client_credentials");
    params.insert("scope", "");
    
    ApiRequest::new(url, params, client.clone(), Method::POST, None)
}