package compositions;
import play.libs.F;
import play.mvc.Action;
import play.mvc.Http.Response;
import play.mvc.Http.Context;
import play.mvc.Result;
import play.mvc.With;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public class CorsComposition {
@With(CorsAction.class)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Cors {
String value() default "*";
}
public static class CorsAction extends Action<Cors>{
public F.Promise<Result> call(Context context) throws Throwable {
Response response = context.response();
response.setHeader("Access-Control-Allow-Origin",configuration.value());
if ( context.request().method().equals("OPTIONS")) {
response.setHeader("Access-Control-Allow-Methods","POST, DELETE");
response.setHeader("Access-Control-Max-Age","3600");
response.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept, Authorization, Call-Origin");
return F.Promise.pure((Result)ok());
}
response.setHeader("Access-Control-Allow-Headers","X-Requested-With");
return delegate.call(context);
}
}
}