aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/java/org/onap/vid/logging/Headers.kt
blob: b2969feb2a72e669c3dea5859f7207147a8d1fd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@file:JvmName("Headers")

package org.onap.vid.logging

import org.onap.portalsdk.core.util.SystemProperties
import org.onap.vid.logging.RequestIdHeader.*
import javax.servlet.http.HttpServletRequest

interface Header {
    val headerName: String
    fun stringEquals(header: String): Boolean = headerName.equals(header, true)
}

abstract class NamedHeader(override val headerName: String) : Header {
    abstract fun getHeaderValue(): String
}

@JvmField
val PARTNER_NAME = object : NamedHeader("X-ONAP-PartnerName") {
    override fun getHeaderValue() = "VID.VID"
}

enum class RequestIdHeader(override val headerName: String) : Header {
    ONAP_ID("X-ONAP-RequestID"),
    REQUEST_ID("X-RequestID"),
    TRANSACTION_ID("X-TransactionID"),
    ECOMP_ID(SystemProperties.ECOMP_REQUEST_ID),
    ;

    fun getHeaderValue(request: HttpServletRequest): String? = request.getHeader(headerName)
}

fun prioritizedRequestIdHeaders() = listOf(
        ONAP_ID,
        REQUEST_ID,
        TRANSACTION_ID,
        ECOMP_ID
)

fun highestPriorityHeader(httpRequest: HttpServletRequest): RequestIdHeader? {
    val headers = httpRequest.headerNames.asSequence().toSet()
    return prioritizedRequestIdHeaders().firstOrNull {
        requestIdHeader -> headers.any { requestIdHeader.stringEquals(it) }
    }
}