< Summary - Kestrun — Combined Coverage

Information
Class: Public.Authentication.Add-KrBasicAuthentication
Assembly: Kestrun.PowerShell.Public
File(s): /home/runner/work/Kestrun/Kestrun/src/PowerShell/Kestrun/Public/Authentication/Add-KrBasicAuthentication.ps1
Tag: Kestrun/Kestrun@ca54e35c77799b76774b3805b6f075cdbc0c5fbe
Line coverage
0%
Covered lines: 0
Uncovered lines: 61
Coverable lines: 61
Total lines: 384
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 09/08/2025 - 20:34:03 Line coverage: 55.9% (33/59) Total lines: 335 Tag: Kestrun/Kestrun@3790ee5884494a7a2a829344a47743e0bf492e7210/13/2025 - 16:52:37 Line coverage: 0% (0/59) Total lines: 334 Tag: Kestrun/Kestrun@10d476bee71c71ad215bb8ab59f219887b5b4a5e12/12/2025 - 17:27:19 Line coverage: 0% (0/60) Total lines: 365 Tag: Kestrun/Kestrun@826bf9dcf9db118c5de4c78a3259bce9549f0dcd12/21/2025 - 06:07:10 Line coverage: 0% (0/61) Total lines: 384 Tag: Kestrun/Kestrun@8cf7f77e55fd1fd046ea4e5413eb9ef96e49fe6a

Metrics

File(s)

/home/runner/work/Kestrun/Kestrun/src/PowerShell/Kestrun/Public/Authentication/Add-KrBasicAuthentication.ps1

