roblox_api/api/auth_token_service/
v1.rs1use serde::{Deserialize, Serialize};
2
3use crate::{DateTime, Error, client::Client};
4
5pub const URL: &str = "https://apis.roblox.com/auth-token-service/v1";
6
7#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
10pub enum LoginStatus {
11 Created,
12 Validated,
13}
14
15#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
16pub struct LoginToken {
17 #[serde(rename = "code")]
18 pub code: String,
19 #[serde(rename = "status")]
20 pub status: String,
21 #[serde(rename = "privateKey")]
22 pub private_key: String,
23 #[serde(rename = "expirationTime")]
24 pub expiration_time: DateTime,
25 #[serde(rename = "imagePath")]
26 pub image_path: String,
27}
28
29#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
30pub struct LoginTokenStatus {
31 #[serde(rename = "status")]
32 pub status: LoginStatus,
33 #[serde(rename = "accountName")]
34 pub account_name: Option<String>,
35 #[serde(rename = "accountPictureUrl")]
36 pub account_picture_url: Option<String>,
37 #[serde(rename = "expirationTime")]
38 pub expiration_time: String,
39}
40
41pub async fn login_create(client: &mut Client) -> Result<LoginToken, Error> {
42 let result = client
43 .requestor
44 .client
45 .post(format!("{URL}/login/create"))
46 .headers(client.requestor.default_headers.clone())
47 .send()
48 .await;
49
50 let response = client.validate_response(result).await?;
51 client.requestor.parse_json::<LoginToken>(response).await
52}
53
54pub async fn login_cancel(client: &mut Client, code: &str) -> Result<(), Error> {
55 #[derive(Serialize)]
56 struct Request<'a> {
57 code: &'a str,
58 }
59
60 let result = client
61 .requestor
62 .client
63 .post(format!("{URL}/login/cancel"))
64 .json(&Request { code })
65 .headers(client.requestor.default_headers.clone())
66 .send()
67 .await;
68
69 client.validate_response(result).await?;
70 Ok(())
71}
72
73pub async fn login_status(
74 client: &mut Client,
75 code: &str,
76 key: &str,
77) -> Result<LoginTokenStatus, Error> {
78 #[derive(Serialize)]
79 struct Request<'a> {
80 code: &'a str,
81 #[serde(rename = "privateKey")]
82 key: &'a str,
83 }
84
85 let result = client
86 .requestor
87 .client
88 .post(format!("{URL}/login/status"))
89 .json(&Request { code, key })
90 .headers(client.requestor.default_headers.clone())
91 .send()
92 .await;
93
94 let response = client.validate_response(result).await?;
95 client
96 .requestor
97 .parse_json::<LoginTokenStatus>(response)
98 .await
99}