CorsHandler.kt

package com.hexagonkt.http.server.handlers

import com.hexagonkt.http.handlers.FilterHandler
import com.hexagonkt.http.handlers.HttpHandler
import com.hexagonkt.http.handlers.HttpPredicate
import com.hexagonkt.http.model.HttpMethod
import com.hexagonkt.http.model.HttpMethod.Companion.ALL
import com.hexagonkt.http.model.HttpStatus
import com.hexagonkt.http.model.NO_CONTENT_204
import com.hexagonkt.http.server.callbacks.CorsCallback

class CorsHandler(pattern: String, cors: CorsCallback) :
    HttpHandler by FilterHandler(HttpPredicate(pattern = pattern), cors) {

    constructor(cors: CorsCallback) : this("*", cors)

    constructor(
        pattern: String = "*",
        allowedOrigin: String = "*",
        allowedMethods: Set<HttpMethod> = ALL,
        allowedHeaders: Set<String> = emptySet(),
        exposedHeaders: Set<String> = emptySet(),
        supportCredentials: Boolean = true,
        preFlightStatus: HttpStatus = NO_CONTENT_204,
        preFlightMaxAge: Long = 0
    ) : this(
        pattern,
        CorsCallback(
            allowedOrigin,
            allowedMethods,
            allowedHeaders,
            exposedHeaders,
            supportCredentials,
            preFlightStatus,
            preFlightMaxAge,
        )
    )
}