summaryrefslogtreecommitdiff
path: root/ext/net
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-09-27 22:36:33 +0200
committerGitHub <noreply@github.com>2022-09-27 22:36:33 +0200
commit212b7dd6da487c070229b6348ec7907b4fecbcf9 (patch)
tree3eb743f90e8b293182a830722eb4ff26bec72039 /ext/net
parenta344368603063bcb281e743f3810ca1e4e46e85d (diff)
feat: Add requesting API name to permission prompt (#15936)
Co-authored-by: Leo Kettmeir <crowlkats@toaxl.com>
Diffstat (limited to 'ext/net')
-rw-r--r--ext/net/lib.rs6
-rw-r--r--ext/net/ops.rs50
-rw-r--r--ext/net/ops_tls.rs12
3 files changed, 46 insertions, 22 deletions
diff --git a/ext/net/lib.rs b/ext/net/lib.rs
index 249170060..35d612598 100644
--- a/ext/net/lib.rs
+++ b/ext/net/lib.rs
@@ -21,9 +21,11 @@ pub trait NetPermissions {
fn check_net<T: AsRef<str>>(
&mut self,
_host: &(T, Option<u16>),
+ _api_name: &str,
) -> Result<(), AnyError>;
- fn check_read(&mut self, _p: &Path) -> Result<(), AnyError>;
- fn check_write(&mut self, _p: &Path) -> Result<(), AnyError>;
+ fn check_read(&mut self, _p: &Path, _api_name: &str) -> Result<(), AnyError>;
+ fn check_write(&mut self, _p: &Path, _api_name: &str)
+ -> Result<(), AnyError>;
}
/// `UnstableChecker` is a struct so it can be placed inside `GothamState`;
diff --git a/ext/net/ops.rs b/ext/net/ops.rs
index 36786cd86..41d04467e 100644
--- a/ext/net/ops.rs
+++ b/ext/net/ops.rs
@@ -252,8 +252,10 @@ where
} if transport == "udp" => {
{
let mut s = state.borrow_mut();
- s.borrow_mut::<NP>()
- .check_net(&(&args.hostname, Some(args.port)))?;
+ s.borrow_mut::<NP>().check_net(
+ &(&args.hostname, Some(args.port)),
+ "Deno.DatagramConn.send()",
+ )?;
}
let addr = resolve_addr(&args.hostname, args.port)
.await?
@@ -278,7 +280,8 @@ where
let address_path = Path::new(&args.path);
{
let mut s = state.borrow_mut();
- s.borrow_mut::<NP>().check_write(address_path)?;
+ s.borrow_mut::<NP>()
+ .check_write(address_path, "Deno.DatagramConn.send()")?;
}
let resource = state
.borrow()
@@ -319,7 +322,7 @@ where
let mut state_ = state.borrow_mut();
state_
.borrow_mut::<NP>()
- .check_net(&(&args.hostname, Some(args.port)))?;
+ .check_net(&(&args.hostname, Some(args.port)), "Deno.connect()")?;
}
let addr = resolve_addr(&args.hostname, args.port)
.await?
@@ -354,8 +357,12 @@ where
super::check_unstable2(&state, "Deno.connect");
{
let mut state_ = state.borrow_mut();
- state_.borrow_mut::<NP>().check_read(address_path)?;
- state_.borrow_mut::<NP>().check_write(address_path)?;
+ state_
+ .borrow_mut::<NP>()
+ .check_read(address_path, "Deno.connect()")?;
+ state_
+ .borrow_mut::<NP>()
+ .check_write(address_path, "Deno.connect()")?;
}
let path = args.path;
let unix_stream = net_unix::UnixStream::connect(Path::new(&path)).await?;
@@ -494,9 +501,10 @@ where
if transport == "udp" {
super::check_unstable(state, "Deno.listenDatagram");
}
- state
- .borrow_mut::<NP>()
- .check_net(&(&args.hostname, Some(args.port)))?;
+ state.borrow_mut::<NP>().check_net(
+ &(&args.hostname, Some(args.port)),
+ "Deno.listenDatagram()",
+ )?;
}
let addr = resolve_addr_sync(&args.hostname, args.port)?
.next()
@@ -540,9 +548,14 @@ where
if transport == "unixpacket" {
super::check_unstable(state, "Deno.listenDatagram");
}
+ let api_name = if transport == "unix" {
+ "Deno.listen()"
+ } else {
+ "Deno.listenDatagram()"
+ };
let permissions = state.borrow_mut::<NP>();
- permissions.check_read(address_path)?;
- permissions.check_write(address_path)?;
+ permissions.check_read(address_path, api_name)?;
+ permissions.check_write(address_path, api_name)?;
}
let (rid, local_addr) = if transport == "unix" {
net_unix::listen_unix(state, address_path)?
@@ -678,7 +691,7 @@ where
let socker_addr = &ns.socket_addr;
let ip = socker_addr.ip().to_string();
let port = socker_addr.port();
- perm.check_net(&(ip, Some(port)))?;
+ perm.check_net(&(ip, Some(port)), "Deno.resolveDns()")?;
}
}
@@ -1010,15 +1023,24 @@ mod tests {
fn check_net<T: AsRef<str>>(
&mut self,
_host: &(T, Option<u16>),
+ _api_name: &str,
) -> Result<(), AnyError> {
Ok(())
}
- fn check_read(&mut self, _p: &Path) -> Result<(), AnyError> {
+ fn check_read(
+ &mut self,
+ _p: &Path,
+ _api_name: &str,
+ ) -> Result<(), AnyError> {
Ok(())
}
- fn check_write(&mut self, _p: &Path) -> Result<(), AnyError> {
+ fn check_write(
+ &mut self,
+ _p: &Path,
+ _api_name: &str,
+ ) -> Result<(), AnyError> {
Ok(())
}
}
diff --git a/ext/net/ops_tls.rs b/ext/net/ops_tls.rs
index 1c91674df..230f4359e 100644
--- a/ext/net/ops_tls.rs
+++ b/ext/net/ops_tls.rs
@@ -799,7 +799,7 @@ where
{
let mut s = state.borrow_mut();
let permissions = s.borrow_mut::<NP>();
- permissions.check_net(&(hostname, Some(0)))?;
+ permissions.check_net(&(hostname, Some(0)), "Deno.startTls()")?;
}
let ca_certs = args
@@ -904,9 +904,9 @@ where
{
let mut s = state.borrow_mut();
let permissions = s.borrow_mut::<NP>();
- permissions.check_net(&(hostname, Some(port)))?;
+ permissions.check_net(&(hostname, Some(port)), "Deno.connectTls()")?;
if let Some(path) = cert_file {
- permissions.check_read(Path::new(path))?;
+ permissions.check_read(Path::new(path), "Deno.connectTls()")?;
}
}
@@ -1051,12 +1051,12 @@ where
{
let permissions = state.borrow_mut::<NP>();
- permissions.check_net(&(hostname, Some(port)))?;
+ permissions.check_net(&(hostname, Some(port)), "Deno.listenTls()")?;
if let Some(path) = cert_file {
- permissions.check_read(Path::new(path))?;
+ permissions.check_read(Path::new(path), "Deno.listenTls()")?;
}
if let Some(path) = key_file {
- permissions.check_read(Path::new(path))?;
+ permissions.check_read(Path::new(path), "Deno.listenTls()")?;
}
}