Skip to content

Commit 11be2ef

Browse files
committed
add: decrypt and edit
1 parent 1a084ee commit 11be2ef

File tree

5 files changed

+78
-18
lines changed

5 files changed

+78
-18
lines changed

Cargo.lock

+39-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rooz"
3-
version = "0.90.0"
3+
version = "0.91.0"
44
edition = "2021"
55

66
[dependencies]
@@ -11,6 +11,7 @@ clap = { version = "4.5.16", features = ["derive", "env"] }
1111
clap_complete = "4.5.24"
1212
colored = "2.1.0"
1313
ctrlc = "3.4.5"
14+
edit = "0.1.5"
1415
env_logger = "0.11.5"
1516
futures = "0.3.30"
1617
handlebars = "6.0.0"

src/api/workspace.rs

+31-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ use bollard::{
55
service::{ContainerSummary, Volume},
66
volume::ListVolumesOptions,
77
};
8+
use linked_hash_map::LinkedHashMap;
89

910
use crate::{
1011
age_utils,
1112
api::WorkspaceApi,
1213
constants,
1314
labels::{self, Labels, ROLE},
1415
model::{
15-
config::FinalCfg,
16+
config::{FileFormat, FinalCfg, RoozCfg},
1617
types::{AnyError, ContainerResult, RunSpec, WorkSpec, WorkspaceResult},
1718
volume::{RoozVolume, CACHE_ROLE, WORK_ROLE},
1819
},
@@ -210,14 +211,40 @@ impl<'a> WorkspaceApi<'a> {
210211
Ok(())
211212
}
212213

214+
pub async fn decrypt(
215+
&self,
216+
vars: Option<LinkedHashMap<String, String>>,
217+
) -> Result<LinkedHashMap<String, String>, AnyError> {
218+
log::debug!("Checking if vars need decryption");
219+
if let Some(vars) = age_utils::needs_decryption(vars.clone()) {
220+
log::debug!("Decrypting vars");
221+
let identity = self.read_age_identity().await?;
222+
age_utils::decrypt(&identity, vars)
223+
} else {
224+
log::debug!("No encrypted vars found");
225+
Ok(vars.unwrap_or_default())
226+
}
227+
}
228+
213229
pub async fn edit(&self, workspace_key: &str) -> Result<(), AnyError> {
214230
let labels = Labels::new(Some(workspace_key), Some(WORK_ROLE));
215231
for c in self.api.container.get_all(&labels).await? {
216232
if let Some(labels) = c.labels {
217-
//TODO: implement editing
233+
let config_source = &labels[labels::CONFIG_SOURCE];
234+
let format = FileFormat::from_path(config_source);
235+
let config =
236+
RoozCfg::deserialize_config(&labels[labels::CONFIG_BODY], format)?.unwrap();
237+
let decrypted_config = RoozCfg {
238+
vars: Some(self.decrypt(config.clone().vars).await?),
239+
..config
240+
};
241+
let edited_config = edit::edit(decrypted_config.to_string(format)?)?;
242+
243+
println!("edited: {}", edited_config);
218244

219-
println!("{}", labels[labels::CONFIG_SOURCE]);
220-
println!("{}", labels[labels::CONFIG_BODY]);
245+
// encrypt
246+
// save to label
247+
// apply
221248
}
222249
}
223250
Ok(())

src/cmd/new.rs

+1-10
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::fs;
22

33
use crate::{
4-
age_utils,
54
api::WorkspaceApi,
65
cli::{WorkParams, WorkspacePersistence},
76
constants,
@@ -31,15 +30,7 @@ impl<'a> WorkspaceApi<'a> {
3130
}
3231
cfg_builder.from_cli(cli_params, None);
3332

34-
log::debug!("Checking if vars need decryption");
35-
if let Some(vars) = age_utils::needs_decryption(cfg_builder.clone().vars) {
36-
log::debug!("Decrypting vars");
37-
let identity = self.read_age_identity().await?;
38-
let decrypted_kv = age_utils::decrypt(&identity, vars)?;
39-
cfg_builder.vars = Some(decrypted_kv);
40-
} else {
41-
log::debug!("No encrypted vars found");
42-
}
33+
cfg_builder.vars = Some(self.decrypt(cfg_builder.clone().vars).await?);
4334

4435
cfg_builder.expand_vars()?;
4536

src/main.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ use crate::{
1616
api::{Api, ContainerApi, ExecApi, GitApi, ImageApi, VolumeApi, WorkspaceApi},
1717
backend::ContainerBackend,
1818
cli::{
19-
Cli, Commands::{Describe, Edit, Encrypt, Enter, List, New, Remote, Remove, Stop, System, Tmp}, CompletionParams, DescribeParams, EditParams, EncryptParams, ListParams, NewParams, RemoveParams, StopParams, TmpParams
19+
Cli,
20+
Commands::{Describe, Edit, Encrypt, Enter, List, New, Remote, Remove, Stop, System, Tmp},
21+
CompletionParams, DescribeParams, EditParams, EncryptParams, ListParams, NewParams,
22+
RemoveParams, StopParams, TmpParams,
2023
},
2124
cmd::remote,
2225
model::{config::RoozCfg, types::AnyError},
@@ -184,7 +187,7 @@ async fn main() -> Result<(), AnyError> {
184187
command: Edit(EditParams { name, .. }),
185188
..
186189
} => {
187-
workspace.edit(&name).await?;
190+
workspace.edit(&name).await?;
188191
}
189192

190193
Cli {

0 commit comments

Comments
 (0)