Mountain/Track/Effect/CreateEffectForRequest/
Secrets.rs1use std::sync::Arc;
2
3use CommonLibrary::{Environment::Requires::Requires, Secret::SecretProvider::SecretProvider};
4use serde_json::{Value, json};
5use tauri::Runtime;
6
7use crate::Track::Effect::{
8 CreateEffectForRequest::Utilities::Params::{string_at, string_at_or},
9 MappedEffectType::MappedEffect,
10};
11
12fn ExtractSecretKey(Parameters:&Value) -> (String, String) {
16 if let Some(Object) = Parameters.as_object() {
17 let Key = Object.get("key").and_then(Value::as_str).unwrap_or("").to_string();
18
19 let ExtensionId = Object
20 .get("extension_id")
21 .or_else(|| Object.get("extensionId"))
22 .and_then(Value::as_str)
23 .unwrap_or("unknown")
24 .to_string();
25
26 (Key, ExtensionId)
27 } else {
28 let Key = string_at(Parameters, 0);
29
30 let ExtensionId = string_at_or(Parameters, 2, "unknown");
31
32 (Key, ExtensionId)
33 }
34}
35
36pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
37 match MethodName {
38 "secrets.get" => {
39 crate::effect!(run_time, {
40 let provider:Arc<dyn SecretProvider> = run_time.Environment.Require();
41
42 let (Key, ExtensionId) = ExtractSecretKey(&Parameters);
43
44 match provider.GetSecret(ExtensionId, Key).await {
45 Ok(Some(Value)) => Ok(json!(Value)),
46 Ok(None) => Ok(Value::Null),
47 Err(Error) => Err(Error.to_string()),
48 }
49 })
50 },
51
52 "secrets.store" => {
53 crate::effect!(run_time, {
54 let provider:Arc<dyn SecretProvider> = run_time.Environment.Require();
55
56 let (Key, ExtensionId) = ExtractSecretKey(&Parameters);
57
58 let SecretValue = if let Some(Object) = Parameters.as_object() {
59 Object.get("value").and_then(Value::as_str).unwrap_or("").to_string()
60 } else {
61 string_at(&Parameters, 1)
62 };
63
64 provider
65 .StoreSecret(ExtensionId, Key, SecretValue)
66 .await
67 .map(|_| json!(null))
68 .map_err(|e| e.to_string())
69 })
70 },
71
72 "secrets.delete" => {
73 crate::effect!(run_time, {
74 let provider:Arc<dyn SecretProvider> = run_time.Environment.Require();
75
76 let (Key, ExtensionId) = ExtractSecretKey(&Parameters);
77
78 provider
79 .DeleteSecret(ExtensionId, Key)
80 .await
81 .map(|_| json!(null))
82 .map_err(|e| e.to_string())
83 })
84 },
85
86 _ => None,
87 }
88}