package auth

import "time"

// AccessIdentityType identifies whether the identity  can access some resource
type AccessIdentityType string

const (
	AccessIdentityTypeUserID      AccessIdentityType = "user_id"
	AccessIdentityTypeApiKeyAK    AccessIdentityType = "apikey_ak"
	AccessIdentityTypeAccessToken AccessIdentityType = "access_token"
)

// AuthnIdentityType identify the identity's authentication type
type AuthnIdentityType string

const (
	AuthnIdentityTypeUserToken   AuthnIdentityType = "user_token"
	AuthnIdentityTypeApiKeyAK    AuthnIdentityType = "apikey_ak"
	AuthnIdentityTypeAccessToken AuthnIdentityType = "access_token"
)

const (
	AuthnRetOK   int32 = 0
	AuthnRetFail int32 = 10

	AccessRetRelease   int32 = 0
	AccessRetIntercept int32 = 10
)

const (
	DefReadTimeout = time.Millisecond * 6000

	ExactMatchFormatter = "^%s$"
	ResourceExprNO      = "(?U){.+}"
	PathExprNO          = "(?U)\\(.+\\)"

	PathMethodSeparator = ":"
	MethodSeparator     = ","

	ResourceValueSeparator = "/"

	PathPrefix = "/"

	AccessMetadataPath   = "access_metadata_path"
	AccessMetadataMethod = "access_metadata_method"

	AccessMetadataIdentityTyeKey = "access_metadata_identity_tye_key"
	AccessMetadataIdentityValKey = "access_metadata_identity_val_key"

	AccessMetadataResourceKey      = "access_metadata_resource_key"
	AccessMetadataResourceParamKey = "access_metadata_resource_param_key"

	AccessMetadataResourceMapKey      = "access_metadata_resource_map_key"
	AccessMetadataRequestWhitelistKey = "access_metadata_request_whitelist_key"
)

const (
	IdentityInfoKey = "authn_identity_info_key"

	AuthorizationHeader = "Authorization"
	XAuthMethodHeader   = "X-Auth-Method"
	XAuthRawHeader      = "X-Auth-Raw"
	XAuthContentHeader  = "X-Auth-Content"

	XAuthMethodValBear   = "bear"
	XAuthMethodValBasic  = "basic"
	XAuthMethodValDigest = "digest"

	AccessOrgIdQueryKey = "accessOrgId"
)

const (
	GrpcGatewayMetadataToken  = "auth_metadata_grpc_gateway_token"
	GrpcGatewayMetadataVal    = "1"
	GrpcGatewayMetadataHeader = "auth_metadata_grpc_gateway_header_"
	GrpcGatewayMetadataQuery  = "auth_metadata_grpc_gateway_query_"
)
