swarmhive_api_types/
device.rs1use chrono::{DateTime, Utc};
8use serde::{Deserialize, Serialize};
9use utoipa::ToSchema;
10
11use crate::api_token::ApiTokenKind;
12
13pub const DEVICE_GRANT_TYPE: &str = "urn:ietf:params:oauth:grant-type:device_code";
15
16#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
18pub struct DeviceCodeRequest {
19 pub client_id: String,
21 #[serde(default)]
23 pub scope: Option<String>,
24 #[serde(default)]
26 pub token_name: Option<String>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
31pub struct DeviceCodeResponse {
32 pub device_code: String,
34 pub user_code: String,
36 pub verification_uri: String,
38 pub verification_uri_complete: String,
40 pub expires_in: i64,
42 pub interval: i64,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
48pub struct DeviceTokenRequest {
49 pub grant_type: String,
51 pub device_code: String,
52 pub client_id: String,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
57pub struct DeviceTokenResponse {
58 pub token: String,
60 pub name: String,
61 pub kind: ApiTokenKind,
62 pub created_at: DateTime<Utc>,
63}
64
65#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
67#[serde(rename_all = "snake_case")]
68pub enum DeviceTokenError {
69 AuthorizationPending,
71 SlowDown,
73 AccessDenied,
75 ExpiredToken,
77 InvalidGrant,
79 UnsupportedGrantType,
81 InvalidRequest,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
87pub struct DeviceTokenErrorResponse {
88 pub error: DeviceTokenError,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
93pub struct DeviceVerifyRequest {
94 pub user_code: String,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
99pub struct DeviceAuthorizationView {
100 pub user_code: String,
101 pub client_id: String,
102 pub client_name: Option<String>,
104 pub created_at: DateTime<Utc>,
105 pub expires_at: DateTime<Utc>,
106}