1
+ use bitwarden_api_api:: models:: GetSecretsRequestModel ;
1
2
use bitwarden_core:: Client ;
2
3
use schemars:: JsonSchema ;
3
4
use serde:: { Deserialize , Serialize } ;
4
5
use uuid:: Uuid ;
5
6
6
7
use crate :: { error:: SecretsManagerError , secrets:: SecretResponse } ;
7
8
9
+ use super :: SecretsResponse ;
10
+
8
11
#[ derive( Serialize , Deserialize , Debug , JsonSchema ) ]
9
12
#[ serde( rename_all = "camelCase" , deny_unknown_fields) ]
10
13
pub struct SecretGetRequest {
@@ -23,3 +26,85 @@ pub(crate) async fn get_secret(
23
26
24
27
SecretResponse :: process_response ( res, & mut key_store. context ( ) )
25
28
}
29
+
30
+ #[ derive( Serialize , Deserialize , Debug , JsonSchema ) ]
31
+ #[ serde( rename_all = "camelCase" , deny_unknown_fields) ]
32
+ /// Request to sync secrets for a specific project
33
+ pub struct SecretsByProjectGetRequest {
34
+ /// Project ID to sync secrets from
35
+ pub project_id : Uuid ,
36
+ }
37
+
38
+ // get_secrets_full(id: ProjectId);
39
+ // return: Vec<{ secrets_name: }>
40
+
41
+ // get_secrets_by_project_view(id: ProjectId)
42
+ // return: Vec<{ secret_id: SecretId, secret_name: &str, revision_date: DateTime<Utc> }>
43
+
44
+ // get_secret(id: SecretId)
45
+
46
+ // Will call on initial load to get all the data
47
+ pub ( crate ) async fn get_secrets_by_project (
48
+ client : & Client ,
49
+ input : & SecretsByProjectGetRequest ,
50
+ ) -> Result < SecretsResponse , SecretsManagerError > {
51
+ let config = client. internal . get_api_configurations ( ) . await ;
52
+ // let last_synced_date = input.last_synced_date.map(|date| date.to_rfc3339());
53
+
54
+ let secrets_with_project_list =
55
+ bitwarden_api_api:: apis:: secrets_api:: projects_project_id_secrets_get (
56
+ & config. api ,
57
+ input. project_id ,
58
+ // last_synced_date,
59
+ )
60
+ . await ?;
61
+
62
+ let secret_ids: Vec < Uuid > = secrets_with_project_list
63
+ . secrets
64
+ . unwrap_or_default ( )
65
+ . into_iter ( )
66
+ . map ( |s| s. id . unwrap_or_default ( ) )
67
+ . collect ( ) ;
68
+
69
+ let request = Some ( GetSecretsRequestModel { ids : secret_ids } ) ;
70
+
71
+ let res =
72
+ bitwarden_api_api:: apis:: secrets_api:: secrets_get_by_ids_post ( & config. api , request) . await ?;
73
+
74
+ let key_store = client. internal . get_key_store ( ) ;
75
+
76
+ SecretsResponse :: process_response ( res, & mut key_store. context ( ) )
77
+ }
78
+
79
+ #[ derive( Serialize , Deserialize , Debug , JsonSchema ) ]
80
+ #[ serde( rename_all = "camelCase" , deny_unknown_fields) ]
81
+ pub struct SecretSlimResponse {
82
+ pub id : Uuid ,
83
+ pub revision_date : chrono:: DateTime < chrono:: Utc > ,
84
+ }
85
+
86
+ pub ( crate ) async fn get_secrets_view_by_project (
87
+ client : & Client ,
88
+ input : & SecretsByProjectGetRequest ,
89
+ ) -> Result < Vec < SecretSlimResponse > , SecretsManagerError > {
90
+ let config = client. internal . get_api_configurations ( ) . await ;
91
+
92
+ let secrets_with_project_list =
93
+ bitwarden_api_api:: apis:: secrets_api:: projects_project_id_secrets_get (
94
+ & config. api ,
95
+ input. project_id ,
96
+ )
97
+ . await ?;
98
+
99
+ secrets_with_project_list
100
+ . secrets
101
+ . unwrap_or_default ( )
102
+ . into_iter ( )
103
+ . map ( |s| {
104
+ Ok ( SecretSlimResponse {
105
+ id : bitwarden_core:: require!( s. id) ,
106
+ revision_date : bitwarden_core:: require!( s. revision_date) . parse ( ) ?,
107
+ } )
108
+ } )
109
+ . collect ( )
110
+ }
0 commit comments