diff options
-rw-r--r-- | js/fetch.ts | 8 | ||||
-rw-r--r-- | js/fetch_test.ts | 14 | ||||
-rw-r--r-- | src/handlers.rs | 9 |
3 files changed, 25 insertions, 6 deletions
diff --git a/js/fetch.ts b/js/fetch.ts index 73ad34e7a..2d57fa65c 100644 --- a/js/fetch.ts +++ b/js/fetch.ts @@ -166,8 +166,7 @@ class FetchRequest { fbs.FetchReq.addId(builder, this.id); fbs.FetchReq.addUrl(builder, url); const msg = fbs.FetchReq.endFetchReq(builder); - const res = send(builder, fbs.Any.FetchReq, msg); - assert(res == null); + send(builder, fbs.Any.FetchReq, msg); } } @@ -177,7 +176,7 @@ export function fetch( ): Promise<Response> { const fetchReq = new FetchRequest(input as string); const response = fetchReq.response; - return new Promise((resolve, reject) => { + const promise = new Promise<Response>((resolve, reject) => { response.onHeader = (response: FetchResponse) => { log("onHeader"); resolve(response); @@ -186,6 +185,7 @@ export function fetch( log("onError", error); reject(error); }; - fetchReq.start(); }); + fetchReq.start(); + return promise; } diff --git a/js/fetch_test.ts b/js/fetch_test.ts index 873f2fbde..88cf834bc 100644 --- a/js/fetch_test.ts +++ b/js/fetch_test.ts @@ -1,5 +1,5 @@ // Copyright 2018 the Deno authors. All rights reserved. MIT license. -import { testPerm, assertEqual } from "./test_util.ts"; +import { test, testPerm, assert, assertEqual } from "./test_util.ts"; import * as deno from "deno"; testPerm({ net: true }, async function fetchJsonSuccess() { @@ -7,3 +7,15 @@ testPerm({ net: true }, async function fetchJsonSuccess() { const json = await response.json(); assertEqual(json.name, "deno"); }); + +test(async function fetchPerm() { + let err; + try { + await fetch("http://localhost:4545/package.json"); + } catch (err_) { + err = err_; + } + // TODO assert(err instanceof deno.PermissionDenied). + assert(err); + assertEqual(err.name, "deno.PermissionDenied"); +}); diff --git a/src/handlers.rs b/src/handlers.rs index 0cd5b7367..f0a15186d 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -289,10 +289,17 @@ fn handle_fetch_req( base: msg::Base, _builder: &mut FlatBufferBuilder, ) -> HandlerResult { + let deno = from_c(d); + if !deno.flags.allow_net { + let err = std::io::Error::new( + std::io::ErrorKind::PermissionDenied, + "allow_net is off.", + ); + return Err(err.into()); + } let msg = base.msg_as_fetch_req().unwrap(); let id = msg.id(); let url = msg.url().unwrap(); - let deno = from_c(d); let url = url.parse::<hyper::Uri>().unwrap(); let client = Client::new(); |