1
1
use std:: collections:: HashMap ;
2
+ use std:: sync:: Arc ;
2
3
use std:: time:: SystemTime ;
3
4
4
5
use log:: info;
5
6
use rand:: { distributions:: Alphanumeric , Rng } ;
6
7
use tokio:: sync:: mpsc:: { unbounded_channel, UnboundedReceiver , UnboundedSender } ;
8
+ use tokio:: sync:: RwLock ;
7
9
8
10
use opf_models:: event:: Event :: { ResponseError , ResponseSimple } ;
9
11
use opf_models:: event:: { send_event_to, Domain , Event } ;
10
- use opf_models:: Workspace ;
12
+ use opf_models:: { KeyStore , Workspace } ;
11
13
12
14
use crate :: store:: DB ;
13
15
14
16
mod store;
15
17
mod store_export;
18
+ mod store_group;
19
+ mod store_keystore;
16
20
mod store_link;
17
21
mod store_module;
18
22
mod store_target;
@@ -21,6 +25,7 @@ mod store_workspace;
21
25
#[ derive( Debug ) ]
22
26
pub struct DBStore {
23
27
dbs : HashMap < i32 , DB > ,
28
+ keystore : Arc < RwLock < KeyStore > > ,
24
29
workspaces : HashMap < i32 , Workspace > ,
25
30
pub current_workspace : i32 ,
26
31
pub self_tx : UnboundedSender < Event > ,
@@ -64,6 +69,7 @@ pub async fn new(node_tx: UnboundedSender<(Domain, Event)>) -> (UnboundedSender<
64
69
(
65
70
tx,
66
71
DBStore {
72
+ keystore : Arc :: new ( RwLock :: new ( KeyStore ( HashMap :: new ( ) ) ) ) ,
67
73
dbs,
68
74
workspaces,
69
75
current_workspace : 0 ,
@@ -99,13 +105,24 @@ impl DBStore {
99
105
let _ = send_event_to( & self . node_tx, ( Domain :: CLI , ResponseError ( e. to_string( ) ) ) ) . await ;
100
106
}
101
107
} ,
108
+ Event :: CommandGroup ( command) => {
109
+ if let Err ( e) = db. on_group_command( command) . await {
110
+ let _ = send_event_to( & self . node_tx, ( Domain :: CLI , ResponseError ( e. to_string( ) ) ) ) . await ;
111
+ }
112
+ } ,
102
113
Event :: PrepareModule ( ( module_name, command) ) => {
103
- if let Err ( e) = db. on_prepare_module( module_name, command) . await {
114
+ let keystore = self . keystore. read( ) . await ;
115
+ if let Err ( e) = db. on_prepare_module( & keystore, module_name, command) . await {
116
+ let _ = send_event_to( & self . node_tx, ( Domain :: CLI , ResponseError ( e. to_string( ) ) ) ) . await ;
117
+ }
118
+ }
119
+ Event :: UpdateTargetMeta ( ( target_id, meta) ) => {
120
+ if let Err ( e) = db. on_target_meta_update( target_id, meta) . await {
104
121
let _ = send_event_to( & self . node_tx, ( Domain :: CLI , ResponseError ( e. to_string( ) ) ) ) . await ;
105
122
}
106
123
}
107
- Event :: ResultsModule ( targets) => {
108
- if let Err ( e) = db. on_results_targets( targets) . await {
124
+ Event :: ResultsModule ( group_id , targets) => {
125
+ if let Err ( e) = db. on_results_targets( group_id , targets) . await {
109
126
let _ = send_event_to( & self . node_tx, ( Domain :: CLI , ResponseError ( e. to_string( ) ) ) ) . await ;
110
127
}
111
128
}
@@ -122,6 +139,12 @@ impl DBStore {
122
139
let _ = send_event_to( & self . node_tx, ( Domain :: CLI , ResponseError ( e. to_string( ) ) ) ) . await ;
123
140
}
124
141
}
142
+ Event :: CommandKeystore ( command) => {
143
+ if let Err ( e) = self . on_keystore_command( command) . await {
144
+ let _ = send_event_to( & self . node_tx, ( Domain :: CLI , ResponseError ( e. to_string( ) ) ) ) . await ;
145
+ }
146
+ }
147
+ Event :: LoadKeystore ( keystore) => self . load_keystore( keystore) . await ,
125
148
_ => {
126
149
if let Err ( e) = send_event_to( & self . node_tx, ( Domain :: CLI , event) ) . await {
127
150
let _ = send_event_to( & self . node_tx, ( Domain :: CLI , ResponseError ( e. to_string( ) ) ) ) . await ;
@@ -132,4 +155,8 @@ impl DBStore {
132
155
}
133
156
}
134
157
}
158
+
159
+ pub async fn load_keystore ( & mut self , keystore : KeyStore ) {
160
+ self . keystore = Arc :: new ( RwLock :: new ( keystore) ) ;
161
+ }
135
162
}
0 commit comments