raps_kernel/auth/
types.rs1use serde::{Deserialize, Serialize};
7use std::time::{Duration, Instant};
8
9use crate::types::StoredToken;
10
11#[derive(Debug, Clone, Deserialize)]
13#[allow(dead_code)]
15pub struct UserInfo {
16 pub sub: String,
18 pub name: Option<String>,
20 pub given_name: Option<String>,
22 pub family_name: Option<String>,
24 pub preferred_username: Option<String>,
26 pub email: Option<String>,
28 pub email_verified: Option<bool>,
30 pub profile: Option<String>,
32 pub picture: Option<String>,
34}
35
36#[derive(Debug, Clone, Deserialize, Serialize)]
38pub struct TokenResponse {
39 pub access_token: String,
40 pub token_type: String,
41 pub expires_in: u64,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub refresh_token: Option<String>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub scope: Option<String>,
46}
47
48#[derive(Debug, Clone)]
50pub(crate) struct CachedToken {
51 pub(crate) access_token: String,
52 pub(crate) expires_at: Instant,
53}
54
55impl CachedToken {
56 pub(crate) fn is_valid(&self) -> bool {
57 self.expires_at > Instant::now() + Duration::from_secs(60)
58 }
59}
60
61#[derive(Debug, Clone)]
63pub(crate) struct TokenCache {
64 pub(crate) token: Option<StoredToken>,
65 pub(crate) refreshing: bool,
66}