0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 17:34:47 -05:00

refactor(cli): remove ProgramState::permissions (#8228)

This commit removes ProgramState::permissions field.

Having permissions parsed from CLI flags stored on globally
accessible state object made it easy to mistakenly use these
permissions in situations which required "runtime" permissions.
This commit is contained in:
Bartek Iwańczuk 2020-11-02 23:37:55 +01:00 committed by GitHub
parent 43d4978cea
commit c3dd19c5d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 12 deletions

View file

@ -208,9 +208,11 @@ async fn install_command(
let mut preload_flags = flags.clone(); let mut preload_flags = flags.clone();
preload_flags.inspect = None; preload_flags.inspect = None;
preload_flags.inspect_brk = None; preload_flags.inspect_brk = None;
let permissions = Permissions::from_flags(&preload_flags);
let program_state = ProgramState::new(preload_flags)?; let program_state = ProgramState::new(preload_flags)?;
let main_module = ModuleSpecifier::resolve_url_or_path(&module_url)?; let main_module = ModuleSpecifier::resolve_url_or_path(&module_url)?;
let mut worker = MainWorker::new(&program_state, main_module.clone()); let mut worker =
MainWorker::new(&program_state, main_module.clone(), permissions);
// First, fetch and compile the module; this step ensures that the module exists. // First, fetch and compile the module; this step ensures that the module exists.
worker.preload_module(&main_module).await?; worker.preload_module(&main_module).await?;
installer::install(flags, &module_url, args, name, root, force) installer::install(flags, &module_url, args, name, root, force)
@ -271,8 +273,10 @@ async fn eval_command(
// Force TypeScript compile. // Force TypeScript compile.
let main_module = let main_module =
ModuleSpecifier::resolve_url_or_path("./$deno$eval.ts").unwrap(); ModuleSpecifier::resolve_url_or_path("./$deno$eval.ts").unwrap();
let permissions = Permissions::from_flags(&flags);
let program_state = ProgramState::new(flags)?; let program_state = ProgramState::new(flags)?;
let mut worker = MainWorker::new(&program_state, main_module.clone()); let mut worker =
MainWorker::new(&program_state, main_module.clone(), permissions);
let main_module_url = main_module.as_url().to_owned(); let main_module_url = main_module.as_url().to_owned();
// Create a dummy source file. // Create a dummy source file.
let source_code = if print { let source_code = if print {
@ -516,8 +520,10 @@ async fn doc_command(
async fn run_repl(flags: Flags) -> Result<(), AnyError> { async fn run_repl(flags: Flags) -> Result<(), AnyError> {
let main_module = let main_module =
ModuleSpecifier::resolve_url_or_path("./$deno$repl.ts").unwrap(); ModuleSpecifier::resolve_url_or_path("./$deno$repl.ts").unwrap();
let permissions = Permissions::from_flags(&flags);
let program_state = ProgramState::new(flags)?; let program_state = ProgramState::new(flags)?;
let mut worker = MainWorker::new(&program_state, main_module.clone()); let mut worker =
MainWorker::new(&program_state, main_module.clone(), permissions);
worker.run_event_loop().await?; worker.run_event_loop().await?;
repl::run(&program_state, worker).await repl::run(&program_state, worker).await
@ -525,9 +531,11 @@ async fn run_repl(flags: Flags) -> Result<(), AnyError> {
async fn run_from_stdin(flags: Flags) -> Result<(), AnyError> { async fn run_from_stdin(flags: Flags) -> Result<(), AnyError> {
let program_state = ProgramState::new(flags.clone())?; let program_state = ProgramState::new(flags.clone())?;
let permissions = Permissions::from_flags(&flags);
let main_module = let main_module =
ModuleSpecifier::resolve_url_or_path("./$deno$stdin.ts").unwrap(); ModuleSpecifier::resolve_url_or_path("./$deno$stdin.ts").unwrap();
let mut worker = MainWorker::new(&program_state.clone(), main_module.clone()); let mut worker =
MainWorker::new(&program_state.clone(), main_module.clone(), permissions);
let mut source = Vec::new(); let mut source = Vec::new();
std::io::stdin().read_to_end(&mut source)?; std::io::stdin().read_to_end(&mut source)?;
@ -588,9 +596,10 @@ async fn run_with_watch(flags: Flags, script: String) -> Result<(), AnyError> {
// FIXME(bartlomieju): ProgramState must be created on each restart - otherwise file fetcher // FIXME(bartlomieju): ProgramState must be created on each restart - otherwise file fetcher
// will use cached source files // will use cached source files
let gs = ProgramState::new(flags.clone()).unwrap(); let gs = ProgramState::new(flags.clone()).unwrap();
let permissions = Permissions::from_flags(&flags);
let main_module = main_module.clone(); let main_module = main_module.clone();
async move { async move {
let mut worker = MainWorker::new(&gs, main_module.clone()); let mut worker = MainWorker::new(&gs, main_module.clone(), permissions);
debug!("main_module {}", main_module); debug!("main_module {}", main_module);
worker.execute_module(&main_module).await?; worker.execute_module(&main_module).await?;
worker.execute("window.dispatchEvent(new Event('load'))")?; worker.execute("window.dispatchEvent(new Event('load'))")?;
@ -615,7 +624,9 @@ async fn run_command(flags: Flags, script: String) -> Result<(), AnyError> {
let main_module = ModuleSpecifier::resolve_url_or_path(&script)?; let main_module = ModuleSpecifier::resolve_url_or_path(&script)?;
let program_state = ProgramState::new(flags.clone())?; let program_state = ProgramState::new(flags.clone())?;
let mut worker = MainWorker::new(&program_state, main_module.clone()); let permissions = Permissions::from_flags(&flags);
let mut worker =
MainWorker::new(&program_state, main_module.clone(), permissions);
debug!("main_module {}", main_module); debug!("main_module {}", main_module);
worker.execute_module(&main_module).await?; worker.execute_module(&main_module).await?;
worker.execute("window.dispatchEvent(new Event('load'))")?; worker.execute("window.dispatchEvent(new Event('load'))")?;
@ -633,6 +644,7 @@ async fn test_command(
filter: Option<String>, filter: Option<String>,
) -> Result<(), AnyError> { ) -> Result<(), AnyError> {
let program_state = ProgramState::new(flags.clone())?; let program_state = ProgramState::new(flags.clone())?;
let permissions = Permissions::from_flags(&flags);
let cwd = std::env::current_dir().expect("No current directory"); let cwd = std::env::current_dir().expect("No current directory");
let include = include.unwrap_or_else(|| vec![".".to_string()]); let include = include.unwrap_or_else(|| vec![".".to_string()]);
let test_modules = test_runner::prepare_test_modules_urls(include, &cwd)?; let test_modules = test_runner::prepare_test_modules_urls(include, &cwd)?;
@ -656,7 +668,8 @@ async fn test_command(
); );
let main_module = let main_module =
ModuleSpecifier::resolve_url(&test_file_url.to_string()).unwrap(); ModuleSpecifier::resolve_url(&test_file_url.to_string()).unwrap();
let mut worker = MainWorker::new(&program_state, main_module.clone()); let mut worker =
MainWorker::new(&program_state, main_module.clone(), permissions);
// Create a dummy source file. // Create a dummy source file.
let source_file = SourceFile { let source_file = SourceFile {
filename: test_file_url.to_file_path().unwrap(), filename: test_file_url.to_file_path().unwrap(),

View file

@ -46,8 +46,6 @@ pub struct CompiledModule {
pub struct ProgramState { pub struct ProgramState {
/// Flags parsed from `argv` contents. /// Flags parsed from `argv` contents.
pub flags: flags::Flags, pub flags: flags::Flags,
/// Permissions parsed from `flags`.
pub permissions: Permissions,
pub dir: deno_dir::DenoDir, pub dir: deno_dir::DenoDir,
pub file_fetcher: SourceFileFetcher, pub file_fetcher: SourceFileFetcher,
pub lockfile: Option<Arc<Mutex<Lockfile>>>, pub lockfile: Option<Arc<Mutex<Lockfile>>>,
@ -98,7 +96,6 @@ impl ProgramState {
let program_state = ProgramState { let program_state = ProgramState {
dir, dir,
permissions: Permissions::from_flags(&flags),
flags, flags,
file_fetcher, file_fetcher,
lockfile, lockfile,

View file

@ -253,6 +253,7 @@ impl MainWorker {
pub fn new( pub fn new(
program_state: &Arc<ProgramState>, program_state: &Arc<ProgramState>,
main_module: ModuleSpecifier, main_module: ModuleSpecifier,
permissions: Permissions,
) -> Self { ) -> Self {
let loader = CliModuleLoader::new(program_state.maybe_import_map.clone()); let loader = CliModuleLoader::new(program_state.maybe_import_map.clone());
let mut worker = Worker::new( let mut worker = Worker::new(
@ -270,7 +271,7 @@ impl MainWorker {
let mut op_state = op_state.borrow_mut(); let mut op_state = op_state.borrow_mut();
op_state.put::<Metrics>(Default::default()); op_state.put::<Metrics>(Default::default());
op_state.put::<Arc<ProgramState>>(program_state.clone()); op_state.put::<Arc<ProgramState>>(program_state.clone());
op_state.put::<Permissions>(program_state.permissions.clone()); op_state.put::<Permissions>(permissions);
} }
ops::runtime::init(js_runtime, main_module); ops::runtime::init(js_runtime, main_module);
@ -600,9 +601,10 @@ mod tests {
}, },
..Default::default() ..Default::default()
}; };
let permissions = Permissions::from_flags(&flags);
let program_state = let program_state =
ProgramState::mock(vec!["deno".to_string()], Some(flags)); ProgramState::mock(vec!["deno".to_string()], Some(flags));
MainWorker::new(&program_state, main_module) MainWorker::new(&program_state, main_module, permissions)
} }
#[tokio::test] #[tokio::test]