From 0e2fc07881847157599127858304ee325bc561b0 Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Mon, 13 Nov 2023 16:22:35 -0700 Subject: [PATCH] remove js-engine --- core/Cargo.lock | 22 - core/Cargo.toml | 9 +- core/js-engine/Cargo.toml | 23 - .../src/artifacts/JS_SNAPSHOT.aarch64.bin | Bin 547549 -> 0 bytes .../src/artifacts/JS_SNAPSHOT.x86_64.bin | Bin 493225 -> 0 bytes core/js-engine/src/artifacts/loadModule.js | 242 ---- core/js-engine/src/lib.rs | 1219 ----------------- core/startos/Cargo.toml | 3 +- core/startos/src/bins/mod.rs | 4 - core/startos/src/procedure/js_scripts.rs | 43 - core/startos/src/procedure/mod.rs | 6 - core/startos/src/s9pk/builder.rs | 145 -- core/startos/src/s9pk/docker.rs | 95 -- core/startos/src/s9pk/git_hash.rs | 41 - core/startos/src/s9pk/header.rs | 187 --- core/startos/src/s9pk/manifest.rs | 211 --- core/startos/src/s9pk/reader.rs | 406 ------ core/startos/src/s9pk/specv2.md | 28 - core/startos/src/s9pk/v1/reader.rs | 10 - 19 files changed, 2 insertions(+), 2692 deletions(-) delete mode 100644 core/js-engine/Cargo.toml delete mode 100644 core/js-engine/src/artifacts/JS_SNAPSHOT.aarch64.bin delete mode 100644 core/js-engine/src/artifacts/JS_SNAPSHOT.x86_64.bin delete mode 100644 core/js-engine/src/artifacts/loadModule.js delete mode 100644 core/js-engine/src/lib.rs delete mode 100644 core/startos/src/s9pk/builder.rs delete mode 100644 core/startos/src/s9pk/docker.rs delete mode 100644 core/startos/src/s9pk/git_hash.rs delete mode 100644 core/startos/src/s9pk/header.rs delete mode 100644 core/startos/src/s9pk/manifest.rs delete mode 100644 core/startos/src/s9pk/reader.rs delete mode 100644 core/startos/src/s9pk/specv2.md diff --git a/core/Cargo.lock b/core/Cargo.lock index 8a6c1dd5c..3c3b693a2 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -2560,27 +2560,6 @@ dependencies = [ "time", ] -[[package]] -name = "js-engine" -version = "0.1.0" -dependencies = [ - "async-trait", - "container-init", - "dashmap", - "deno_ast", - "deno_core", - "helpers", - "itertools 0.11.0", - "lazy_static", - "models", - "reqwest", - "serde", - "serde_json", - "sha2 0.10.8", - "tokio", - "tracing", -] - [[package]] name = "js-sys" version = "0.3.65" @@ -4995,7 +4974,6 @@ dependencies = [ "jaq-core", "jaq-std", "josekit", - "js-engine", "jsonpath_lib", "lazy_static", "libc", diff --git a/core/Cargo.toml b/core/Cargo.toml index 894362522..143a830fc 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,10 +1,3 @@ [workspace] -members = [ - "container-init", - "helpers", - "js-engine", - "models", - "snapshot-creator", - "startos", -] +members = ["container-init", "helpers", "models", "snapshot-creator", "startos"] diff --git a/core/js-engine/Cargo.toml b/core/js-engine/Cargo.toml deleted file mode 100644 index 14205109b..000000000 --- a/core/js-engine/Cargo.toml +++ /dev/null @@ -1,23 +0,0 @@ -[package] -name = "js-engine" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -async-trait = "0.1.74" -dashmap = "5.5.3" -deno_core = "=0.222.0" -deno_ast = { version = "=0.29.5", features = ["transpiling"] } -container-init = { path = "../container-init" } -reqwest = { version = "0.11.22" } -sha2 = "0.10.8" -itertools = "0.11.0" -lazy_static = "1.4.0" -models = { path = "../models" } -helpers = { path = "../helpers" } -serde = { version = "1.0", features = ["derive", "rc"] } -serde_json = "1.0" -tokio = { version = "1", features = ["full"] } -tracing = "0.1" diff --git a/core/js-engine/src/artifacts/JS_SNAPSHOT.aarch64.bin b/core/js-engine/src/artifacts/JS_SNAPSHOT.aarch64.bin deleted file mode 100644 index 305aa2d4cb7922ecf830fd7131b70087418bebd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547549 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%0AGZyhwiB{T=s#RV`58P! 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 Um+J;v_1sa6xN@WfdoK9-A1@}8+W-In diff --git a/core/js-engine/src/artifacts/JS_SNAPSHOT.x86_64.bin b/core/js-engine/src/artifacts/JS_SNAPSHOT.x86_64.bin deleted file mode 100644 index 7f7d106897416a1875ee2ab96c7a5ea07f5d9871..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493225 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 z 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 Deno.core.opAsync("write_file", volumeId, path, toWrite); - -const readFile = ( - { volumeId = requireParam("volumeId"), path = requireParam("path") } = requireParam("options"), -) => Deno.core.opAsync("read_file", volumeId, path); - - - -const runDaemon = ( - { command = requireParam("command"), args = [] } = requireParam("options"), -) => { - let id = Deno.core.opAsync("start_command", command, args, "inherit", null); - let processId = id.then(x => x.processId) - let waitPromise = null; - return { - processId, - async wait() { - waitPromise = waitPromise || Deno.core.opAsync("wait_command", await processId) - return waitPromise - }, - async term(signal = 15) { - return Deno.core.opAsync("send_signal", await processId, 15) - } - } -}; -const runCommand = async ( - { command = requireParam("command"), args = [], timeoutMillis = 30000 } = requireParam("options"), -) => { - let id = Deno.core.opAsync("start_command", command, args, "collect", timeoutMillis); - let pid = id.then(x => x.processId) - return Deno.core.opAsync("wait_command", await pid) -}; -const signalGroup = async ( - { gid = requireParam("gid"), signal = requireParam("signal") } = requireParam("gid and signal") -) => { - return Deno.core.opAsync("signal_group", gid, signal); -}; -const sleep = (timeMs = requireParam("timeMs"), -) => Deno.core.opAsync("sleep", timeMs); - -const rename = ( - { - srcVolume = requireParam("srcVolume"), - dstVolume = requirePapram("dstVolume"), - srcPath = requireParam("srcPath"), - dstPath = requireParam("dstPath"), - } = requireParam("options"), -) => Deno.core.opAsync("rename", srcVolume, srcPath, dstVolume, dstPath); -const metadata = async ( - { volumeId = requireParam("volumeId"), path = requireParam("path") } = requireParam("options"), -) => { - const data = await Deno.core.opAsync("metadata", volumeId, path); - return { - ...data, - modified: maybeDate(data.modified), - created: maybeDate(data.created), - accessed: maybeDate(data.accessed), - }; -}; -const removeFile = ( - { volumeId = requireParam("volumeId"), path = requireParam("path") } = requireParam("options"), -) => Deno.core.opAsync("remove_file", volumeId, path); -const isSandboxed = () => Deno.core.ops["is_sandboxed"](); - -const writeJsonFile = ( - { - volumeId = requireParam("volumeId"), - path = requireParam("path"), - toWrite = requireParam("toWrite"), - } = requireParam("options"), -) => - writeFile({ - volumeId, - path, - toWrite: JSON.stringify(toWrite), - }); - -const chown = async ( - { - volumeId = requireParam("volumeId"), - path = requireParam("path"), - uid = requireParam("uid"), - } = requireParam("options"), -) => { - return await Deno.core.opAsync("chown", volumeId, path, uid); -}; - -const chmod = async ( - { - volumeId = requireParam("volumeId"), - path = requireParam("path"), - mode = requireParam("mode"), - } = requireParam("options"), -) => { - return await Deno.core.opAsync("chmod", volumeId, path, mode); -}; -const readJsonFile = async ( - { volumeId = requireParam("volumeId"), path = requireParam("path") } = requireParam("options"), -) => JSON.parse(await readFile({ volumeId, path })); -const createDir = ( - { volumeId = requireParam("volumeId"), path = requireParam("path") } = requireParam("options"), -) => Deno.core.opAsync("create_dir", volumeId, path); - -const readDir = ( - { volumeId = requireParam("volumeId"), path = requireParam("path") } = requireParam("options"), -) => Deno.core.opAsync("read_dir", volumeId, path); -const removeDir = ( - { volumeId = requireParam("volumeId"), path = requireParam("path") } = requireParam("options"), -) => Deno.core.opAsync("remove_dir", volumeId, path); -const trace = (whatToTrace = requireParam('whatToTrace')) => Deno.core.opAsync("log_trace", whatToTrace); -const warn = (whatToTrace = requireParam('whatToTrace')) => Deno.core.opAsync("log_warn", whatToTrace); -const error = (whatToTrace = requireParam('whatToTrace')) => Deno.core.opAsync("log_error", whatToTrace); -const debug = (whatToTrace = requireParam('whatToTrace')) => Deno.core.opAsync("log_debug", whatToTrace); -const info = (whatToTrace = requireParam('whatToTrace')) => Deno.core.opAsync("log_info", whatToTrace); -const fetch = async (url = requireParam ('url'), options = null) => { - const { body, ...response } = await Deno.core.opAsync("fetch", url, options); - const textValue = Promise.resolve(body); - return { - ...response, - text() { - return textValue; - }, - json() { - return textValue.then((x) => JSON.parse(x)); - }, - }; -}; - -const runRsync = ( - { - srcVolume = requireParam("srcVolume"), - dstVolume = requireParam("dstVolume"), - srcPath = requireParam("srcPath"), - dstPath = requireParam("dstPath"), - options = requireParam("options"), - } = requireParam("options"), -) => { - let id = Deno.core.opAsync("rsync", srcVolume, srcPath, dstVolume, dstPath, options); - let waitPromise = null; - return { - async id() { - return id - }, - async wait() { - waitPromise = waitPromise || Deno.core.opAsync("rsync_wait", await id) - return waitPromise - }, - async progress() { - return Deno.core.opAsync("rsync_progress", await id) - } - } -}; - -const diskUsage = async ({ - volumeId = requireParam("volumeId"), - path = requireParam("path"), -} = { volumeId: null, path: null }) => { - const [used, total] = await Deno.core.opAsync("disk_usage", volumeId, path); - return { used, total } -} - -const currentFunction = Deno.core.ops.current_function(); -const input = Deno.core.ops.get_input(); -const variable_args = Deno.core.ops.get_variable_args(); -const setState = (x) => Deno.core.ops.set_value(x); -const effects = { - chmod, - chown, - writeFile, - readFile, - writeJsonFile, - readJsonFile, - error, - warn, - debug, - trace, - info, - isSandboxed, - fetch, - removeFile, - createDir, - removeDir, - metadata, - rename, - runCommand, - sleep, - runDaemon, - signalGroup, - runRsync, - readDir, - diskUsage, -}; - -const defaults = { - "handleSignal": (effects, { gid, signal }) => { - return effects.signalGroup({ gid, signal }) - } -} - -const runFunction = jsonPointerValue(mainModule, currentFunction) || jsonPointerValue(defaults, currentFunction); -(async () => { - if (typeof runFunction !== "function") { - error(`Expecting ${currentFunction} to be a function`); - throw new Error(`Expecting ${currentFunction} to be a function`); - } - const answer = await runFunction(effects, input, ...variable_args); - setState(answer); -})(); diff --git a/core/js-engine/src/lib.rs b/core/js-engine/src/lib.rs deleted file mode 100644 index b0b9bea37..000000000 --- a/core/js-engine/src/lib.rs +++ /dev/null @@ -1,1219 +0,0 @@ -use std::collections::BTreeMap; -use std::path::{Path, PathBuf}; -use std::pin::Pin; -use std::sync::Arc; -use std::time::SystemTime; - -use deno_core::anyhow::{anyhow, bail}; -use deno_core::error::AnyError; -use deno_core::{ - resolve_import, Extension, FastString, JsRuntime, ModuleLoader, ModuleSource, - ModuleSourceFuture, ModuleSpecifier, ModuleType, OpDecl, ResolutionKind, RuntimeOptions, - Snapshot, -}; -use helpers::{script_dir, spawn_local, Rsync}; -use models::{PackageId, ProcedureName, Version, VolumeId}; -use serde::{Deserialize, Serialize}; -use serde_json::Value; -use tokio::io::AsyncReadExt; -use tokio::sync::Mutex; - -lazy_static::lazy_static! { - static ref DENO_GLOBAL_JS: ModuleSpecifier = "file:///deno_global.js".parse().unwrap(); - static ref LOAD_MODULE_JS: ModuleSpecifier = "file:///loadModule.js".parse().unwrap(); - static ref EMBASSY_JS: ModuleSpecifier = "file:///embassy.js".parse().unwrap(); -} - -pub trait PathForVolumeId: Send + Sync { - fn path_for( - &self, - data_dir: &Path, - package_id: &PackageId, - version: &Version, - volume_id: &VolumeId, - ) -> Option; - fn readonly(&self, volume_id: &VolumeId) -> bool; -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct JsCode(Arc); - -#[derive(Debug, Clone, Copy)] -pub enum JsError { - Unknown, - Javascript, - Engine, - BoundryLayerSerDe, - Tokio, - FileSystem, - Code(i32), - Timeout, - NotValidProcedureName, -} - -impl JsError { - pub fn as_code_num(&self) -> i32 { - match self { - JsError::Unknown => 1, - JsError::Javascript => 2, - JsError::Engine => 3, - JsError::BoundryLayerSerDe => 4, - JsError::Tokio => 5, - JsError::FileSystem => 6, - JsError::NotValidProcedureName => 7, - JsError::Code(code) => *code, - JsError::Timeout => 143, - } - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct MetadataJs { - file_type: String, - is_dir: bool, - is_file: bool, - is_symlink: bool, - len: u64, - modified: Option, - accessed: Option, - created: Option, - readonly: bool, - gid: u32, - mode: u32, - uid: u32, -} - -#[cfg(target_arch = "x86_64")] -const SNAPSHOT_BYTES: &[u8] = include_bytes!("./artifacts/JS_SNAPSHOT.x86_64.bin"); - -#[cfg(target_arch = "aarch64")] -const SNAPSHOT_BYTES: &[u8] = include_bytes!("./artifacts/JS_SNAPSHOT.aarch64.bin"); - -#[derive(Clone)] -struct JsContext { - sandboxed: bool, - datadir: PathBuf, - run_function: String, - version: Version, - package_id: PackageId, - volumes: Arc, - input: Value, - variable_args: Vec, - rsyncs: Arc)>>, -} -#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] -#[serde(rename_all = "kebab-case")] -enum ResultType { - Error(String), - ErrorCode(i32, String), - Result(serde_json::Value), -} -#[derive(Clone, Default)] -struct AnswerState(std::sync::Arc>); - -#[derive(Clone, Debug)] -struct ModsLoader { - code: JsCode, -} - -impl ModuleLoader for ModsLoader { - fn resolve( - &self, - specifier: &str, - referrer: &str, - _is_main: ResolutionKind, - ) -> Result { - if referrer.contains("embassy") { - bail!("Embassy.js cannot import anything else"); - } - let s = resolve_import(specifier, referrer).unwrap(); - Ok(s) - } - - fn load( - &self, - module_specifier: &ModuleSpecifier, - maybe_referrer: Option<&ModuleSpecifier>, - is_dyn_import: bool, - ) -> Pin> { - let module_specifier = module_specifier.as_str().to_owned(); - let module = match &*module_specifier { - "file:///deno_global.js" => Ok(ModuleSource::new( - ModuleType::JavaScript, - FastString::Static("const old_deno = Deno; Deno = null; export default old_deno"), - &DENO_GLOBAL_JS, - )), - "file:///loadModule.js" => Ok(ModuleSource::new( - ModuleType::JavaScript, - FastString::Static(include_str!("./artifacts/loadModule.js")), - &LOAD_MODULE_JS, - )), - "file:///embassy.js" => Ok(ModuleSource::new( - ModuleType::JavaScript, - self.code.0.clone().into(), - &EMBASSY_JS, - )), - - x => Err(anyhow!("Not allowed to import: {}", x)), - }; - let module = module.and_then(|m| { - if is_dyn_import { - bail!("Will not import dynamic"); - } - match &maybe_referrer { - Some(x) if x.as_str() == "file:///embassy.js" => { - bail!("StartJS is not allowed to import") - } - _ => (), - } - Ok(m) - }); - Box::pin(async move { module }) - } -} - -pub struct JsExecutionEnvironment { - sandboxed: bool, - base_directory: PathBuf, - module_loader: ModsLoader, - package_id: PackageId, - version: Version, - volumes: Arc, -} - -impl JsExecutionEnvironment { - pub async fn load_from_package( - data_directory: impl AsRef, - package_id: &PackageId, - version: &Version, - volumes: Box, - ) -> Result { - let data_dir = data_directory.as_ref(); - let base_directory = data_dir; - let js_code = JsCode({ - let file_path = script_dir(data_dir, package_id, version).join("embassy.js"); - let mut file = match tokio::fs::File::open(file_path.clone()).await { - Ok(x) => x, - Err(e) => { - tracing::debug!("path: {:?}", file_path); - tracing::debug!("{:?}", e); - return Err(( - JsError::FileSystem, - format!("The file opening '{:?}' created error: {}", file_path, e), - )); - } - }; - let mut buffer = Default::default(); - if let Err(err) = file.read_to_string(&mut buffer).await { - tracing::debug!("{:?}", err); - return Err(( - JsError::FileSystem, - format!("The file reading created error: {}", err), - )); - }; - buffer.into() - }); - Ok(JsExecutionEnvironment { - base_directory: base_directory.to_owned(), - module_loader: ModsLoader { code: js_code }, - package_id: package_id.clone(), - version: version.clone(), - volumes: volumes.into(), - sandboxed: false, - }) - } - pub fn read_only_effects(mut self) -> Self { - self.sandboxed = true; - self - } - - pub async fn run_action Deserialize<'de>>( - self, - procedure_name: ProcedureName, - input: Option, - variable_args: Vec, - ) -> Result { - let input = match serde_json::to_value(input) { - Ok(a) => a, - Err(err) => { - tracing::error!("{}", err); - tracing::debug!("{:?}", err); - return Err(( - JsError::BoundryLayerSerDe, - "Couldn't convert input".to_string(), - )); - } - }; - let safer_handle = spawn_local(|| self.execute(procedure_name, input, variable_args)).await; - let output = safer_handle.await.unwrap()?; - match serde_json::from_value(output.clone()) { - Ok(x) => Ok(x), - Err(err) => { - tracing::error!("{}", err); - tracing::debug!("{:?}", err); - Err(( - JsError::BoundryLayerSerDe, - format!( - "Couldn't convert output = {:#?} to the correct type", - serde_json::to_string_pretty(&output).unwrap_or_default() - ), - )) - } - } - } - fn declarations() -> Vec { - vec![ - fns::chown::decl(), - fns::chmod::decl(), - fns::fetch::decl(), - fns::read_file::decl(), - fns::metadata::decl(), - fns::write_file::decl(), - fns::rename::decl(), - fns::remove_file::decl(), - fns::create_dir::decl(), - fns::remove_dir::decl(), - fns::read_dir::decl(), - fns::disk_usage::decl(), - fns::current_function::decl(), - fns::log_trace::decl(), - fns::log_warn::decl(), - fns::log_error::decl(), - fns::log_debug::decl(), - fns::log_info::decl(), - fns::get_input::decl(), - fns::get_variable_args::decl(), - fns::set_value::decl(), - fns::is_sandboxed::decl(), - fns::sleep::decl(), - fns::rsync::decl(), - fns::rsync_wait::decl(), - fns::rsync_progress::decl(), - ] - } - - async fn execute( - self, - procedure_name: ProcedureName, - input: Value, - variable_args: Vec, - ) -> Result { - let base_directory = self.base_directory.clone(); - let answer_state = AnswerState::default(); - let ext_answer_state = answer_state.clone(); - let js_ctx = JsContext { - datadir: base_directory, - run_function: procedure_name - .js_function_name() - .map(Ok) - .unwrap_or_else(|| { - Err(( - JsError::NotValidProcedureName, - format!("procedure is not value: {:?}", procedure_name), - )) - })?, - package_id: self.package_id.clone(), - volumes: self.volumes.clone(), - version: self.version.clone(), - sandboxed: self.sandboxed, - input, - variable_args, - rsyncs: Default::default(), - }; - let ext = Extension::builder("embassy") - .ops(Self::declarations()) - .state(move |state| { - state.put(ext_answer_state.clone()); - state.put(js_ctx); - }) - .build(); - - let loader = std::rc::Rc::new(self.module_loader.clone()); - let runtime_options = RuntimeOptions { - module_loader: Some(loader), - extensions: vec![ext], - startup_snapshot: Some(Snapshot::Static(SNAPSHOT_BYTES)), - ..Default::default() - }; - let mut runtime = JsRuntime::new(runtime_options); - - let future = async move { - let mod_id = runtime - .load_main_module(&"file:///loadModule.js".parse().unwrap(), None) - .await?; - let evaluated = runtime.mod_evaluate(mod_id); - let res = runtime.run_event_loop(false).await; - res?; - evaluated.await??; - Ok::<_, AnyError>(()) - }; - - future.await.map_err(|e| { - tracing::debug!("{:?}", e); - (JsError::Javascript, format!("{}", e)) - })?; - - let answer = answer_state.0.lock().clone(); - Ok(answer) - } -} - -/// Note: Make sure that we have the assumption that all these methods are callable at any time, and all call restrictions should be in rust -mod fns { - use std::cell::RefCell; - use std::collections::BTreeMap; - use std::convert::TryFrom; - use std::fs::Permissions; - use std::os::unix::fs::MetadataExt; - use std::os::unix::prelude::PermissionsExt; - use std::path::{Path, PathBuf}; - use std::rc::Rc; - use std::time::Duration; - - use container_init::ProcessId; - use deno_core::anyhow::{anyhow, bail}; - use deno_core::error::AnyError; - use deno_core::*; - use helpers::{to_tmp_path, AtomicFile, Rsync, RsyncOptions}; - use itertools::Itertools; - use models::VolumeId; - use serde::{Deserialize, Serialize}; - use serde_json::Value; - use tokio::io::AsyncWriteExt; - use tokio::process::Command; - - use super::{AnswerState, JsContext}; - use crate::{system_time_as_unix_ms, MetadataJs}; - - #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, Default)] - struct FetchOptions { - method: Option, - headers: Option>, - body: Option, - } - #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, Default)] - struct FetchResponse { - method: String, - ok: bool, - status: u32, - headers: BTreeMap, - body: Option, - } - #[op] - async fn fetch( - state: Rc>, - url: url::Url, - options: Option, - ) -> Result { - let sandboxed = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - ctx.sandboxed - }; - - if sandboxed { - bail!("Will not run fetch in sandboxed mode"); - } - - let client = reqwest::Client::new(); - let options = options.unwrap_or_default(); - let method = options - .method - .unwrap_or_else(|| "GET".to_string()) - .to_uppercase(); - let mut request_builder = match &*method { - "GET" => client.get(url), - "POST" => client.post(url), - "PUT" => client.put(url), - "DELETE" => client.delete(url), - "HEAD" => client.head(url), - "PATCH" => client.patch(url), - x => bail!("Unsupported method: {}", x), - }; - if let Some(headers) = options.headers { - for (key, value) in headers { - request_builder = request_builder.header(key, value); - } - } - if let Some(body) = options.body { - request_builder = request_builder.body(body); - } - let response = request_builder.send().await?; - - let fetch_response = FetchResponse { - method, - ok: response.status().is_success(), - status: response.status().as_u16() as u32, - headers: response - .headers() - .iter() - .filter_map(|(head, value)| { - Some((format!("{}", head), value.to_str().ok()?.to_string())) - }) - .collect(), - body: response.text().await.ok(), - }; - - Ok(fetch_response) - } - - #[op] - async fn read_file( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result { - let volume_path = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - ctx.volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))? - }; - //get_path_for in volume.rs - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - let answer = tokio::fs::read_to_string(new_file).await?; - Ok(answer) - } - #[op] - async fn metadata( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result { - let volume_path = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - ctx.volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))? - }; - //get_path_for in volume.rs - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - let answer = tokio::fs::metadata(new_file).await?; - let metadata_js = MetadataJs { - file_type: format!("{:?}", answer.file_type()), - is_dir: answer.is_dir(), - is_file: answer.is_file(), - is_symlink: answer.is_symlink(), - len: answer.len(), - modified: answer - .modified() - .ok() - .as_ref() - .and_then(system_time_as_unix_ms), - accessed: answer - .accessed() - .ok() - .as_ref() - .and_then(system_time_as_unix_ms), - created: answer - .created() - .ok() - .as_ref() - .and_then(system_time_as_unix_ms), - readonly: answer.permissions().readonly(), - gid: answer.gid(), - mode: answer.mode(), - uid: answer.uid(), - }; - - Ok(metadata_js) - } - #[op] - async fn write_file( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - write: String, - ) -> Result<(), AnyError> { - let (volumes, volume_path) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; - (ctx.volumes.clone(), volume_path) - }; - if volumes.readonly(&volume_id) { - bail!("Volume {} is readonly", volume_id); - } - - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - let parent_new_file = new_file - .parent() - .ok_or_else(|| anyhow!("Expecting that file is not root"))?; - // With the volume check - if !is_subset(&volume_path, &parent_new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - let new_volume_tmp = to_tmp_path(&volume_path).map_err(|e| anyhow!("{}", e))?; - let hashed_name = { - use std::os::unix::ffi::OsStrExt; - - use sha2::{Digest, Sha256}; - let mut hasher = Sha256::new(); - - hasher.update(path_in.as_os_str().as_bytes()); - let result = hasher.finalize(); - format!("{:X}", result) - }; - let temp_file = new_volume_tmp.join(&hashed_name); - let mut file = AtomicFile::new(&new_file, Some(&temp_file)) - .await - .map_err(|e| anyhow!("{}", e))?; - file.write_all(write.as_bytes()).await?; - file.save().await.map_err(|e| anyhow!("{}", e))?; - Ok(()) - } - #[op] - async fn rename( - state: Rc>, - src_volume: VolumeId, - src_path: PathBuf, - dst_volume: VolumeId, - dst_path: PathBuf, - ) -> Result<(), AnyError> { - let (volumes, volume_path, volume_path_out) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &src_volume) - .ok_or_else(|| anyhow!("There is no {} in volumes", src_volume))?; - let volume_path_out = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &dst_volume) - .ok_or_else(|| anyhow!("There is no {} in volumes", dst_volume))?; - (ctx.volumes.clone(), volume_path, volume_path_out) - }; - if volumes.readonly(&dst_volume) { - bail!("Volume {} is readonly", dst_volume); - } - - let src_path = src_path.strip_prefix("/").unwrap_or(&src_path); - let old_file = volume_path.join(src_path); - let parent_old_file = old_file - .parent() - .ok_or_else(|| anyhow!("Expecting that file is not root"))?; - // With the volume check - if !is_subset(&volume_path, &parent_old_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - old_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - - let dst_path = dst_path.strip_prefix("/").unwrap_or(&dst_path); - let new_file = volume_path_out.join(dst_path); - let parent_new_file = new_file - .parent() - .ok_or_else(|| anyhow!("Expecting that file is not root"))?; - // With the volume check - if !is_subset(&volume_path_out, &parent_new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path_out.to_string_lossy(), - ); - } - tokio::fs::rename(old_file, new_file).await?; - Ok(()) - } - - #[op] - async fn rsync( - state: Rc>, - src_volume: VolumeId, - src_path: PathBuf, - dst_volume: VolumeId, - dst_path: PathBuf, - options: RsyncOptions, - ) -> Result { - let (volumes, volume_path, volume_path_out, rsyncs) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &src_volume) - .ok_or_else(|| anyhow!("There is no {} in volumes", src_volume))?; - let volume_path_out = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &dst_volume) - .ok_or_else(|| anyhow!("There is no {} in volumes", dst_volume))?; - ( - ctx.volumes.clone(), - volume_path, - volume_path_out, - ctx.rsyncs.clone(), - ) - }; - if volumes.readonly(&dst_volume) { - bail!("Volume {} is readonly", dst_volume); - } - - let src_path = src_path.strip_prefix("/").unwrap_or(&src_path); - let src = volume_path.join(src_path); - // With the volume check - if !is_subset(&volume_path, &src).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - src.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - if tokio::fs::metadata(&src).await.is_err() { - bail!("Source at {} does not exists", src.to_string_lossy()); - } - - let dst_path = src_path.strip_prefix("/").unwrap_or(&dst_path); - let dst = volume_path_out.join(dst_path); - // With the volume check - if !is_subset(&volume_path_out, &dst).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - dst.to_string_lossy(), - volume_path_out.to_string_lossy(), - ); - } - - let running_rsync = Rsync::new(src, dst, options) - .await - .map_err(|e| anyhow::anyhow!("{:?}", e.source))?; - let insert_id = { - let mut rsyncs = rsyncs.lock().await; - let next = rsyncs.0 + 1; - rsyncs.0 = next; - rsyncs.1.insert(next, running_rsync); - next - }; - Ok(insert_id) - } - - #[op] - async fn rsync_wait(state: Rc>, id: usize) -> Result<(), AnyError> { - let rsyncs = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - ctx.rsyncs.clone() - }; - let running_rsync = match rsyncs.lock().await.1.remove(&id) { - Some(a) => a, - None => bail!("Couldn't find rsync at id {id}"), - }; - running_rsync - .wait() - .await - .map_err(|x| anyhow::anyhow!("{}", x.source))?; - Ok(()) - } - #[op] - async fn rsync_progress(state: Rc>, id: usize) -> Result { - use futures::StreamExt; - let rsyncs = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - ctx.rsyncs.clone() - }; - let mut running_rsync = match rsyncs.lock().await.1.remove(&id) { - Some(a) => a, - None => bail!("Couldn't find rsync at id {id}"), - }; - let progress = running_rsync.progress.next().await.unwrap_or_default(); - rsyncs.lock().await.1.insert(id, running_rsync); - Ok(progress) - } - #[op] - async fn remove_file( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result<(), AnyError> { - let (volumes, volume_path) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; - (ctx.volumes.clone(), volume_path) - }; - if volumes.readonly(&volume_id) { - bail!("Volume {} is readonly", volume_id); - } - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - // With the volume check - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - tokio::fs::remove_file(new_file).await?; - Ok(()) - } - #[op] - async fn remove_dir( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result<(), AnyError> { - let (volumes, volume_path) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; - (ctx.volumes.clone(), volume_path) - }; - if volumes.readonly(&volume_id) { - bail!("Volume {} is readonly", volume_id); - } - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - // With the volume check - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - tokio::fs::remove_dir_all(new_file).await?; - Ok(()) - } - #[op] - async fn create_dir( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result<(), AnyError> { - let (volumes, volume_path) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; - (ctx.volumes.clone(), volume_path) - }; - if volumes.readonly(&volume_id) { - bail!("Volume {} is readonly", volume_id); - } - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - - // With the volume check - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - tokio::fs::create_dir_all(new_file).await?; - Ok(()) - } - #[op] - async fn read_dir( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result, AnyError> { - let volume_path = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - ctx.volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))? - }; - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - - // With the volume check - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - let mut reader = tokio::fs::read_dir(&new_file).await?; - let mut paths: Vec = Vec::new(); - let origin_path = format!("{}/", new_file.to_str().unwrap_or_default()); - let remove_new_file = |other_path: String| other_path.replacen(&origin_path, "", 1); - let has_origin_path = |other_path: &String| other_path.starts_with(&origin_path); - while let Some(entry) = reader.next_entry().await? { - entry - .path() - .to_str() - .into_iter() - .map(ToString::to_string) - .filter(&has_origin_path) - .map(&remove_new_file) - .for_each(|x| paths.push(x)); - } - paths.sort(); - Ok(paths) - } - - #[op] - async fn disk_usage( - state: Rc>, - volume_id: Option, - path_in: Option, - ) -> Result<(u64, u64), AnyError> { - let (base_path, volume_path) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = if let Some(volume_id) = volume_id { - Some( - ctx.volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?, - ) - } else { - None - }; - (ctx.datadir.join("package-data"), volume_path) - }; - let path = if let (Some(volume_path), Some(path_in)) = (volume_path, path_in) { - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - Some(volume_path.join(path_in)) - } else { - None - }; - - if let Some(path) = path { - let size = String::from_utf8( - Command::new("df") - .arg("--output=size") - .arg("--block-size=1") - .arg(&base_path) - .stdout(std::process::Stdio::piped()) - .output() - .await? - .stdout, - )? - .lines() - .nth(1) - .unwrap_or_default() - .parse()?; - let used = String::from_utf8( - Command::new("du") - .arg("-s") - .arg("--block-size=1") - .arg(path) - .stdout(std::process::Stdio::piped()) - .output() - .await? - .stdout, - )? - .split_ascii_whitespace() - .next() - .unwrap_or_default() - .parse()?; - Ok((used, size)) - } else { - String::from_utf8( - Command::new("df") - .arg("--output=used,size") - .arg("--block-size=1") - .arg(&base_path) - .stdout(std::process::Stdio::piped()) - .output() - .await? - .stdout, - )? - .lines() - .nth(1) - .unwrap_or_default() - .split_ascii_whitespace() - .next_tuple() - .and_then(|(used, size)| Some((used.parse().ok()?, size.parse().ok()?))) - .ok_or_else(|| anyhow!("invalid output from df")) - } - } - - #[op] - fn current_function(state: &mut OpState) -> Result { - let ctx = state.borrow::(); - Ok(ctx.run_function.clone()) - } - - #[op] - async fn log_trace(state: Rc>, input: String) -> Result<(), AnyError> { - let ctx = { - let state = state.borrow(); - state.borrow::().clone() - }; - tracing::trace!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - #[op] - async fn log_warn(state: Rc>, input: String) -> Result<(), AnyError> { - let ctx = { - let state = state.borrow(); - state.borrow::().clone() - }; - tracing::warn!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - #[op] - async fn log_error(state: Rc>, input: String) -> Result<(), AnyError> { - let ctx = { - let state = state.borrow(); - state.borrow::().clone() - }; - tracing::error!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - #[op] - async fn log_debug(state: Rc>, input: String) -> Result<(), AnyError> { - let ctx = { - let state = state.borrow(); - state.borrow::().clone() - }; - tracing::debug!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - #[op] - async fn log_info(state: Rc>, input: String) -> Result<(), AnyError> { - let (package_id, run_function) = { - let state = state.borrow(); - let ctx: JsContext = state.borrow::().clone(); - (ctx.package_id, ctx.run_function) - }; - tracing::info!( - package_id = tracing::field::display(&package_id), - run_function = tracing::field::display(&run_function), - "{}", - input - ); - Ok(()) - } - - #[op] - fn get_input(state: &mut OpState) -> Result { - let ctx = state.borrow::(); - Ok(ctx.input.clone()) - } - #[op] - fn get_variable_args(state: &mut OpState) -> Result, AnyError> { - let ctx = state.borrow::(); - Ok(ctx.variable_args.clone()) - } - #[op] - fn set_value(state: &mut OpState, value: Value) -> Result<(), AnyError> { - let mut answer = state.borrow::().0.lock(); - *answer = value; - Ok(()) - } - #[op] - fn is_sandboxed(state: &mut OpState) -> Result { - let ctx = state.borrow::(); - Ok(ctx.sandboxed) - } - - #[derive(Debug, Clone, Serialize, Deserialize)] - #[serde(rename_all = "camelCase")] - pub struct StartCommand { - process_id: ProcessId, - } - - #[op] - async fn sleep(time_ms: u64) -> Result<(), AnyError> { - tokio::time::sleep(Duration::from_millis(time_ms)).await; - - Ok(()) - } - - #[op] - async fn chown( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - ownership: u32, - ) -> Result<(), AnyError> { - let sandboxed = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - ctx.sandboxed - }; - - if sandboxed { - bail!("Will not run chown in sandboxed mode"); - } - - let (volumes, volume_path) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; - (ctx.volumes.clone(), volume_path) - }; - if volumes.readonly(&volume_id) { - bail!("Volume {} is readonly", volume_id); - } - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - // With the volume check - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - let output = tokio::process::Command::new("chown") - .arg("--recursive") - .arg(format!("{ownership}")) - .arg(new_file.as_os_str()) - .output() - .await?; - if !output.status.success() { - return Err(anyhow!("Chown Error")); - } - Ok(()) - } - #[op] - async fn chmod( - state: Rc>, - volume_id: VolumeId, - path_in: PathBuf, - mode: u32, - ) -> Result<(), AnyError> { - let sandboxed = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - ctx.sandboxed - }; - - if sandboxed { - bail!("Will not run chmod in sandboxed mode"); - } - - let (volumes, volume_path) = { - let state = state.borrow(); - let ctx: &JsContext = state.borrow(); - let volume_path = ctx - .volumes - .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) - .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; - (ctx.volumes.clone(), volume_path) - }; - if volumes.readonly(&volume_id) { - bail!("Volume {} is readonly", volume_id); - } - let path_in = path_in.strip_prefix("/").unwrap_or(&path_in); - let new_file = volume_path.join(path_in); - // With the volume check - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - tokio::fs::set_permissions(new_file, Permissions::from_mode(mode)).await?; - Ok(()) - } - /// We need to make sure that during the file accessing, we don't reach beyond our scope of control - async fn is_subset( - parent: impl AsRef, - child: impl AsRef, - ) -> Result { - let child = { - let mut child_count = 0; - let mut child = child.as_ref(); - loop { - if child.ends_with("..") { - child_count += 1; - } else if child_count > 0 { - child_count -= 1; - } else { - let meta = tokio::fs::metadata(child).await; - if meta.is_ok() { - break; - } - } - child = match child.parent() { - Some(child) => child, - None => { - return Ok(false); - } - }; - } - tokio::fs::canonicalize(child).await? - }; - let parent = tokio::fs::canonicalize(parent).await?; - Ok(child.starts_with(parent)) - } - - #[tokio::test] - async fn test_is_subset() { - let home = std::env::var("HOME").unwrap(); - let home = Path::new(&home); - assert!(!is_subset(home, &home.join("code/fakedir/../../..")) - .await - .unwrap()) - } -} - -fn system_time_as_unix_ms(system_time: &SystemTime) -> Option { - system_time - .duration_since(SystemTime::UNIX_EPOCH) - .ok()? - .as_millis() - .try_into() - .ok() -} diff --git a/core/startos/Cargo.toml b/core/startos/Cargo.toml index bd1beba64..bad982996 100644 --- a/core/startos/Cargo.toml +++ b/core/startos/Cargo.toml @@ -30,7 +30,7 @@ avahi = ["avahi-sys"] avahi-alias = ["avahi"] cli = [] daemon = [] -default = ["cli", "sdk", "daemon", "js-engine"] +default = ["cli", "sdk", "daemon"] dev = [] docker = [] sdk = [] @@ -98,7 +98,6 @@ itertools = "0.11.0" jaq-core = "0.10.1" jaq-std = "0.10.0" josekit = "0.8.4" -js-engine = { path = '../js-engine', optional = true } jsonpath_lib = { git = "https://github.com/Start9Labs/jsonpath.git" } lazy_static = "1.4.0" libc = "0.2.149" diff --git a/core/startos/src/bins/mod.rs b/core/startos/src/bins/mod.rs index c391338fe..76329e094 100644 --- a/core/startos/src/bins/mod.rs +++ b/core/startos/src/bins/mod.rs @@ -5,8 +5,6 @@ pub mod avahi_alias; pub mod deprecated; #[cfg(feature = "cli")] pub mod start_cli; -#[cfg(feature = "js-engine")] -pub mod start_deno; #[cfg(feature = "daemon")] pub mod start_init; #[cfg(feature = "sdk")] @@ -18,8 +16,6 @@ fn select_executable(name: &str) -> Option { match name { #[cfg(feature = "avahi-alias")] "avahi-alias" => Some(avahi_alias::main), - #[cfg(feature = "js_engine")] - "start-deno" => Some(start_deno::main), #[cfg(feature = "cli")] "start-cli" => Some(start_cli::main), #[cfg(feature = "sdk")] diff --git a/core/startos/src/procedure/js_scripts.rs b/core/startos/src/procedure/js_scripts.rs index 88f240e4f..131ceef84 100644 --- a/core/startos/src/procedure/js_scripts.rs +++ b/core/startos/src/procedure/js_scripts.rs @@ -4,8 +4,6 @@ use std::time::Duration; use container_init::ProcessGroupId; use helpers::UnixRpcClient; -pub use js_engine::JsError; -use js_engine::{JsExecutionEnvironment, PathForVolumeId}; use models::VolumeId; use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; @@ -28,23 +26,6 @@ enum ErrorValue { Result(serde_json::Value), } -impl PathForVolumeId for Volumes { - fn path_for( - &self, - data_dir: &Path, - package_id: &PackageId, - version: &Version, - volume_id: &VolumeId, - ) -> Option { - let volume = self.get(volume_id)?; - Some(volume.path_for(data_dir, package_id, version, volume_id)) - } - - fn readonly(&self, volume_id: &VolumeId) -> bool { - self.get(volume_id).map(|x| x.readonly()).unwrap_or(false) - } -} - #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ExecuteArgs { pub procedure: JsProcedure, @@ -68,27 +49,3 @@ impl JsProcedure { Ok(()) } } - -fn unwrap_known_error( - error_value: Option, -) -> Result { - let error_value = error_value.unwrap_or_else(|| ErrorValue::Result(serde_json::Value::Null)); - match error_value { - ErrorValue::Error(error) => Err((JsError::Javascript, error)), - ErrorValue::ErrorCode((code, message)) => Err((JsError::Code(code), message)), - ErrorValue::Result(ref value) => match serde_json::from_value(value.clone()) { - Ok(a) => Ok(a), - Err(err) => { - tracing::error!("{}", err); - tracing::debug!("{:?}", err); - Err(( - JsError::BoundryLayerSerDe, - format!( - "Couldn't convert output = {:#?} to the correct type", - serde_json::to_string_pretty(&error_value).unwrap_or_default() - ), - )) - } - }, - } -} diff --git a/core/startos/src/procedure/mod.rs b/core/startos/src/procedure/mod.rs index be074c2b5..aa3d4092d 100644 --- a/core/startos/src/procedure/mod.rs +++ b/core/startos/src/procedure/mod.rs @@ -17,7 +17,6 @@ use crate::volume::Volumes; use crate::{Error, ErrorKind}; pub mod docker; -#[cfg(feature = "js-engine")] pub mod js_scripts; pub use models::ProcedureName; @@ -27,15 +26,12 @@ pub use models::ProcedureName; #[model = "Model"] pub enum PackageProcedure { Docker(DockerProcedure), - - #[cfg(feature = "js-engine")] Script(js_scripts::JsProcedure), } impl PackageProcedure { pub fn is_script(&self) -> bool { match self { - #[cfg(feature = "js-engine")] Self::Script(_) => true, _ => false, } @@ -52,7 +48,6 @@ impl PackageProcedure { PackageProcedure::Docker(action) => { action.validate(eos_version, volumes, image_ids, expected_io) } - #[cfg(feature = "js-engine")] PackageProcedure::Script(action) => action.validate(volumes), } } @@ -116,7 +111,6 @@ impl std::fmt::Display for PackageProcedure { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { PackageProcedure::Docker(_) => write!(f, "Docker")?, - #[cfg(feature = "js-engine")] PackageProcedure::Script(_) => write!(f, "JS")?, } Ok(()) diff --git a/core/startos/src/s9pk/builder.rs b/core/startos/src/s9pk/builder.rs deleted file mode 100644 index 199742439..000000000 --- a/core/startos/src/s9pk/builder.rs +++ /dev/null @@ -1,145 +0,0 @@ -use sha2::{Digest, Sha512}; -use tokio::io::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt, SeekFrom}; -use tracing::instrument; -use typed_builder::TypedBuilder; - -use super::header::{FileSection, Header}; -use super::manifest::Manifest; -use super::SIG_CONTEXT; -use crate::util::io::to_cbor_async_writer; -use crate::util::HashWriter; -use crate::{Error, ResultExt}; - -#[derive(TypedBuilder)] -pub struct S9pkPacker< - 'a, - W: AsyncWriteExt + AsyncSeekExt, - RLicense: AsyncReadExt + Unpin, - RInstructions: AsyncReadExt + Unpin, - RIcon: AsyncReadExt + Unpin, - RDockerImages: AsyncReadExt + Unpin, - RAssets: AsyncReadExt + Unpin, - RScripts: AsyncReadExt + Unpin, -> { - writer: W, - manifest: &'a Manifest, - license: RLicense, - instructions: RInstructions, - icon: RIcon, - docker_images: RDockerImages, - assets: RAssets, - scripts: Option, -} -impl< - 'a, - W: AsyncWriteExt + AsyncSeekExt + Unpin, - RLicense: AsyncReadExt + Unpin, - RInstructions: AsyncReadExt + Unpin, - RIcon: AsyncReadExt + Unpin, - RDockerImages: AsyncReadExt + Unpin, - RAssets: AsyncReadExt + Unpin, - RScripts: AsyncReadExt + Unpin, - > S9pkPacker<'a, W, RLicense, RInstructions, RIcon, RDockerImages, RAssets, RScripts> -{ - /// BLOCKING - #[instrument(skip_all)] - pub async fn pack(mut self, key: &ed25519_dalek::SigningKey) -> Result<(), Error> { - let header_pos = self.writer.stream_position().await?; - if header_pos != 0 { - tracing::warn!("Appending to non-empty file."); - } - let mut header = Header::placeholder(); - header.serialize(&mut self.writer).await.with_ctx(|_| { - ( - crate::ErrorKind::Serialization, - "Writing Placeholder Header", - ) - })?; - let mut position = self.writer.stream_position().await?; - - let mut writer = HashWriter::new(Sha512::new(), &mut self.writer); - // manifest - to_cbor_async_writer(&mut writer, self.manifest).await?; - let new_pos = writer.inner_mut().stream_position().await?; - header.table_of_contents.manifest = FileSection { - position, - length: new_pos - position, - }; - position = new_pos; - // license - tokio::io::copy(&mut self.license, &mut writer) - .await - .with_ctx(|_| (crate::ErrorKind::Filesystem, "Copying License"))?; - let new_pos = writer.inner_mut().stream_position().await?; - header.table_of_contents.license = FileSection { - position, - length: new_pos - position, - }; - position = new_pos; - // instructions - tokio::io::copy(&mut self.instructions, &mut writer) - .await - .with_ctx(|_| (crate::ErrorKind::Filesystem, "Copying Instructions"))?; - let new_pos = writer.inner_mut().stream_position().await?; - header.table_of_contents.instructions = FileSection { - position, - length: new_pos - position, - }; - position = new_pos; - // icon - tokio::io::copy(&mut self.icon, &mut writer) - .await - .with_ctx(|_| (crate::ErrorKind::Filesystem, "Copying Icon"))?; - let new_pos = writer.inner_mut().stream_position().await?; - header.table_of_contents.icon = FileSection { - position, - length: new_pos - position, - }; - position = new_pos; - // docker_images - tokio::io::copy(&mut self.docker_images, &mut writer) - .await - .with_ctx(|_| (crate::ErrorKind::Filesystem, "Copying Docker Images"))?; - let new_pos = writer.inner_mut().stream_position().await?; - header.table_of_contents.docker_images = FileSection { - position, - length: new_pos - position, - }; - position = new_pos; - // assets - tokio::io::copy(&mut self.assets, &mut writer) - .await - .with_ctx(|_| (crate::ErrorKind::Filesystem, "Copying Assets"))?; - let new_pos = writer.inner_mut().stream_position().await?; - header.table_of_contents.assets = FileSection { - position, - length: new_pos - position, - }; - position = new_pos; - // scripts - if let Some(mut scripts) = self.scripts { - tokio::io::copy(&mut scripts, &mut writer) - .await - .with_ctx(|_| (crate::ErrorKind::Filesystem, "Copying Scripts"))?; - let new_pos = writer.inner_mut().stream_position().await?; - header.table_of_contents.scripts = Some(FileSection { - position, - length: new_pos - position, - }); - position = new_pos; - } - - // header - let (hash, _) = writer.finish(); - self.writer.seek(SeekFrom::Start(header_pos)).await?; - header.pubkey = key.into(); - header.signature = key.sign_prehashed(hash, Some(SIG_CONTEXT))?; - header - .serialize(&mut self.writer) - .await - .with_ctx(|_| (crate::ErrorKind::Serialization, "Writing Header"))?; - self.writer.seek(SeekFrom::Start(position)).await?; - - Ok(()) - } -} diff --git a/core/startos/src/s9pk/docker.rs b/core/startos/src/s9pk/docker.rs deleted file mode 100644 index be93905fb..000000000 --- a/core/startos/src/s9pk/docker.rs +++ /dev/null @@ -1,95 +0,0 @@ -use std::borrow::Cow; -use std::collections::BTreeSet; -use std::io::SeekFrom; -use std::path::Path; - -use color_eyre::eyre::eyre; -use futures::{FutureExt, TryStreamExt}; -use serde::{Deserialize, Serialize}; -use tokio::io::{AsyncRead, AsyncSeek, AsyncSeekExt}; -use tokio_tar::{Archive, Entry}; - -use crate::util::io::from_cbor_async_reader; -use crate::{Error, ErrorKind, ARCH}; - -#[derive(Default, Deserialize, Serialize)] -#[serde(rename_all = "kebab-case")] -pub struct DockerMultiArch { - pub default: String, - pub available: BTreeSet, -} - -#[pin_project::pin_project(project = DockerReaderProject)] -#[derive(Debug)] -pub enum DockerReader { - SingleArch(#[pin] R), - MultiArch(#[pin] Entry>), -} -impl DockerReader { - pub async fn new(mut rdr: R) -> Result { - let arch = if let Some(multiarch) = tokio_tar::Archive::new(&mut rdr) - .entries()? - .try_filter_map(|e| { - async move { - Ok(if &*e.path()? == Path::new("multiarch.cbor") { - Some(e) - } else { - None - }) - } - .boxed() - }) - .try_next() - .await? - { - let multiarch: DockerMultiArch = from_cbor_async_reader(multiarch).await?; - Some(if multiarch.available.contains(&**ARCH) { - Cow::Borrowed(&**ARCH) - } else { - Cow::Owned(multiarch.default) - }) - } else { - None - }; - rdr.seek(SeekFrom::Start(0)).await?; - if let Some(arch) = arch { - if let Some(image) = tokio_tar::Archive::new(rdr) - .entries()? - .try_filter_map(|e| { - let arch = arch.clone(); - async move { - Ok(if &*e.path()? == Path::new(&format!("{}.tar", arch)) { - Some(e) - } else { - None - }) - } - .boxed() - }) - .try_next() - .await? - { - Ok(Self::MultiArch(image)) - } else { - Err(Error::new( - eyre!("Docker image section does not contain tarball for architecture"), - ErrorKind::ParseS9pk, - )) - } - } else { - Ok(Self::SingleArch(rdr)) - } - } -} -impl AsyncRead for DockerReader { - fn poll_read( - self: std::pin::Pin<&mut Self>, - cx: &mut std::task::Context<'_>, - buf: &mut tokio::io::ReadBuf<'_>, - ) -> std::task::Poll> { - match self.project() { - DockerReaderProject::SingleArch(r) => r.poll_read(cx, buf), - DockerReaderProject::MultiArch(r) => r.poll_read(cx, buf), - } - } -} diff --git a/core/startos/src/s9pk/git_hash.rs b/core/startos/src/s9pk/git_hash.rs deleted file mode 100644 index b2990a111..000000000 --- a/core/startos/src/s9pk/git_hash.rs +++ /dev/null @@ -1,41 +0,0 @@ -use std::path::Path; - -use crate::Error; - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub struct GitHash(String); - -impl GitHash { - pub async fn from_path(path: impl AsRef) -> Result { - let hash = tokio::process::Command::new("git") - .args(["describe", "--always", "--abbrev=40", "--dirty=-modified"]) - .current_dir(path) - .output() - .await?; - if !hash.status.success() { - return Err(Error::new( - color_eyre::eyre::eyre!("Could not get hash: {}", String::from_utf8(hash.stderr)?), - crate::ErrorKind::Filesystem, - )); - } - Ok(GitHash(String::from_utf8(hash.stdout)?)) - } -} - -impl AsRef for GitHash { - fn as_ref(&self) -> &str { - &self.0 - } -} - -// #[tokio::test] -// async fn test_githash_for_current() { -// let answer: GitHash = GitHash::from_path(std::env::current_dir().unwrap()) -// .await -// .unwrap(); -// let answer_str: &str = answer.as_ref(); -// assert!( -// !answer_str.is_empty(), -// "Should have a hash for this current working" -// ); -// } diff --git a/core/startos/src/s9pk/header.rs b/core/startos/src/s9pk/header.rs deleted file mode 100644 index 4f77ad855..000000000 --- a/core/startos/src/s9pk/header.rs +++ /dev/null @@ -1,187 +0,0 @@ -use std::collections::BTreeMap; - -use color_eyre::eyre::eyre; -use ed25519_dalek::{Signature, VerifyingKey}; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncWriteExt}; - -use crate::Error; - -pub const MAGIC: [u8; 2] = [59, 59]; -pub const VERSION: u8 = 1; - -#[derive(Debug)] -pub struct Header { - pub pubkey: VerifyingKey, - pub signature: Signature, - pub table_of_contents: TableOfContents, -} -impl Header { - pub fn placeholder() -> Self { - Header { - pubkey: VerifyingKey::default(), - signature: Signature::from_bytes(&[0; 64]), - table_of_contents: Default::default(), - } - } - // MUST BE SAME SIZE REGARDLESS OF DATA - pub async fn serialize(&self, mut writer: W) -> std::io::Result<()> { - writer.write_all(&MAGIC).await?; - writer.write_all(&[VERSION]).await?; - writer.write_all(self.pubkey.as_bytes()).await?; - writer.write_all(&self.signature.to_bytes()).await?; - self.table_of_contents.serialize(writer).await?; - Ok(()) - } - pub async fn deserialize(mut reader: R) -> Result { - let mut magic = [0; 2]; - reader.read_exact(&mut magic).await?; - if magic != MAGIC { - return Err(Error::new( - eyre!("Incorrect Magic: {:?}", magic), - crate::ErrorKind::ParseS9pk, - )); - } - let mut version = [0]; - reader.read_exact(&mut version).await?; - if version[0] != VERSION { - return Err(Error::new( - eyre!("Unknown Version: {}", version[0]), - crate::ErrorKind::ParseS9pk, - )); - } - let mut pubkey_bytes = [0; 32]; - reader.read_exact(&mut pubkey_bytes).await?; - let pubkey = VerifyingKey::from_bytes(&pubkey_bytes) - .map_err(|e| Error::new(e, crate::ErrorKind::ParseS9pk))?; - let mut sig_bytes = [0; 64]; - reader.read_exact(&mut sig_bytes).await?; - let signature = Signature::from_bytes(&sig_bytes); - let table_of_contents = TableOfContents::deserialize(reader).await?; - - Ok(Header { - pubkey, - signature, - table_of_contents, - }) - } -} - -#[derive(Debug, Default)] -pub struct TableOfContents { - pub manifest: FileSection, - pub license: FileSection, - pub instructions: FileSection, - pub icon: FileSection, - pub docker_images: FileSection, - pub assets: FileSection, - pub scripts: Option, -} -impl TableOfContents { - pub async fn serialize(&self, mut writer: W) -> std::io::Result<()> { - let len: u32 = ((1 + "manifest".len() + 16) - + (1 + "license".len() + 16) - + (1 + "instructions".len() + 16) - + (1 + "icon".len() + 16) - + (1 + "docker_images".len() + 16) - + (1 + "assets".len() + 16) - + (1 + "scripts".len() + 16)) as u32; - writer.write_all(&u32::to_be_bytes(len)).await?; - self.manifest - .serialize_entry("manifest", &mut writer) - .await?; - self.license.serialize_entry("license", &mut writer).await?; - self.instructions - .serialize_entry("instructions", &mut writer) - .await?; - self.icon.serialize_entry("icon", &mut writer).await?; - self.docker_images - .serialize_entry("docker_images", &mut writer) - .await?; - self.assets.serialize_entry("assets", &mut writer).await?; - self.scripts - .unwrap_or_default() - .serialize_entry("scripts", &mut writer) - .await?; - Ok(()) - } - pub async fn deserialize(mut reader: R) -> std::io::Result { - let mut toc_len = [0; 4]; - reader.read_exact(&mut toc_len).await?; - let toc_len = u32::from_be_bytes(toc_len); - let mut reader = reader.take(toc_len as u64); - let mut table = BTreeMap::new(); - while let Some((label, section)) = FileSection::deserialize_entry(&mut reader).await? { - table.insert(label, section); - } - fn from_table( - table: &BTreeMap, FileSection>, - label: &str, - ) -> std::io::Result { - table.get(label.as_bytes()).copied().ok_or_else(|| { - std::io::Error::new( - std::io::ErrorKind::UnexpectedEof, - format!("Missing Required Label: {}", label), - ) - }) - } - #[allow(dead_code)] - fn as_opt(fs: FileSection) -> Option { - if fs.position | fs.length == 0 { - // 0/0 is not a valid file section - None - } else { - Some(fs) - } - } - Ok(TableOfContents { - manifest: from_table(&table, "manifest")?, - license: from_table(&table, "license")?, - instructions: from_table(&table, "instructions")?, - icon: from_table(&table, "icon")?, - docker_images: from_table(&table, "docker_images")?, - assets: from_table(&table, "assets")?, - scripts: table.get("scripts".as_bytes()).cloned(), - }) - } -} - -#[derive(Clone, Copy, Debug, Default)] -pub struct FileSection { - pub position: u64, - pub length: u64, -} -impl FileSection { - pub async fn serialize_entry( - self, - label: &str, - mut writer: W, - ) -> std::io::Result<()> { - writer.write_all(&[label.len() as u8]).await?; - writer.write_all(label.as_bytes()).await?; - writer.write_all(&u64::to_be_bytes(self.position)).await?; - writer.write_all(&u64::to_be_bytes(self.length)).await?; - Ok(()) - } - pub async fn deserialize_entry( - mut reader: R, - ) -> std::io::Result, Self)>> { - let mut label_len = [0]; - let read = reader.read(&mut label_len).await?; - if read == 0 { - return Ok(None); - } - let mut label = vec![0; label_len[0] as usize]; - reader.read_exact(&mut label).await?; - let mut pos = [0; 8]; - reader.read_exact(&mut pos).await?; - let mut len = [0; 8]; - reader.read_exact(&mut len).await?; - Ok(Some(( - label, - FileSection { - position: u64::from_be_bytes(pos), - length: u64::from_be_bytes(len), - }, - ))) - } -} diff --git a/core/startos/src/s9pk/manifest.rs b/core/startos/src/s9pk/manifest.rs deleted file mode 100644 index 3eee540ed..000000000 --- a/core/startos/src/s9pk/manifest.rs +++ /dev/null @@ -1,211 +0,0 @@ -use std::collections::BTreeMap; -use std::path::{Path, PathBuf}; - -use color_eyre::eyre::eyre; -pub use models::PackageId; -use serde::{Deserialize, Serialize}; -use url::Url; - -use super::git_hash::GitHash; -use crate::action::Actions; -use crate::backup::BackupActions; -use crate::config::action::ConfigActions; -use crate::dependencies::Dependencies; -use crate::migration::Migrations; -use crate::net::interface::Interfaces; -use crate::prelude::*; -use crate::procedure::docker::DockerContainers; -use crate::procedure::PackageProcedure; -use crate::status::health_check::HealthChecks; -use crate::util::serde::Regex; -use crate::util::Version; -use crate::version::{Current, VersionT}; -use crate::volume::Volumes; -use crate::Error; - -fn current_version() -> Version { - Current::new().semver().into() -} - -#[derive(Clone, Debug, Deserialize, Serialize, HasModel)] -#[serde(rename_all = "kebab-case")] -#[model = "Model"] -pub struct Manifest { - #[serde(default = "current_version")] - pub eos_version: Version, - pub id: PackageId, - #[serde(default)] - pub git_hash: Option, - pub title: String, - pub version: Version, - pub description: Description, - #[serde(default)] - pub assets: Assets, - #[serde(default)] - pub build: Option>, - pub release_notes: String, - pub license: String, // type of license - pub wrapper_repo: Url, - pub upstream_repo: Url, - pub support_site: Option, - pub marketing_site: Option, - pub donation_url: Option, - #[serde(default)] - pub alerts: Alerts, - pub main: PackageProcedure, - pub health_checks: HealthChecks, - pub config: Option, - pub properties: Option, - pub volumes: Volumes, - // #[serde(default)] - pub interfaces: Interfaces, - // #[serde(default)] - pub backup: BackupActions, - #[serde(default)] - pub migrations: Migrations, - #[serde(default)] - pub actions: Actions, - // #[serde(default)] - // pub permissions: Permissions, - #[serde(default)] - pub dependencies: Dependencies, - pub containers: Option, - - #[serde(default)] - pub replaces: Vec, - - #[serde(default)] - pub hardware_requirements: HardwareRequirements, -} - -impl Manifest { - pub fn package_procedures(&self) -> impl Iterator { - use std::iter::once; - let main = once(&self.main); - let cfg_get = self.config.as_ref().map(|a| &a.get).into_iter(); - let cfg_set = self.config.as_ref().map(|a| &a.set).into_iter(); - let props = self.properties.iter(); - let backups = vec![&self.backup.create, &self.backup.restore].into_iter(); - let migrations = self - .migrations - .to - .values() - .chain(self.migrations.from.values()); - let actions = self.actions.0.values().map(|a| &a.implementation); - main.chain(cfg_get) - .chain(cfg_set) - .chain(props) - .chain(backups) - .chain(migrations) - .chain(actions) - } - - pub fn with_git_hash(mut self, git_hash: GitHash) -> Self { - self.git_hash = Some(git_hash); - self - } -} - -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -#[serde(rename_all = "kebab-case")] -pub struct HardwareRequirements { - #[serde(default)] - device: BTreeMap, - ram: Option, - pub arch: Option>, -} - -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -#[serde(rename_all = "kebab-case")] -pub struct Assets { - #[serde(default)] - pub license: Option, - #[serde(default)] - pub instructions: Option, - #[serde(default)] - pub icon: Option, - #[serde(default)] - pub docker_images: Option, - #[serde(default)] - pub assets: Option, - #[serde(default)] - pub scripts: Option, -} -impl Assets { - pub fn license_path(&self) -> &Path { - self.license - .as_ref() - .map(|a| a.as_path()) - .unwrap_or(Path::new("LICENSE.md")) - } - pub fn instructions_path(&self) -> &Path { - self.instructions - .as_ref() - .map(|a| a.as_path()) - .unwrap_or(Path::new("INSTRUCTIONS.md")) - } - pub fn icon_path(&self) -> &Path { - self.icon - .as_ref() - .map(|a| a.as_path()) - .unwrap_or(Path::new("icon.png")) - } - pub fn icon_type(&self) -> &str { - self.icon - .as_ref() - .and_then(|icon| icon.extension()) - .and_then(|ext| ext.to_str()) - .unwrap_or("png") - } - pub fn docker_images_path(&self) -> &Path { - self.docker_images - .as_ref() - .map(|a| a.as_path()) - .unwrap_or(Path::new("docker-images")) - } - pub fn assets_path(&self) -> &Path { - self.assets - .as_ref() - .map(|a| a.as_path()) - .unwrap_or(Path::new("assets")) - } - pub fn scripts_path(&self) -> &Path { - self.scripts - .as_ref() - .map(|a| a.as_path()) - .unwrap_or(Path::new("scripts")) - } -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -pub struct Description { - pub short: String, - pub long: String, -} -impl Description { - pub fn validate(&self) -> Result<(), Error> { - if self.short.chars().skip(160).next().is_some() { - return Err(Error::new( - eyre!("Short description must be 160 characters or less."), - crate::ErrorKind::ValidateS9pk, - )); - } - if self.long.chars().skip(5000).next().is_some() { - return Err(Error::new( - eyre!("Long description must be 5000 characters or less."), - crate::ErrorKind::ValidateS9pk, - )); - } - Ok(()) - } -} - -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -#[serde(rename_all = "kebab-case")] -pub struct Alerts { - pub install: Option, - pub uninstall: Option, - pub restore: Option, - pub start: Option, - pub stop: Option, -} diff --git a/core/startos/src/s9pk/reader.rs b/core/startos/src/s9pk/reader.rs deleted file mode 100644 index 61b5e46a8..000000000 --- a/core/startos/src/s9pk/reader.rs +++ /dev/null @@ -1,406 +0,0 @@ -use std::collections::BTreeSet; -use std::io::SeekFrom; -use std::ops::Range; -use std::path::Path; -use std::pin::Pin; -use std::str::FromStr; -use std::task::{Context, Poll}; - -use color_eyre::eyre::eyre; -use digest::Output; -use ed25519_dalek::VerifyingKey; -use futures::TryStreamExt; -use models::ImageId; -use sha2::{Digest, Sha512}; -use tokio::fs::File; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncSeek, AsyncSeekExt, ReadBuf}; -use tracing::instrument; - -use super::header::{FileSection, Header, TableOfContents}; -use super::manifest::{Manifest, PackageId}; -use super::SIG_CONTEXT; -use crate::install::progress::InstallProgressTracker; -use crate::s9pk::docker::DockerReader; -use crate::util::Version; -use crate::{Error, ResultExt}; - -const MAX_REPLACES: usize = 10; -const MAX_TITLE_LEN: usize = 30; - -#[pin_project::pin_project] -#[derive(Debug)] -pub struct ReadHandle<'a, R = File> { - pos: &'a mut u64, - range: Range, - #[pin] - rdr: &'a mut R, -} -impl<'a, R: AsyncRead + Unpin> ReadHandle<'a, R> { - pub async fn to_vec(mut self) -> std::io::Result> { - let mut buf = vec![0; (self.range.end - self.range.start) as usize]; - self.read_exact(&mut buf).await?; - Ok(buf) - } -} -impl<'a, R: AsyncRead + Unpin> AsyncRead for ReadHandle<'a, R> { - fn poll_read( - self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &mut ReadBuf<'_>, - ) -> Poll> { - let this = self.project(); - let start = buf.filled().len(); - let mut take_buf = buf.take(this.range.end.saturating_sub(**this.pos) as usize); - let res = AsyncRead::poll_read(this.rdr, cx, &mut take_buf); - let n = take_buf.filled().len(); - unsafe { buf.assume_init(start + n) }; - buf.advance(n); - **this.pos += n as u64; - res - } -} -impl<'a, R: AsyncSeek + Unpin> AsyncSeek for ReadHandle<'a, R> { - fn start_seek(self: Pin<&mut Self>, position: SeekFrom) -> std::io::Result<()> { - let this = self.project(); - AsyncSeek::start_seek( - this.rdr, - match position { - SeekFrom::Current(n) => SeekFrom::Current(n), - SeekFrom::End(n) => SeekFrom::Start((this.range.end as i64 + n) as u64), - SeekFrom::Start(n) => SeekFrom::Start(this.range.start + n), - }, - ) - } - fn poll_complete(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - let this = self.project(); - match AsyncSeek::poll_complete(this.rdr, cx) { - Poll::Ready(Ok(n)) => { - let res = n.saturating_sub(this.range.start); - **this.pos = this.range.start + res; - Poll::Ready(Ok(res)) - } - a => a, - } - } -} - -#[derive(Debug)] -pub struct ImageTag { - pub package_id: PackageId, - pub image_id: ImageId, - pub version: Version, -} -impl ImageTag { - #[instrument(skip_all)] - pub fn validate(&self, id: &PackageId, version: &Version) -> Result<(), Error> { - if id != &self.package_id { - return Err(Error::new( - eyre!( - "Contains image for incorrect package: id {}", - self.package_id, - ), - crate::ErrorKind::ValidateS9pk, - )); - } - if version != &self.version { - return Err(Error::new( - eyre!( - "Contains image with incorrect version: expected {} received {}", - version, - self.version, - ), - crate::ErrorKind::ValidateS9pk, - )); - } - Ok(()) - } -} -impl FromStr for ImageTag { - type Err = Error; - fn from_str(s: &str) -> Result { - let rest = s.strip_prefix("start9/").ok_or_else(|| { - Error::new( - eyre!("Invalid image tag prefix: expected start9/"), - crate::ErrorKind::ValidateS9pk, - ) - })?; - let (package, rest) = rest.split_once("/").ok_or_else(|| { - Error::new( - eyre!("Image tag missing image id"), - crate::ErrorKind::ValidateS9pk, - ) - })?; - let (image, version) = rest.split_once(":").ok_or_else(|| { - Error::new( - eyre!("Image tag missing version"), - crate::ErrorKind::ValidateS9pk, - ) - })?; - Ok(ImageTag { - package_id: package.parse()?, - image_id: image.parse()?, - version: version.parse()?, - }) - } -} - -pub struct S9pkReader { - hash: Option>, - hash_string: Option, - developer_key: VerifyingKey, - toc: TableOfContents, - pos: u64, - rdr: R, -} -impl S9pkReader { - pub async fn open>(path: P, check_sig: bool) -> Result { - let p = path.as_ref(); - let rdr = File::open(p) - .await - .with_ctx(|_| (crate::error::ErrorKind::Filesystem, p.display().to_string()))?; - - Self::from_reader(rdr, check_sig).await - } -} -impl S9pkReader> { - pub fn validated(&mut self) { - self.rdr.validated() - } -} -impl S9pkReader { - #[instrument(skip_all)] - pub async fn validate(&mut self) -> Result<(), Error> { - if self.toc.icon.length > 102_400 { - // 100 KiB - return Err(Error::new( - eyre!("icon must be less than 100KiB"), - crate::ErrorKind::ValidateS9pk, - )); - } - let image_tags = self.image_tags().await?; - let man = self.manifest().await?; - let containers = &man.containers; - let validated_image_ids = image_tags - .into_iter() - .map(|i| i.validate(&man.id, &man.version).map(|_| i.image_id)) - .collect::, _>>()?; - man.description.validate()?; - man.actions.0.iter().try_for_each(|(_, action)| { - action.validate( - containers, - &man.eos_version, - &man.volumes, - &validated_image_ids, - ) - })?; - man.backup.validate( - containers, - &man.eos_version, - &man.volumes, - &validated_image_ids, - )?; - if let Some(cfg) = &man.config { - cfg.validate( - containers, - &man.eos_version, - &man.volumes, - &validated_image_ids, - )?; - } - man.health_checks - .validate(&man.eos_version, &man.volumes, &validated_image_ids)?; - man.interfaces.validate()?; - man.main - .validate(&man.eos_version, &man.volumes, &validated_image_ids, false) - .with_ctx(|_| (crate::ErrorKind::ValidateS9pk, "Main"))?; - man.migrations.validate( - containers, - &man.eos_version, - &man.volumes, - &validated_image_ids, - )?; - - #[cfg(feature = "js-engine")] - if man.containers.is_some() - || matches!(man.main, crate::procedure::PackageProcedure::Script(_)) - { - return Err(Error::new( - eyre!("Right now we don't support the containers and the long running main"), - crate::ErrorKind::ValidateS9pk, - )); - } - - if man.replaces.len() >= MAX_REPLACES { - return Err(Error::new( - eyre!("Cannot have more than {MAX_REPLACES} replaces"), - crate::ErrorKind::ValidateS9pk, - )); - } - if let Some(too_big) = man.replaces.iter().find(|x| x.len() >= MAX_REPLACES) { - return Err(Error::new( - eyre!("We have found a replaces of ({too_big}) that exceeds the max length of {MAX_TITLE_LEN} "), - crate::ErrorKind::ValidateS9pk, - )); - } - if man.title.len() >= MAX_TITLE_LEN { - return Err(Error::new( - eyre!("Cannot have more than a length of {MAX_TITLE_LEN} for title"), - crate::ErrorKind::ValidateS9pk, - )); - } - - if man.containers.is_some() - && matches!(man.main, crate::procedure::PackageProcedure::Docker(_)) - { - return Err(Error::new( - eyre!("Cannot have a main docker and a main in containers"), - crate::ErrorKind::ValidateS9pk, - )); - } - if let Some(props) = &man.properties { - props - .validate(&man.eos_version, &man.volumes, &validated_image_ids, true) - .with_ctx(|_| (crate::ErrorKind::ValidateS9pk, "Properties"))?; - } - man.volumes.validate(&man.interfaces)?; - - Ok(()) - } - #[instrument(skip_all)] - pub async fn image_tags(&mut self) -> Result, Error> { - let mut tar = tokio_tar::Archive::new(self.docker_images().await?); - let mut entries = tar.entries()?; - while let Some(mut entry) = entries.try_next().await? { - if &*entry.path()? != Path::new("manifest.json") { - continue; - } - let mut buf = Vec::with_capacity(entry.header().size()? as usize); - entry.read_to_end(&mut buf).await?; - #[derive(serde::Deserialize)] - struct ManEntry { - #[serde(rename = "RepoTags")] - tags: Vec, - } - let man_entries = serde_json::from_slice::>(&buf) - .with_ctx(|_| (crate::ErrorKind::Deserialization, "manifest.json"))?; - return man_entries - .iter() - .flat_map(|e| &e.tags) - .map(|t| t.parse()) - .collect(); - } - Err(Error::new( - eyre!("image.tar missing manifest.json"), - crate::ErrorKind::ParseS9pk, - )) - } - #[instrument(skip_all)] - pub async fn from_reader(mut rdr: R, check_sig: bool) -> Result { - let header = Header::deserialize(&mut rdr).await?; - - let (hash, hash_string) = if check_sig { - let mut hasher = Sha512::new(); - let mut buf = [0; 1024]; - let mut read; - while { - read = rdr.read(&mut buf).await?; - read != 0 - } { - hasher.update(&buf[0..read]); - } - let hash = hasher.clone().finalize(); - header - .pubkey - .verify_prehashed(hasher, Some(SIG_CONTEXT), &header.signature)?; - ( - Some(hash), - Some(base32::encode( - base32::Alphabet::RFC4648 { padding: false }, - hash.as_slice(), - )), - ) - } else { - (None, None) - }; - - let pos = rdr.stream_position().await?; - - Ok(S9pkReader { - hash_string, - hash, - developer_key: header.pubkey, - toc: header.table_of_contents, - pos, - rdr, - }) - } - - pub fn hash(&self) -> Option<&Output> { - self.hash.as_ref() - } - - pub fn hash_str(&self) -> Option<&str> { - self.hash_string.as_ref().map(|s| s.as_str()) - } - - pub fn developer_key(&self) -> &VerifyingKey { - &self.developer_key - } - - pub async fn reset(&mut self) -> Result<(), Error> { - self.rdr.seek(SeekFrom::Start(0)).await?; - Ok(()) - } - - async fn read_handle<'a>( - &'a mut self, - section: FileSection, - ) -> Result, Error> { - if self.pos != section.position { - self.rdr.seek(SeekFrom::Start(section.position)).await?; - self.pos = section.position; - } - Ok(ReadHandle { - range: self.pos..(self.pos + section.length), - pos: &mut self.pos, - rdr: &mut self.rdr, - }) - } - - pub async fn manifest_raw(&mut self) -> Result, Error> { - self.read_handle(self.toc.manifest).await - } - - pub async fn manifest(&mut self) -> Result { - let slice = self.manifest_raw().await?.to_vec().await?; - serde_cbor::de::from_reader(slice.as_slice()) - .with_ctx(|_| (crate::ErrorKind::ParseS9pk, "Deserializing Manifest (CBOR)")) - } - - pub async fn license(&mut self) -> Result, Error> { - self.read_handle(self.toc.license).await - } - - pub async fn instructions(&mut self) -> Result, Error> { - self.read_handle(self.toc.instructions).await - } - - pub async fn icon(&mut self) -> Result, Error> { - self.read_handle(self.toc.icon).await - } - - pub async fn docker_images(&mut self) -> Result>, Error> { - DockerReader::new(self.read_handle(self.toc.docker_images).await?).await - } - - pub async fn assets(&mut self) -> Result, Error> { - self.read_handle(self.toc.assets).await - } - - pub async fn scripts(&mut self) -> Result>, Error> { - Ok(match self.toc.scripts { - None => None, - Some(a) => Some(self.read_handle(a).await?), - }) - } -} diff --git a/core/startos/src/s9pk/specv2.md b/core/startos/src/s9pk/specv2.md deleted file mode 100644 index 9bf993463..000000000 --- a/core/startos/src/s9pk/specv2.md +++ /dev/null @@ -1,28 +0,0 @@ -## Header - -### Magic - -2B: `0x3b3b` - -### Version - -varint: `0x02` - -### Pubkey - -32B: ed25519 pubkey - -### TOC - -- number of sections (varint) -- FOREACH section - - sig (32B: ed25519 signature of BLAKE-3 of rest of section) - - name (varstring) - - TYPE (varint) - - TYPE=FILE (`0x01`) - - mime (varstring) - - pos (32B: u64 BE) - - len (32B: u64 BE) - - hash (32B: BLAKE-3 of file contents) - - TYPE=TOC (`0x02`) - - recursively defined diff --git a/core/startos/src/s9pk/v1/reader.rs b/core/startos/src/s9pk/v1/reader.rs index 61b5e46a8..e901b1a14 100644 --- a/core/startos/src/s9pk/v1/reader.rs +++ b/core/startos/src/s9pk/v1/reader.rs @@ -220,16 +220,6 @@ impl S9pkReader { &validated_image_ids, )?; - #[cfg(feature = "js-engine")] - if man.containers.is_some() - || matches!(man.main, crate::procedure::PackageProcedure::Script(_)) - { - return Err(Error::new( - eyre!("Right now we don't support the containers and the long running main"), - crate::ErrorKind::ValidateS9pk, - )); - } - if man.replaces.len() >= MAX_REPLACES { return Err(Error::new( eyre!("Cannot have more than {MAX_REPLACES} replaces"),