diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-09-16 21:39:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-16 21:39:37 +0100 |
commit | 62e952559f600e72d7498c9b12f906cb0b1ba150 (patch) | |
tree | 6dbcce6592973358ef4bf6341888b0bbbdb98cc5 /cli/worker.rs | |
parent | e0b9c745c15720914f14996bf357d5b375e2dbd8 (diff) |
refactor(permissions): split up Descriptor into Allow, Deny, and Query (#25508)
This makes the permission system more versatile.
Diffstat (limited to 'cli/worker.rs')
-rw-r--r-- | cli/worker.rs | 79 |
1 files changed, 46 insertions, 33 deletions
diff --git a/cli/worker.rs b/cli/worker.rs index 94884ff82..78753bf22 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -30,6 +30,7 @@ use deno_runtime::deno_web::BlobStore; use deno_runtime::fmt_errors::format_js_error; use deno_runtime::inspector_server::InspectorServer; use deno_runtime::ops::worker_host::CreateWebWorkerCb; +use deno_runtime::permissions::RuntimePermissionDescriptorParser; use deno_runtime::web_worker::WebWorker; use deno_runtime::web_worker::WebWorkerOptions; use deno_runtime::worker::MainWorker; @@ -121,23 +122,24 @@ pub struct CliMainWorkerOptions { } struct SharedWorkerState { - options: CliMainWorkerOptions, - subcommand: DenoSubcommand, - storage_key_resolver: StorageKeyResolver, - npm_resolver: Arc<dyn CliNpmResolver>, - node_resolver: Arc<NodeResolver>, blob_store: Arc<BlobStore>, broadcast_channel: InMemoryBroadcastChannel, - shared_array_buffer_store: SharedArrayBufferStore, + code_cache: Option<Arc<dyn code_cache::CodeCache>>, compiled_wasm_module_store: CompiledWasmModuleStore, - module_loader_factory: Box<dyn ModuleLoaderFactory>, - root_cert_store_provider: Arc<dyn RootCertStoreProvider>, + feature_checker: Arc<FeatureChecker>, fs: Arc<dyn deno_fs::FileSystem>, maybe_file_watcher_communicator: Option<Arc<WatcherCommunicator>>, maybe_inspector_server: Option<Arc<InspectorServer>>, maybe_lockfile: Option<Arc<CliLockfile>>, - feature_checker: Arc<FeatureChecker>, - code_cache: Option<Arc<dyn code_cache::CodeCache>>, + module_loader_factory: Box<dyn ModuleLoaderFactory>, + node_resolver: Arc<NodeResolver>, + npm_resolver: Arc<dyn CliNpmResolver>, + permission_desc_parser: Arc<RuntimePermissionDescriptorParser>, + root_cert_store_provider: Arc<dyn RootCertStoreProvider>, + shared_array_buffer_store: SharedArrayBufferStore, + storage_key_resolver: StorageKeyResolver, + options: CliMainWorkerOptions, + subcommand: DenoSubcommand, } impl SharedWorkerState { @@ -418,40 +420,42 @@ pub struct CliMainWorkerFactory { impl CliMainWorkerFactory { #[allow(clippy::too_many_arguments)] pub fn new( - storage_key_resolver: StorageKeyResolver, - subcommand: DenoSubcommand, - npm_resolver: Arc<dyn CliNpmResolver>, - node_resolver: Arc<NodeResolver>, blob_store: Arc<BlobStore>, - module_loader_factory: Box<dyn ModuleLoaderFactory>, - root_cert_store_provider: Arc<dyn RootCertStoreProvider>, + code_cache: Option<Arc<dyn code_cache::CodeCache>>, + feature_checker: Arc<FeatureChecker>, fs: Arc<dyn deno_fs::FileSystem>, maybe_file_watcher_communicator: Option<Arc<WatcherCommunicator>>, maybe_inspector_server: Option<Arc<InspectorServer>>, maybe_lockfile: Option<Arc<CliLockfile>>, - feature_checker: Arc<FeatureChecker>, - code_cache: Option<Arc<dyn code_cache::CodeCache>>, + module_loader_factory: Box<dyn ModuleLoaderFactory>, + node_resolver: Arc<NodeResolver>, + npm_resolver: Arc<dyn CliNpmResolver>, + permission_parser: Arc<RuntimePermissionDescriptorParser>, + root_cert_store_provider: Arc<dyn RootCertStoreProvider>, + storage_key_resolver: StorageKeyResolver, + subcommand: DenoSubcommand, options: CliMainWorkerOptions, ) -> Self { Self { shared: Arc::new(SharedWorkerState { - options, - subcommand, - storage_key_resolver, - npm_resolver, - node_resolver, blob_store, broadcast_channel: Default::default(), - shared_array_buffer_store: Default::default(), + code_cache, compiled_wasm_module_store: Default::default(), - module_loader_factory, - root_cert_store_provider, + feature_checker, fs, maybe_file_watcher_communicator, maybe_inspector_server, maybe_lockfile, - feature_checker, - code_cache, + module_loader_factory, + node_resolver, + npm_resolver, + permission_desc_parser: permission_parser, + root_cert_store_provider, + shared_array_buffer_store: Default::default(), + storage_key_resolver, + options, + subcommand, }), } } @@ -525,9 +529,13 @@ impl CliMainWorkerFactory { (main_module, false) }; - let ModuleLoaderAndSourceMapGetter { module_loader } = shared - .module_loader_factory - .create_for_main(PermissionsContainer::allow_all(), permissions.clone()); + let ModuleLoaderAndSourceMapGetter { module_loader } = + shared.module_loader_factory.create_for_main( + PermissionsContainer::allow_all( + self.shared.permission_desc_parser.clone(), + ), + permissions.clone(), + ); let maybe_inspector_server = shared.maybe_inspector_server.clone(); let create_web_worker_cb = @@ -619,6 +627,7 @@ impl CliMainWorkerFactory { ), stdio, feature_checker, + permission_desc_parser: shared.permission_desc_parser.clone(), skip_op_registration: shared.options.skip_op_registration, v8_code_cache: shared.code_cache.clone(), }; @@ -809,6 +818,7 @@ fn create_web_worker_callback( stdio: stdio.clone(), cache_storage_dir, feature_checker, + permission_desc_parser: shared.permission_desc_parser.clone(), strace_ops: shared.options.strace_ops.clone(), close_on_idle: args.close_on_idle, maybe_worker_metadata: args.maybe_worker_metadata, @@ -830,13 +840,16 @@ fn create_web_worker_callback( mod tests { use super::*; use deno_core::resolve_path; + use deno_fs::RealFs; use deno_runtime::deno_permissions::Permissions; fn create_test_worker() -> MainWorker { let main_module = resolve_path("./hello.js", &std::env::current_dir().unwrap()).unwrap(); - let permissions = - PermissionsContainer::new(Permissions::none_without_prompt()); + let permissions = PermissionsContainer::new( + Arc::new(RuntimePermissionDescriptorParser::new(Arc::new(RealFs))), + Permissions::none_without_prompt(), + ); let options = WorkerOptions { startup_snapshot: crate::js::deno_isolate_init(), |