/*
 * Copyright 2014 Groupon, Inc
 * Copyright 2014 The Billing Project, LLC
 *
 * The Billing Project licenses this file to you under the Apache License, version 2.0
 * (the "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at:
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package org.killbill.billing.server.filters;

import java.io.IOException;

import javax.inject.Singleton;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

@Singleton
public class ResponseCorsFilter implements Filter {

    @Override
    public void init(final FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
        final HttpServletResponse res = (HttpServletResponse) response;
        res.addHeader("Access-Control-Allow-Origin", "*");
        res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
        res.addHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, X-Killbill-ApiKey, X-Killbill-ApiSecret");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}

@@ -1042,70 +1042,1538 @@
 e;%0A%0A
-@Singleton%0Apublic class ResponseCorsFilter implements Filter %7B
+import org.killbill.billing.jaxrs.resources.JaxrsResource;%0A%0Aimport com.google.common.base.Joiner;%0Aimport com.google.common.collect.ImmutableList;%0A%0A@Singleton%0Apublic class ResponseCorsFilter implements Filter %7B%0A%0A    private final String allowedHeaders;%0A%0A    public ResponseCorsFilter() %7B%0A        allowedHeaders = Joiner.on(%22,%22).join(ImmutableList.%3CString%3Eof(%22Authorization%22,%0A                                                                      %22Content-Type%22,%0A                                                                      JaxrsResource.HDR_API_KEY,%0A                                                                      JaxrsResource.HDR_API_SECRET,%0A                                                                      JaxrsResource.HDR_COMMENT,%0A                                                                      JaxrsResource.HDR_CREATED_BY,%0A                                                                      JaxrsResource.HDR_PAGINATION_CURRENT_OFFSET,%0A                                                                      JaxrsResource.HDR_PAGINATION_MAX_NB_RECORDS,%0A                                                                      JaxrsResource.HDR_PAGINATION_NEXT_OFFSET,%0A                                                                      JaxrsResource.HDR_PAGINATION_NEXT_PAGE_URI,%0A                                                                      JaxrsResource.HDR_PAGINATION_TOTAL_NB_RECORDS,%0A                                                                      JaxrsResource.HDR_REASON));%0A    %7D
 %0A%0A  
@@ -3115,78 +3115,22 @@
 s%22, 
-%22Authorization, Content-Type, X-Killbill-ApiKey, X-Killbill-ApiSecret%22
+allowedHeaders
 );%0A 

add missing headers in ResponseCorsFilter