#LineLine coverage
 1<#
 2    .SYNOPSIS
 3        Adds basic authentication to the Kestrun server.
 4    .DESCRIPTION
 5        Configures the Kestrun server to use basic authentication for incoming requests.
 6    .PARAMETER Server
 7        The Kestrun server instance to configure.
 8    .PARAMETER AuthenticationScheme
 9        The name of the basic authentication scheme.
 10    .PARAMETER DisplayName
 11        The display name of the basic authentication scheme.
 12    .PARAMETER Description
 13        A description of the basic authentication scheme.
 14    .PARAMETER Deprecated
 15        If specified, marks the authentication scheme as deprecated in OpenAPI documentation.
 16    .PARAMETER DocId
 17        The documentation IDs to associate with this authentication scheme.
 18    .PARAMETER Options
 19        The options to configure the basic authentication.
 20    .PARAMETER ScriptBlock
 21        A script block that contains the logic for validating the username and password.
 22    .PARAMETER Code
 23        C# or VBNet code that contains the logic for validating the username and password.
 24    .PARAMETER CodeLanguage
 25        The scripting language of the code used for validating the username and password.
 26    .PARAMETER CodeFilePath
 27        Path to a file containing C# code that contains the logic for validating the username and password.
 28    .PARAMETER HeaderName
 29        The name of the header to look for the basic authentication credentials.
 30    .PARAMETER Base64Encoded
 31        If specified, the credentials are expected to be Base64 encoded.
 32    .PARAMETER SuppressWwwAuthenticate
 33        If specified, the server will not emit the WWW-Authenticate header in responses.
 34    .PARAMETER SeparatorRegex
 35        A regular expression to use for separating multiple credentials in the header.
 36    .PARAMETER Realm
 37        The realm for the basic authentication.
 38    .PARAMETER AllowInsecureHttp
 39        If specified, allows the basic authentication to be used over HTTP instead of HTTPS.
 40    .PARAMETER Logger
 41        A logger to use for logging authentication events.
 42    .PARAMETER ClaimPolicyConfig
 43        Configuration for claim policies to apply during authentication.
 44    .PARAMETER IssueClaimsScriptBlock
 45        A script block that contains the logic for issuing claims after successful authentication.
 46    .PARAMETER IssueClaimsCode
 47        C# or VBNet code that contains the logic for issuing claims after successful authentication.
 48    .PARAMETER IssueClaimsCodeLanguage
 49        The scripting language of the code used for issuing claims.
 50    .PARAMETER IssueClaimsCodeFilePath
 51        Path to a file containing the code that contains the logic for issuing claims after successful authentication
 52    .PARAMETER PassThru
 53        If specified, returns the modified server instance after adding the authentication.
 54    .EXAMPLE
 55        Add-KrBasicAuthentication -Server $server -Name "MyAuth" -Options $options -ScriptBlock $scriptBlock
 56        Configure Kestrun server to use basic authentication with the specified script block.
 57    .EXAMPLE
 58        Add-KrBasicAuthentication -Server $server -Name "MyAuth" -Options $options -Code $code -CodeLanguage $codeLangua
 59        Configure Kestrun server to use basic authentication with the specified code.
 60    .EXAMPLE
 61        Add-KrBasicAuthentication -Server $server -Name "MyAuth" -Options $options -CodeFilePath $codeFilePath
 62        Configure Kestrun server to use basic authentication with the specified code file.
 63    .NOTES
 64        This function is part of the Kestrun.Authentication module and is used to configure basic authentication for Kes
 65        Maps to Kestrun.Hosting.KestrunHostAuthnExtensions.AddBasicAuthentication
 66#>
 67function Add-KrBasicAuthentication {
 68    [KestrunRuntimeApi('Definition')]
 69    [CmdletBinding(defaultParameterSetName = 'v1')]
 70    [OutputType([Kestrun.Hosting.KestrunHost])]
 71    param(
 72        [Parameter(Mandatory = $false, ValueFromPipeline)]
 73        [Kestrun.Hosting.KestrunHost]$Server,
 74
 75        [Parameter()]
 76        [string]$AuthenticationScheme = [Kestrun.Authentication.AuthenticationDefaults]::BasicAuthenticationSchemeName,
 77
 78        [Parameter()]
 79        [string]$DisplayName = [Kestrun.Authentication.AuthenticationDefaults]::BasicAuthenticationDisplayName,
 80
 81        [Parameter()]
 82        [string[]]$DocId = [Kestrun.OpenApi.OpenApiDocDescriptor]::DefaultDocumentationIds,
 83
 84        [Parameter(Mandatory = $true, ParameterSetName = 'Options')]
 85        [Kestrun.Authentication.BasicAuthenticationOptions]$Options,
 86
 87        [Parameter(ParameterSetName = 'v1')]
 88        [Parameter(ParameterSetName = 'v1_i1')]
 89        [Parameter(ParameterSetName = 'v1_i2')]
 90        [Parameter(ParameterSetName = 'v1_i3')]
 91        [Parameter(ParameterSetName = 'v2')]
 92        [Parameter(ParameterSetName = 'v2_i1')]
 93        [Parameter(ParameterSetName = 'v2_i2')]
 94        [Parameter(ParameterSetName = 'v2_i3')]
 95        [Parameter(ParameterSetName = 'v3')]
 96        [Parameter(ParameterSetName = 'v3_i1')]
 97        [Parameter(ParameterSetName = 'v3_i2')]
 98        [Parameter(ParameterSetName = 'v3_i3')]
 99        [string]$Description,
 100
 101        [Parameter(ParameterSetName = 'v1')]
 102        [Parameter(ParameterSetName = 'v1_i1')]
 103        [Parameter(ParameterSetName = 'v1_i2')]
 104        [Parameter(ParameterSetName = 'v1_i3')]
 105        [Parameter(ParameterSetName = 'v2')]
 106        [Parameter(ParameterSetName = 'v2_i1')]
 107        [Parameter(ParameterSetName = 'v2_i2')]
 108        [Parameter(ParameterSetName = 'v2_i3')]
 109        [Parameter(ParameterSetName = 'v3')]
 110        [Parameter(ParameterSetName = 'v3_i1')]
 111        [Parameter(ParameterSetName = 'v3_i2')]
 112        [Parameter(ParameterSetName = 'v3_i3')]
 113        [switch]$Deprecated,
 114
 115        [Parameter(Mandatory = $true, ParameterSetName = 'v1')]
 116        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i1')]
 117        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i2')]
 118        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i3')]
 119        [scriptblock]$ScriptBlock,
 120
 121        [Parameter(Mandatory = $true, ParameterSetName = 'v2')]
 122        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i1')]
 123        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i2')]
 124        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i3')]
 125        [string]$Code,
 126
 127        [Parameter(ParameterSetName = 'v2')]
 128        [Parameter(ParameterSetName = 'v2_i1')]
 129        [Parameter(ParameterSetName = 'v2_i2')]
 130        [Parameter(ParameterSetName = 'v2_i3')]
 131        [Kestrun.Scripting.ScriptLanguage]$CodeLanguage = [Kestrun.Scripting.ScriptLanguage]::CSharp,
 132
 133        [Parameter(Mandatory = $true, ParameterSetName = 'v3')]
 134        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i1')]
 135        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i2')]
 136        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i3')]
 137        [string]$CodeFilePath,
 138
 139        [Parameter(ParameterSetName = 'v1')]
 140        [Parameter(ParameterSetName = 'v1_i1')]
 141        [Parameter(ParameterSetName = 'v1_i2')]
 142        [Parameter(ParameterSetName = 'v1_i3')]
 143        [Parameter(ParameterSetName = 'v2')]
 144        [Parameter(ParameterSetName = 'v2_i1')]
 145        [Parameter(ParameterSetName = 'v2_i2')]
 146        [Parameter(ParameterSetName = 'v2_i3')]
 147        [Parameter(ParameterSetName = 'v3')]
 148        [Parameter(ParameterSetName = 'v3_i1')]
 149        [Parameter(ParameterSetName = 'v3_i2')]
 150        [Parameter(ParameterSetName = 'v3_i3')]
 151        [string]$HeaderName,
 152
 153        [Parameter(ParameterSetName = 'v1')]
 154        [Parameter(ParameterSetName = 'v1_i1')]
 155        [Parameter(ParameterSetName = 'v1_i2')]
 156        [Parameter(ParameterSetName = 'v1_i3')]
 157        [Parameter(ParameterSetName = 'v2')]
 158        [Parameter(ParameterSetName = 'v2_i1')]
 159        [Parameter(ParameterSetName = 'v2_i2')]
 160        [Parameter(ParameterSetName = 'v2_i3')]
 161        [Parameter(ParameterSetName = 'v3')]
 162        [Parameter(ParameterSetName = 'v3_i1')]
 163        [Parameter(ParameterSetName = 'v3_i2')]
 164        [Parameter(ParameterSetName = 'v3_i3')]
 165        [switch]$Base64Encoded,
 166
 167        [Parameter(ParameterSetName = 'v1')]
 168        [Parameter(ParameterSetName = 'v1_i1')]
 169        [Parameter(ParameterSetName = 'v1_i2')]
 170        [Parameter(ParameterSetName = 'v1_i3')]
 171        [Parameter(ParameterSetName = 'v2')]
 172        [Parameter(ParameterSetName = 'v2_i1')]
 173        [Parameter(ParameterSetName = 'v2_i2')]
 174        [Parameter(ParameterSetName = 'v2_i3')]
 175        [Parameter(ParameterSetName = 'v3')]
 176        [Parameter(ParameterSetName = 'v3_i1')]
 177        [Parameter(ParameterSetName = 'v3_i2')]
 178        [Parameter(ParameterSetName = 'v3_i3')]
 179        [switch]$SuppressWwwAuthenticate,
 180
 181        [Parameter(ParameterSetName = 'v1')]
 182        [Parameter(ParameterSetName = 'v1_i1')]
 183        [Parameter(ParameterSetName = 'v1_i2')]
 184        [Parameter(ParameterSetName = 'v1_i3')]
 185        [Parameter(ParameterSetName = 'v2')]
 186        [Parameter(ParameterSetName = 'v2_i1')]
 187        [Parameter(ParameterSetName = 'v2_i2')]
 188        [Parameter(ParameterSetName = 'v2_i3')]
 189        [Parameter(ParameterSetName = 'v3')]
 190        [Parameter(ParameterSetName = 'v3_i1')]
 191        [Parameter(ParameterSetName = 'v3_i2')]
 192        [Parameter(ParameterSetName = 'v3_i3')]
 193        [Regex]$SeparatorRegex,
 194
 195        [Parameter(ParameterSetName = 'v1')]
 196        [Parameter(ParameterSetName = 'v1_i1')]
 197        [Parameter(ParameterSetName = 'v1_i2')]
 198        [Parameter(ParameterSetName = 'v1_i3')]
 199        [Parameter(ParameterSetName = 'v2')]
 200        [Parameter(ParameterSetName = 'v2_i1')]
 201        [Parameter(ParameterSetName = 'v2_i2')]
 202        [Parameter(ParameterSetName = 'v2_i3')]
 203        [Parameter(ParameterSetName = 'v3')]
 204        [Parameter(ParameterSetName = 'v3_i1')]
 205        [Parameter(ParameterSetName = 'v3_i2')]
 206        [Parameter(ParameterSetName = 'v3_i3')]
 207        [string]$Realm,
 208
 209        [Parameter(ParameterSetName = 'v1')]
 210        [Parameter(ParameterSetName = 'v1_i1')]
 211        [Parameter(ParameterSetName = 'v1_i2')]
 212        [Parameter(ParameterSetName = 'v1_i3')]
 213        [Parameter(ParameterSetName = 'v2')]
 214        [Parameter(ParameterSetName = 'v2_i1')]
 215        [Parameter(ParameterSetName = 'v2_i2')]
 216        [Parameter(ParameterSetName = 'v2_i3')]
 217        [Parameter(ParameterSetName = 'v3')]
 218        [Parameter(ParameterSetName = 'v3_i1')]
 219        [Parameter(ParameterSetName = 'v3_i2')]
 220        [Parameter(ParameterSetName = 'v3_i3')]
 221        [switch]$AllowInsecureHttp,
 222
 223        [Parameter(ParameterSetName = 'v1')]
 224        [Parameter(ParameterSetName = 'v1_i1')]
 225        [Parameter(ParameterSetName = 'v1_i2')]
 226        [Parameter(ParameterSetName = 'v1_i3')]
 227        [Parameter(ParameterSetName = 'v2')]
 228        [Parameter(ParameterSetName = 'v2_i1')]
 229        [Parameter(ParameterSetName = 'v2_i2')]
 230        [Parameter(ParameterSetName = 'v2_i3')]
 231        [Parameter(ParameterSetName = 'v3')]
 232        [Parameter(ParameterSetName = 'v3_i1')]
 233        [Parameter(ParameterSetName = 'v3_i2')]
 234        [Parameter(ParameterSetName = 'v3_i3')]
 235        [Serilog.ILogger]$Logger,
 236
 237        [Parameter(ParameterSetName = 'v1_i1')]
 238        [Parameter(ParameterSetName = 'v1_i2')]
 239        [Parameter(ParameterSetName = 'v1_i3')]
 240        [Parameter(ParameterSetName = 'v2_i1')]
 241        [Parameter(ParameterSetName = 'v2_i2')]
 242        [Parameter(ParameterSetName = 'v2_i3')]
 243        [Parameter(ParameterSetName = 'v3_i1')]
 244        [Parameter(ParameterSetName = 'v3_i2')]
 245        [Parameter(ParameterSetName = 'v3_i3')]
 246        [Kestrun.Claims.ClaimPolicyConfig]$ClaimPolicyConfig,
 247
 248        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i1')]
 249        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i1')]
 250        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i1')]
 251        [scriptblock]$IssueClaimsScriptBlock,
 252
 253        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i2')]
 254        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i2')]
 255        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i2')]
 256        [string]$IssueClaimsCode,
 257
 258        [Parameter(ParameterSetName = 'v3_i2')]
 259        [Parameter(ParameterSetName = 'v2_i2')]
 260        [Parameter(ParameterSetName = 'v1_i2')]
 261        [Kestrun.Scripting.ScriptLanguage]$IssueClaimsCodeLanguage = [Kestrun.Scripting.ScriptLanguage]::CSharp,
 262
 263        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i3')]
 264        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i3')]
 265        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i3')]
 266        [string]$IssueClaimsCodeFilePath,
 267
 268        [Parameter()]
 269        [switch]$PassThru
 270    )
 271    process {
 0272        if ($PSCmdlet.ParameterSetName -ne 'Options') {
 0273            $Options = [Kestrun.Authentication.BasicAuthenticationOptions]::new()
 0274            $Options.ValidateCodeSettings = [Kestrun.Authentication.AuthenticationCodeSettings]::new()
 0275            if ($null -ne $ScriptBlock) {
 0276                $Options.ValidateCodeSettings.Code = $ScriptBlock.ToString()
 0277                $Options.ValidateCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::PowerShell
 0278            } elseif (-not [string]::IsNullOrWhiteSpace($Code)) {
 0279                $Options.ValidateCodeSettings.Code = $Code
 0280                $Options.ValidateCodeSettings.Language = $CodeLanguage
 0281            } elseif (-not [string]::IsNullOrWhiteSpace($CodeFilePath)) {
 0282                if (-not (Test-Path -Path $CodeFilePath)) {
 0283                    throw "The specified code file path does not exist: $CodeFilePath"
 284                }
 0285                $extension = Split-Path -Path $CodeFilePath -Extension
 0286                switch ($extension) {
 287                    '.ps1' {
 0288                        $Options.ValidateCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::PowerShell
 289                    }
 290                    '.cs' {
 0291                        $Options.ValidateCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::CSharp
 292                    }
 293                    '.vb' {
 0294                        $Options.ValidateCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::VisualBasic
 295                    }
 296                    default {
 0297                        throw "Unsupported '$extension' code file extension."
 298                    }
 299                }
 0300                $Options.ValidateCodeSettings.Code = Get-Content -Path $CodeFilePath -Raw
 301            }
 302
 0303            if (-not [string]::IsNullOrWhiteSpace($HeaderName)) {
 0304                $Options.HeaderName = $HeaderName
 305            }
 0306            if ($Base64Encoded.IsPresent) {
 0307                $Options.Base64Encoded = $Base64Encoded.IsPresent
 308            }
 0309            if ($SuppressWwwAuthenticate.IsPresent) {
 0310                $Options.SuppressWwwAuthenticate = $SuppressWwwAuthenticate.IsPresent
 311            }
 0312            if ($null -ne $SeparatorRegex) {
 0313                $Options.SeparatorRegex = $SeparatorRegex
 314            }
 0315            if (-not [string]::IsNullOrWhiteSpace($Realm)) {
 0316                $Options.Realm = $Realm
 317            }
 318
 0319            if (-not ([string]::IsNullOrWhiteSpace($Description))) {
 0320                $Options.Description = $Description
 321            }
 322
 323            # Set the Deprecated option
 0324            $Options.Deprecated = $Deprecated.IsPresent
 325
 0326            $Options.AllowInsecureHttp = $AllowInsecureHttp.IsPresent
 327
 0328            if ($null -ne $ClaimPolicyConfig) {
 0329                $Options.ClaimPolicyConfig = $ClaimPolicyConfig
 330            }
 0331            if ($null -ne $Logger) {
 0332                $Options.Logger = $Logger
 333            }
 334
 0335            if ($PSCmdlet.ParameterSetName.contains('_')) {
 336
 0337                $Options.IssueClaimsCodeSettings = [Kestrun.Authentication.AuthenticationCodeSettings]::new()
 0338                if ($null -ne $IssueClaimsScriptBlock) {
 0339                    $Options.IssueClaimsCodeSettings.Code = $IssueClaimsScriptBlock.ToString()
 0340                    $Options.IssueClaimsCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::PowerShell
 0341                } elseif (-not [string]::IsNullOrWhiteSpace($IssueClaimsCode)) {
 0342                    $Options.IssueClaimsCodeSettings.Code = $IssueClaimsCode
 0343                    $Options.IssueClaimsCodeSettings.Language = $IssueClaimsCodeLanguage
 0344                } elseif (-not [string]::IsNullOrWhiteSpace($IssueClaimsCodeFilePath)) {
 0345                    if (-not (Test-Path -Path $IssueClaimsCodeFilePath)) {
 0346                        throw "The specified code file path does not exist: $IssueClaimsCodeFilePath"
 347                    }
 0348                    $extension = Split-Path -Path $IssueClaimsCodeFilePath -Extension
 0349                    switch ($extension) {
 350                        '.ps1' {
 0351                            $Options.IssueClaimsCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::PowerShell
 352                        }
 353                        '.cs' {
 0354                            $Options.IssueClaimsCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::CSharp
 355                        }
 356                        '.vb' {
 0357                            $Options.IssueClaimsCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::VisualBasic
 358                        }
 359                        default {
 0360                            throw "Unsupported '$extension' code file extension."
 361                        }
 362                    }
 0363                    $Options.IssueClaimsCodeSettings.Code = Get-Content -Path $CodeFilePath -Raw
 364                }
 365            }
 366            # Set OpenApi documentation IDs
 0367            $Options.DocumentationId = $DocId
 368        }
 369        # Ensure the server instance is resolved
 0370        $Server = Resolve-KestrunServer -Server $Server
 371
 0372        [Kestrun.Hosting.KestrunHostAuthnExtensions]::AddBasicAuthentication(
 373            $Server,
 374            $AuthenticationScheme,
 375            $DisplayName,
 376            $Options
 0377        ) | Out-Null
 378
 0379        if ($PassThru.IsPresent) {
 380            # if the PassThru switch is specified, return the modified server instance
 0381            return $Server
 382        }
 383    }
 384}

Methods/Properties

Add-KrBasicAuthentication()