Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/Secret/
GetSecret.rs

1//! Read a value from the OS keychain. The gRPC proto carries only `key`;
2//! the app name is used as the keyring service scope.
3
4use tonic::{Response, Status};
5use CommonLibrary::Secret::SecretProvider::SecretProvider;
6
7use crate::{
8	RPC::CocoonService::CocoonServiceImpl,
9	Vine::Generated::{GetSecretRequest, GetSecretResponse},
10	dev_log,
11};
12
13pub async fn Fn(Service:&CocoonServiceImpl, Request:GetSecretRequest) -> Result<Response<GetSecretResponse>, Status> {
14	dev_log!("cocoon", "[CocoonService] get_secret: key={}", Request.key);
15
16	match Service.environment.GetSecret(String::new(), Request.key.clone()).await {
17		Ok(Some(Value)) => Ok(Response::new(GetSecretResponse { value:Value })),
18
19		Ok(None) => Ok(Response::new(GetSecretResponse { value:String::new() })),
20
21		Err(Error) => {
22			dev_log!(
23				"cocoon",
24				"warn: [CocoonService] get_secret failed key={}: {}",
25				Request.key,
26				Error
27			);
28
29			Err(Status::internal(format!("get_secret: {}", Error)))
30		},
31	}
32}