toMiddleware method
Builds the shelf middleware this value configures.
Implementation
@override
Middleware toMiddleware() {
return (Handler inner) {
return (Request request) async {
final parts = RequestParts.of(request);
final origin = parts.headers['origin'];
final allowed = origins.headerFor(origin);
// An `OPTIONS` without `Access-Control-Request-Method` is an ordinary
// request asking what a path supports, not a preflight.
final isPreflight = parts.method == 'OPTIONS' &&
parts.headers['access-control-request-method'] != null;
if (isPreflight) {
// A refused origin still gets an answer, just without permission.
return Response(
204,
headers: {
...?_allowHeaders(allowed),
if (allowed != null) ...{
'access-control-allow-methods': methods.join(', '),
'access-control-allow-headers': headers.join(', '),
if (maxAge != null)
'access-control-max-age': '${maxAge!.inSeconds}',
},
..._varyPreflight(),
},
);
}
final response = await inner(request);
return response.change(headers: _allowHeaders(allowed) ?? _vary());
};
};
}