|
1 | 1 | use std::str::FromStr; |
2 | 2 |
|
3 | 3 | use crate::{ |
4 | | - api::{self, container, Api}, |
| 4 | + api::{container, Api}, |
5 | 5 | cli::InitParams, |
| 6 | + config::config::SystemConfig, |
6 | 7 | constants, |
7 | 8 | model::{ |
8 | 9 | types::{AnyError, RunMode, RunSpec, VolumeResult}, |
@@ -58,9 +59,26 @@ impl<'a> Api<'a> { |
58 | 59 | pub async fn init(&self, image: &str, uid: &str, spec: &InitParams) -> Result<(), AnyError> { |
59 | 60 | let image_id = self.image.ensure(&image, false).await?.id; |
60 | 61 |
|
| 62 | + let age_key = match spec.age_identity.clone() { |
| 63 | + None => age::x25519::Identity::generate(), |
| 64 | + Some(identity) => age::x25519::Identity::from_str(&identity)?, |
| 65 | + }; |
61 | 66 | self.volume |
62 | 67 | .ensure_mounts( |
63 | | - &vec![RoozVolume::system_config("/tmp/sys", None)], |
| 68 | + &vec![RoozVolume::system_config_init( |
| 69 | + "/tmp/sys", |
| 70 | + SystemConfig { |
| 71 | + age_key: Some(age_key.to_string().expose_secret().to_string()), |
| 72 | + gitconfig: Some( |
| 73 | + r#" |
| 74 | +[core] |
| 75 | + sshCommand = ssh -i /tmp/.ssh/id_ed25519 -o UserKnownHostsFile=/tmp/.ssh/known_hosts |
| 76 | +"# |
| 77 | + .trim() |
| 78 | + .to_string(), |
| 79 | + ), |
| 80 | + }, |
| 81 | + )?], |
64 | 82 | None, |
65 | 83 | Some(constants::ROOT_UID), |
66 | 84 | ) |
@@ -101,57 +119,6 @@ impl<'a> Api<'a> { |
101 | 119 | println!("Rooz has been already initialized. Use --force to reinitialize.") |
102 | 120 | } |
103 | 121 | } |
104 | | - |
105 | | - match self |
106 | | - .volume |
107 | | - .ensure_volume( |
108 | | - api::crypt::VOLUME_NAME.into(), |
109 | | - &RoozVolumeRole::AgeKey, |
110 | | - Some("age-key".into()), |
111 | | - spec.force, |
112 | | - ) |
113 | | - .await? |
114 | | - { |
115 | | - VolumeResult::Created { .. } => { |
116 | | - let (key, pubkey) = match spec.age_identity.clone() { |
117 | | - None => { |
118 | | - let key = age::x25519::Identity::generate(); |
119 | | - let pubkey = key.to_public(); |
120 | | - (key, pubkey) |
121 | | - } |
122 | | - Some(identity) => { |
123 | | - let key = age::x25519::Identity::from_str(&identity)?; |
124 | | - let pubkey = key.to_public(); |
125 | | - (key, pubkey) |
126 | | - } |
127 | | - }; |
128 | | - |
129 | | - let entrypoint = &format!( |
130 | | - r#"mkdir -p /tmp/.age && \ |
131 | | - echo -n '{}' > /tmp/.age/age.key && \ |
132 | | - echo -n '{}' > /tmp/.age/age.pub && \ |
133 | | - chmod 400 /tmp/.age/age.key && \ |
134 | | - chown -R {} /tmp/.age |
135 | | - "#, |
136 | | - &key.to_string().expose_secret(), |
137 | | - pubkey, |
138 | | - &uid |
139 | | - ); |
140 | | - |
141 | | - self.execute_init( |
142 | | - "rooz-init-age", |
143 | | - entrypoint, |
144 | | - api::crypt::VOLUME_NAME, |
145 | | - "/tmp/.age", |
146 | | - &image_id, |
147 | | - ) |
148 | | - .await?; |
149 | | - println!("{}", pubkey); |
150 | | - } |
151 | | - VolumeResult::AlreadyExists => { |
152 | | - println!("Rooz has been already initialized. Use --force to reinitialize.") |
153 | | - } |
154 | | - } |
155 | 122 | Ok(()) |
156 | 123 | } |
157 | 124 | } |
0 commit comments