swarmhive_api_types/
api_token.rs1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use utoipa::ToSchema;
4use uuid::Uuid;
5
6use crate::role::PermissionName;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, ToSchema)]
11#[serde(rename_all = "snake_case")]
12pub enum ApiTokenKind {
13 Pat,
14 Api,
15}
16
17#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
20pub struct ApiToken {
21 pub id: Uuid,
22 pub owner_user_id: Uuid,
23 pub kind: ApiTokenKind,
24 pub name: String,
25 pub prefix: String,
28 pub permissions: Option<Vec<PermissionName>>,
30 pub last_used_at: Option<DateTime<Utc>>,
31 pub expires_at: Option<DateTime<Utc>>,
32 pub revoked_at: Option<DateTime<Utc>>,
33 pub created_at: DateTime<Utc>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
37pub struct CreateTokenRequest {
38 pub kind: ApiTokenKind,
39 pub name: String,
40 #[serde(default)]
44 pub permissions: Option<Vec<PermissionName>>,
45 #[serde(default)]
46 pub expires_at: Option<DateTime<Utc>>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
52pub struct CreateTokenResponse {
53 pub token: String,
55 #[serde(flatten)]
56 pub api_token: ApiToken,
57}