context69_contracts/
auth.rs1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use utoipa::ToSchema;
4use uuid::Uuid;
5
6use crate::MembershipRole;
7
8#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
9pub struct AuthLoginRequest {
10 pub login_name: String,
11 pub password: String,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
15pub struct AuthUserResponse {
16 pub user_id: i64,
17 pub login_name: String,
18 pub display_name: String,
19 pub is_admin: bool,
20 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub disabled_at: Option<DateTime<Utc>>,
22 pub personal_group_key: String,
23 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub personal_group_role: Option<MembershipRole>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
28pub struct AuthTokenResponse {
29 pub access_token: String,
30 pub token_type: String,
31 pub expires_in_secs: u64,
32 pub user: AuthUserResponse,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
36pub struct AuthMeResponse {
37 pub user: AuthUserResponse,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, ToSchema)]
41#[serde(rename_all = "snake_case")]
42pub enum PersonalAccessTokenScope {
43 Search,
44 Workspace,
45 Library,
46 Sources,
47 Settings,
48 Admin,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
52pub struct CreatePersonalAccessTokenRequest {
53 pub name: String,
54 pub scopes: Vec<PersonalAccessTokenScope>,
55 pub expires_in_days: u16,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
59pub struct PersonalAccessTokenResponse {
60 pub token_id: Uuid,
61 pub name: String,
62 pub display_prefix: String,
63 pub scopes: Vec<PersonalAccessTokenScope>,
64 pub expires_at: DateTime<Utc>,
65 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub last_used_at: Option<DateTime<Utc>>,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
68 pub revoked_at: Option<DateTime<Utc>>,
69 pub created_at: DateTime<Utc>,
70 pub updated_at: DateTime<Utc>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
74pub struct CreatePersonalAccessTokenResponse {
75 pub access_token: String,
76 pub token: PersonalAccessTokenResponse,
77}