reduct-base 1.19.3

Base crate for ReductStore
Documentation
// Copyright 2021-2026 ReductSoftware UG
// Licensed under the Apache License, Version 2.0

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

/// Permissions for a token
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct Permissions {
    /// Full access to all buckets and tokens
    #[serde(default)]
    pub full_access: bool,
    /// Read access to certain buckets
    #[serde(default)]
    pub read: Vec<String>,
    /// Write access to certain buckets
    #[serde(default)]
    pub write: Vec<String>,
}

/// Token
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct Token {
    /// Unique token name
    pub name: String,
    /// Unique token value
    pub value: String,
    /// Creation time
    pub created_at: DateTime<Utc>,
    /// Permissions
    pub permissions: Option<Permissions>,
    /// Provisioned
    pub is_provisioned: bool,
    /// Expiration time
    pub expires_at: Option<DateTime<Utc>>,
    /// Inactivity TTL in seconds
    #[serde(default)]
    pub ttl: Option<u64>,
    /// Last access time
    pub last_access: Option<DateTime<Utc>>,
    /// List of allowed client IP addresses for this token.
    /// Empty list means no IP restriction.
    #[serde(default)]
    pub ip_allowlist: Vec<String>,
    /// Computed marker for unusable token (`expires_at` or inactivity TTL)
    #[serde(default)]
    pub is_expired: bool,
}
/// Request for created token
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct TokenCreateRequest {
    pub permissions: Permissions,
    #[serde(default)]
    pub expires_at: Option<DateTime<Utc>>,
    #[serde(default)]
    pub ttl: Option<u64>,
    #[serde(default)]
    pub ip_allowlist: Vec<String>,
}

/// Response for created token
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct TokenCreateResponse {
    pub value: String,
    pub created_at: DateTime<Utc>,
}

/// Token repository
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct TokenList {
    pub tokens: Vec<Token>,
}