1use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Serialize, Deserialize)]
5#[serde(deny_unknown_fields)]
6pub struct StartRequest {
7 pub redirect_uri: String,
8 pub code_challenge: String,
9 pub state: String,
10 pub device_name: String,
11}
12
13#[derive(Serialize, Deserialize)]
14pub struct StartResponse {
15 pub authorization_url: String,
16}
17
18pub const CLIENT_ID: &str = "schematic-cli";
19
20#[derive(Serialize, Deserialize)]
21pub struct OAuthStartRequest {
22 pub client_id: String,
23 pub response_type: String,
24 pub code_challenge_method: String,
25 #[serde(flatten)]
26 pub request: StartRequest,
27}
28
29#[derive(Serialize, Deserialize)]
31#[serde(tag = "grant_type")]
32pub enum TokenRequest {
33 #[serde(rename = "authorization_code")]
34 AuthorizationCode {
35 client_id: String,
36 code: String,
37 code_verifier: String,
38 redirect_uri: String,
39 },
40 #[serde(rename = "refresh_token")]
41 RefreshToken { client_id: String, refresh_token: String },
42}
43
44#[derive(Clone, Serialize, Deserialize)]
45pub struct TokenResponse {
46 pub access_token: String,
47 pub token_type: String,
48 pub expires_in: u64,
49 pub refresh_token: String,
50 pub session_id: uuid::Uuid,
51 pub email: String,
52}
53
54#[derive(Serialize, Deserialize)]
55pub struct RevokeRequest {
56 pub client_id: String,
57 pub token: String,
58}