flagsmith_flag_engine/environments/
mod.rs1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4use super::features;
5use super::identities;
6use super::projects;
7use super::utils::datetime;
8pub mod builders;
9
10#[derive(Serialize, Deserialize, Debug, Clone)]
11pub struct Environment {
12 pub id: u32,
13 pub api_key: String,
14 pub project: projects::Project,
15 pub feature_states: Vec<features::FeatureState>,
16
17 #[serde(default)]
18 pub identity_overrides: Vec<identities::Identity>,
19}
20
21#[derive(Serialize, Deserialize, Debug)]
22pub struct EnvironmentAPIKey {
23 pub id: u32,
24 pub key: String,
25 pub active: bool,
26
27 #[serde(with = "datetime")]
28 pub created_at: DateTime<Utc>,
29 pub name: String,
30 pub client_api_key: String,
31 pub expires_at: Option<DateTime<Utc>>,
32}
33
34impl EnvironmentAPIKey {
35 pub fn is_valid(&self) -> bool {
36 if !self.active {
37 return false;
38 }
39 match self.expires_at {
40 None => return true,
41 Some(expires_at) if expires_at > Utc::now() => return true,
42 Some(_) => return false,
43 }
44 }
45}
46#[cfg(test)]
47mod tests {
48 use super::*;
49
50 #[test]
51 fn api_key_is_valid_returns_true_if_key_is_active_and_expired_is_null() {
52 let api_key_json = r#"{
53 "key": "ser.test_key",
54 "active": true,
55 "created_at": "2022-03-02T12:31:05.309861+00:00",
56 "client_api_key": "client_key",
57 "id": 1,
58 "name": "api key 1",
59 "expires_at": null
60 }"#;
61 let api_key: EnvironmentAPIKey = serde_json::from_str(api_key_json).unwrap();
62
63 assert!(api_key.is_valid())
64 }
65
66 #[test]
67 fn api_key_is_valid_returns_false_if_key_is_not_active() {
68 let api_key_json = r#"{
69 "key": "ser.test_key",
70 "active": false,
71 "created_at": "2022-03-02T12:31:05.309861+00:00",
72 "client_api_key": "client_key",
73 "id": 1,
74 "name": "api key 1",
75 "expires_at": null
76 }"#;
77 let api_key: EnvironmentAPIKey = serde_json::from_str(api_key_json).unwrap();
78
79 assert_eq!(api_key.is_valid(), false)
80 }
81
82 #[test]
83 fn api_key_is_valid_returns_false_if_key_is_active_but_expired() {
84 let api_key_json = r#"{
85 "key": "ser.test_key",
86 "active": true,
87 "created_at": "2022-03-02T12:31:05.309861+00:00",
88 "client_api_key": "client_key",
89 "id": 1,
90 "name": "api key 1",
91 "expires_at": "2022-03-02T12:32:05.309861+00:00"
92 }"#;
93 let api_key: EnvironmentAPIKey = serde_json::from_str(api_key_json).unwrap();
94
95 assert_eq!(api_key.is_valid(), false)
96 }
97}