0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

Check allow-net in fetch

This commit is contained in:
Parsa Ghadimi 2018-09-05 10:59:02 +04:30 committed by Ryan Dahl
parent 1e709aa348
commit 1052f8d0c9
3 changed files with 25 additions and 6 deletions

View file

@ -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;
}

View file

@ -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");
});

View file

@ -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();