summaryrefslogtreecommitdiff
path: root/src/namespace/auth.rs
diff options
context:
space:
mode:
authorDavid Blajda <blajda@hotmail.com>2018-12-27 04:46:10 +0000
committerDavid Blajda <blajda@hotmail.com>2018-12-27 04:46:10 +0000
commitcb1b144e48ee357a76f551433d4886f092d259c8 (patch)
tree15606dc621e4d68f3bf3e9d27a44e6fd02a00fc5 /src/namespace/auth.rs
parent2e08d0c8abbfb9f989c61acb4f6c580719a65b42 (diff)
Use a generic client for both helix and kraken
Diffstat (limited to 'src/namespace/auth.rs')
-rw-r--r--src/namespace/auth.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/namespace/auth.rs b/src/namespace/auth.rs
new file mode 100644
index 0000000..577aa92
--- /dev/null
+++ b/src/namespace/auth.rs
@@ -0,0 +1,55 @@
+use std::collections::BTreeMap;
+use crate::models::Credentials;
+use crate::client::Client;
+const ID_DOMAIN: &'static str = "id.twitch.tv";
+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://") +
+ ID_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)
+}