Index: runtime/bin/vmservice/server.dart |
diff --git a/runtime/bin/vmservice/server.dart b/runtime/bin/vmservice/server.dart |
index 8d6a932ffc515acb8995632adad54ba59434f970..e1cb822f6afd0cfab29a8c26006578aea2dd4433 100644 |
--- a/runtime/bin/vmservice/server.dart |
+++ b/runtime/bin/vmservice/server.dart |
@@ -79,9 +79,8 @@ class HttpRequestClient extends Client { |
static ContentType jsonContentType = |
new ContentType("application", "json", charset: "utf-8"); |
final HttpRequest request; |
- final List<String> _allowedOrigins; |
- HttpRequestClient(this.request, VMService service, this._allowedOrigins) |
+ HttpRequestClient(this.request, VMService service) |
: super(service, sendEvents:false); |
disconnect() { |
@@ -95,15 +94,9 @@ class HttpRequestClient extends Client { |
return; |
} |
HttpResponse response = request.response; |
+ // We closed the connection for bad origins earlier. |
+ response.headers.add('Access-Control-Allow-Origin', '*'); |
response.headers.contentType = jsonContentType; |
- final origins = request.headers['Origin']; |
- if ((origins != null) && (origins.isNotEmpty)) { |
- final uri = Uri.parse(origins.first); |
- final noPortOrigin = new Uri(host: uri.host, scheme: uri.scheme).origin; |
- if (_allowedOrigins.contains(noPortOrigin)) { |
- response.headers.add('Access-Control-Allow-Origin', uri.origin); |
- } |
- } |
if (result is String) { |
response.write(result); |
} else { |
@@ -131,7 +124,6 @@ class Server { |
final String _ip; |
final int _port; |
final bool _originCheckDisabled; |
- final List<String> _allowedOrigins = <String>[]; |
HttpServer _server; |
bool get running => _server != null; |
bool _displayMessages = false; |
@@ -140,22 +132,27 @@ class Server { |
_displayMessages = (_ip != '127.0.0.1' || _port != 8181); |
} |
- void _addOrigin(String host, String port) { |
- if (port == null) { |
- String origin = 'http://$host'; |
- _allowedOrigins.add(origin); |
- } else { |
- String origin = 'http://$host:$port'; |
- _allowedOrigins.add(origin); |
+ bool _isAllowedOrigin(String origin) { |
+ Uri uri; |
+ try { |
+ uri = Uri.parse(origin); |
+ } catch (_) { |
+ return false; |
} |
- } |
- bool _isAllowedOrigin(String origin) { |
- for (String allowedOrigin in _allowedOrigins) { |
- if (origin.startsWith(allowedOrigin)) { |
- return true; |
- } |
+ // Explicitly add localhost and 127.0.0.1 on any port (necessary for |
+ // adb port forwarding). |
+ if ((uri.host == 'localhost') || |
+ (uri.host == '127.0.0.1')) { |
+ return true; |
} |
+ |
+ if ((uri.port == _server.port) && |
+ ((uri.host == _server.address.address) || |
+ (uri.host == _server.address.host))) { |
+ return true; |
+ } |
+ |
return false; |
} |
@@ -248,7 +245,7 @@ class Server { |
} |
// HTTP based service request. |
try { |
- var client = new HttpRequestClient(request, _service, _allowedOrigins); |
+ var client = new HttpRequestClient(request, _service); |
var message = new Message.fromUri(client, request.uri); |
client.onMessage(null, message); |
} catch (e) { |
@@ -264,23 +261,13 @@ class Server { |
return new Future.value(this); |
} |
- // Clear allowed origins. |
- _allowedOrigins.clear(); |
- |
var address = new InternetAddress(_ip); |
// Startup HTTP server. |
return HttpServer.bind(address, _port).then((s) { |
_server = s; |
_server.listen(_requestHandler, cancelOnError: true); |
- var ip = _server.address.address.toString(); |
- var port = _server.port.toString(); |
- // Add the numeric ip and host name to our allowed origins. |
- _addOrigin(ip, port); |
- _addOrigin(_server.address.host.toString(), port); |
- // Explicitly add localhost and 127.0.0.1 on any port (necessary for |
- // adb port forwarding). |
- _addOrigin('127.0.0.1', null); |
- _addOrigin('localhost', null); |
+ var ip = _server.address.address; |
+ var port = _server.port; |
if (_displayMessages) { |
print('Observatory listening on http://$ip:$port'); |
} |