Skip to main content

alibi_sqlx/store/entities/
api_key.rs

1use super::api_key_start::ApiKeyStart;
2use chrono::{DateTime, Utc};
3
4#[derive(Clone, Debug, PartialEq, sqlx::FromRow, crate::SqlxModel)]
5#[auth(table = "api_keys")]
6pub struct Model {
7    pub id: String,
8    pub name: Option<String>,
9    pub start: Option<ApiKeyStart>,
10    pub prefix: Option<String>,
11    #[sqlx(rename = "key")]
12    pub key_hash: String,
13    pub reference_id: String,
14    pub config_id: String,
15    pub refill_interval: Option<f64>,
16    pub refill_amount: Option<f64>,
17    pub last_refill_at: Option<DateTime<Utc>>,
18    pub enabled: bool,
19    pub rate_limit_enabled: bool,
20    pub rate_limit_time_window: Option<f64>,
21    pub rate_limit_max: Option<f64>,
22    pub request_count: Option<f64>,
23    pub remaining: Option<f64>,
24    pub last_request: Option<DateTime<Utc>>,
25    pub expires_at: Option<DateTime<Utc>>,
26    pub created_at: DateTime<Utc>,
27    pub updated_at: DateTime<Utc>,
28    pub permissions: Option<String>,
29    pub metadata: Option<String>,
30}
31
32fn to_rfc3339(value: DateTime<Utc>) -> String {
33    value.to_rfc3339()
34}
35
36impl From<&Model> for alibi_core::ApiKey {
37    fn from(model: &Model) -> Self {
38        Self {
39            id: model.id.clone(),
40            name: model.name.clone(),
41            start: model.start.as_ref().map(|start| start.as_str().to_owned()),
42            prefix: model.prefix.clone(),
43            key_hash: model.key_hash.clone(),
44            reference_id: model.reference_id.clone(),
45            config_id: model.config_id.clone(),
46            refill_interval: model.refill_interval,
47            refill_amount: model.refill_amount,
48            last_refill_at: model.last_refill_at.map(to_rfc3339),
49            enabled: model.enabled,
50            rate_limit_enabled: model.rate_limit_enabled,
51            rate_limit_time_window: model.rate_limit_time_window,
52            rate_limit_max: model.rate_limit_max,
53            request_count: model.request_count,
54            remaining: model.remaining,
55            last_request: model.last_request.map(to_rfc3339),
56            expires_at: model.expires_at.map(to_rfc3339),
57            created_at: to_rfc3339(model.created_at),
58            updated_at: to_rfc3339(model.updated_at),
59            permissions: model.permissions.clone(),
60            metadata: model.metadata.clone(),
61        }
62    }
63}