Skip to main content

coil_config/
http.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
4pub struct HttpConfig {
5    pub session: SessionConfig,
6    pub session_cookie: CookieConfig,
7    pub flash_cookie: CookieConfig,
8    pub csrf: CsrfConfig,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
12pub struct SessionConfig {
13    pub store: SessionStore,
14    pub idle_timeout_secs: u64,
15    pub absolute_timeout_secs: u64,
16}
17
18#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
19#[serde(rename_all = "snake_case")]
20pub enum SessionStore {
21    Memory,
22    Database,
23    Redis,
24    Valkey,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
28pub struct CookieConfig {
29    pub name: String,
30    #[serde(default)]
31    pub domain: Option<String>,
32    #[serde(default = "default_cookie_path")]
33    pub path: String,
34    pub same_site: SameSitePolicy,
35    #[serde(default = "default_true")]
36    pub secure: bool,
37    #[serde(default = "default_true")]
38    pub http_only: bool,
39    #[serde(default)]
40    pub protection: CookieProtection,
41}
42
43#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
44#[serde(rename_all = "snake_case")]
45pub enum SameSitePolicy {
46    Lax,
47    Strict,
48    None,
49}
50
51#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)]
52#[serde(rename_all = "snake_case")]
53pub enum CookieProtection {
54    #[default]
55    Signed,
56    Encrypted,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
60pub struct CsrfConfig {
61    pub enabled: bool,
62    pub field_name: String,
63    pub header_name: String,
64}
65
66fn default_cookie_path() -> String {
67    "/".to_string()
68}
69
70fn default_true() -> bool {
71    true
72}