corsHeaders function

Middleware corsHeaders({
  1. Map<String, String>? headers,
  2. OriginChecker originChecker = originAllowAll,
})

Implementation

Middleware corsHeaders({
  Map<String, String>? headers,
  OriginChecker originChecker = originAllowAll,
}) {
  final headersAll = headers?.map((key, value) => MapEntry(key, [value]));
  return (Handler handler) {
    return (Request request) async {
      final origin = request.headers[ORIGIN];

      if (origin == null || !originChecker(origin)) {
        return handler(request);
      }

      final _headers = <String, List<String>>{
        ..._defaultHeadersAll,
        ...?headersAll,
      };

      final userProvidedAccessControlAllowOrigin =
          headers?[ACCESS_CONTROL_ALLOW_ORIGIN];

      if (userProvidedAccessControlAllowOrigin != null) {
        _headers[ACCESS_CONTROL_ALLOW_ORIGIN] = [
          userProvidedAccessControlAllowOrigin
        ];
        _headers[VARY] = ['Origin'];
      } else {
        _headers[ACCESS_CONTROL_ALLOW_ORIGIN] = [origin];
      }

      if (request.method == 'OPTIONS') {
        return Response.ok(null, headers: _headers);
      }

      final response = await handler(request);

      return response.change(headers: {
        ..._headers,
        ...response.headersAll,
      });
    };
  };
}