< 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@0d738bf294e6281b936d031e1979d928007495ff
Line coverage
0%
Covered lines: 0
Uncovered lines: 60
Coverable lines: 60
Total lines: 365
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 08/26/2025 - 14:53:17 Line coverage: 55.9% (33/59) Total lines: 334 Tag: Kestrun/Kestrun@78d1e497d8ba989d121b57aa39aa3c6b22de743109/04/2025 - 22:37:32 Line coverage: 55.9% (33/59) Total lines: 335 Tag: Kestrun/Kestrun@afb7aadc0a8a42bfa2b51ea62c8a6e2cf63faec610/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@826bf9dcf9db118c5de4c78a3259bce9549f0dcd

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 DocId
 15        The documentation IDs to associate with this authentication scheme.
 16    .PARAMETER Options
 17        The options to configure the basic authentication.
 18    .PARAMETER ScriptBlock
 19        A script block that contains the logic for validating the username and password.
 20    .PARAMETER Code
 21        C# or VBNet code that contains the logic for validating the username and password.
 22    .PARAMETER CodeLanguage
 23        The scripting language of the code used for validating the username and password.
 24    .PARAMETER CodeFilePath
 25        Path to a file containing C# code that contains the logic for validating the username and password.
 26    .PARAMETER HeaderName
 27        The name of the header to look for the basic authentication credentials.
 28    .PARAMETER Base64Encoded
 29        If specified, the credentials are expected to be Base64 encoded.
 30    .PARAMETER SuppressWwwAuthenticate
 31        If specified, the server will not emit the WWW-Authenticate header in responses.
 32    .PARAMETER SeparatorRegex
 33        A regular expression to use for separating multiple credentials in the header.
 34    .PARAMETER Realm
 35        The realm for the basic authentication.
 36    .PARAMETER AllowInsecureHttp
 37        If specified, allows the basic authentication to be used over HTTP instead of HTTPS.
 38    .PARAMETER Logger
 39        A logger to use for logging authentication events.
 40    .PARAMETER ClaimPolicyConfig
 41        Configuration for claim policies to apply during authentication.
 42    .PARAMETER IssueClaimsScriptBlock
 43        A script block that contains the logic for issuing claims after successful authentication.
 44    .PARAMETER IssueClaimsCode
 45        C# or VBNet code that contains the logic for issuing claims after successful authentication.
 46    .PARAMETER IssueClaimsCodeLanguage
 47        The scripting language of the code used for issuing claims.
 48    .PARAMETER IssueClaimsCodeFilePath
 49        Path to a file containing the code that contains the logic for issuing claims after successful authentication
 50    .PARAMETER PassThru
 51        If specified, returns the modified server instance after adding the authentication.
 52    .EXAMPLE
 53        Add-KrBasicAuthentication -Server $server -Name "MyAuth" -Options $options -ScriptBlock $scriptBlock
 54        Configure Kestrun server to use basic authentication with the specified script block.
 55    .EXAMPLE
 56        Add-KrBasicAuthentication -Server $server -Name "MyAuth" -Options $options -Code $code -CodeLanguage $codeLangua
 57        Configure Kestrun server to use basic authentication with the specified code.
 58    .EXAMPLE
 59        Add-KrBasicAuthentication -Server $server -Name "MyAuth" -Options $options -CodeFilePath $codeFilePath
 60        Configure Kestrun server to use basic authentication with the specified code file.
 61    .NOTES
 62        This function is part of the Kestrun.Authentication module and is used to configure basic authentication for Kes
 63        Maps to Kestrun.Hosting.KestrunHostAuthnExtensions.AddBasicAuthentication
 64#>
 65function Add-KrBasicAuthentication {
 66    [KestrunRuntimeApi('Definition')]
 67    [CmdletBinding(defaultParameterSetName = 'v1')]
 68    [OutputType([Kestrun.Hosting.KestrunHost])]
 69    param(
 70        [Parameter(Mandatory = $false, ValueFromPipeline)]
 71        [Kestrun.Hosting.KestrunHost]$Server,
 72
 73        [Parameter()]
 74        [string]$AuthenticationScheme = [Kestrun.Authentication.AuthenticationDefaults]::BasicAuthenticationSchemeName,
 75
 76        [Parameter()]
 77        [string]$DisplayName = [Kestrun.Authentication.AuthenticationDefaults]::BasicAuthenticationDisplayName,
 78
 79        [Parameter()]
 80        [string[]]$DocId = [Kestrun.Authentication.IOpenApiAuthenticationOptions]::DefaultDocumentationIds,
 81
 82        [Parameter(Mandatory = $true, ParameterSetName = 'Options')]
 83        [Kestrun.Authentication.BasicAuthenticationOptions]$Options,
 84
 85        [Parameter(ParameterSetName = 'v1')]
 86        [Parameter(ParameterSetName = 'v1_i1')]
 87        [Parameter(ParameterSetName = 'v1_i2')]
 88        [Parameter(ParameterSetName = 'v1_i3')]
 89        [Parameter(ParameterSetName = 'v2')]
 90        [Parameter(ParameterSetName = 'v2_i1')]
 91        [Parameter(ParameterSetName = 'v2_i2')]
 92        [Parameter(ParameterSetName = 'v2_i3')]
 93        [Parameter(ParameterSetName = 'v3')]
 94        [Parameter(ParameterSetName = 'v3_i1')]
 95        [Parameter(ParameterSetName = 'v3_i2')]
 96        [Parameter(ParameterSetName = 'v3_i3')]
 97        [string]$Description,
 98
 99        [Parameter(Mandatory = $true, ParameterSetName = 'v1')]
 100        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i1')]
 101        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i2')]
 102        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i3')]
 103        [scriptblock]$ScriptBlock,
 104
 105        [Parameter(Mandatory = $true, ParameterSetName = 'v2')]
 106        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i1')]
 107        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i2')]
 108        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i3')]
 109        [string]$Code,
 110
 111        [Parameter(ParameterSetName = 'v2')]
 112        [Parameter(ParameterSetName = 'v2_i1')]
 113        [Parameter(ParameterSetName = 'v2_i2')]
 114        [Parameter(ParameterSetName = 'v2_i3')]
 115        [Kestrun.Scripting.ScriptLanguage]$CodeLanguage = [Kestrun.Scripting.ScriptLanguage]::CSharp,
 116
 117        [Parameter(Mandatory = $true, ParameterSetName = 'v3')]
 118        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i1')]
 119        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i2')]
 120        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i3')]
 121        [string]$CodeFilePath,
 122
 123        [Parameter(ParameterSetName = 'v1')]
 124        [Parameter(ParameterSetName = 'v1_i1')]
 125        [Parameter(ParameterSetName = 'v1_i2')]
 126        [Parameter(ParameterSetName = 'v1_i3')]
 127        [Parameter(ParameterSetName = 'v2')]
 128        [Parameter(ParameterSetName = 'v2_i1')]
 129        [Parameter(ParameterSetName = 'v2_i2')]
 130        [Parameter(ParameterSetName = 'v2_i3')]
 131        [Parameter(ParameterSetName = 'v3')]
 132        [Parameter(ParameterSetName = 'v3_i1')]
 133        [Parameter(ParameterSetName = 'v3_i2')]
 134        [Parameter(ParameterSetName = 'v3_i3')]
 135        [string]$HeaderName,
 136
 137        [Parameter(ParameterSetName = 'v1')]
 138        [Parameter(ParameterSetName = 'v1_i1')]
 139        [Parameter(ParameterSetName = 'v1_i2')]
 140        [Parameter(ParameterSetName = 'v1_i3')]
 141        [Parameter(ParameterSetName = 'v2')]
 142        [Parameter(ParameterSetName = 'v2_i1')]
 143        [Parameter(ParameterSetName = 'v2_i2')]
 144        [Parameter(ParameterSetName = 'v2_i3')]
 145        [Parameter(ParameterSetName = 'v3')]
 146        [Parameter(ParameterSetName = 'v3_i1')]
 147        [Parameter(ParameterSetName = 'v3_i2')]
 148        [Parameter(ParameterSetName = 'v3_i3')]
 149        [switch]$Base64Encoded,
 150
 151        [Parameter(ParameterSetName = 'v1')]
 152        [Parameter(ParameterSetName = 'v1_i1')]
 153        [Parameter(ParameterSetName = 'v1_i2')]
 154        [Parameter(ParameterSetName = 'v1_i3')]
 155        [Parameter(ParameterSetName = 'v2')]
 156        [Parameter(ParameterSetName = 'v2_i1')]
 157        [Parameter(ParameterSetName = 'v2_i2')]
 158        [Parameter(ParameterSetName = 'v2_i3')]
 159        [Parameter(ParameterSetName = 'v3')]
 160        [Parameter(ParameterSetName = 'v3_i1')]
 161        [Parameter(ParameterSetName = 'v3_i2')]
 162        [Parameter(ParameterSetName = 'v3_i3')]
 163        [switch]$SuppressWwwAuthenticate,
 164
 165        [Parameter(ParameterSetName = 'v1')]
 166        [Parameter(ParameterSetName = 'v1_i1')]
 167        [Parameter(ParameterSetName = 'v1_i2')]
 168        [Parameter(ParameterSetName = 'v1_i3')]
 169        [Parameter(ParameterSetName = 'v2')]
 170        [Parameter(ParameterSetName = 'v2_i1')]
 171        [Parameter(ParameterSetName = 'v2_i2')]
 172        [Parameter(ParameterSetName = 'v2_i3')]
 173        [Parameter(ParameterSetName = 'v3')]
 174        [Parameter(ParameterSetName = 'v3_i1')]
 175        [Parameter(ParameterSetName = 'v3_i2')]
 176        [Parameter(ParameterSetName = 'v3_i3')]
 177        [Regex]$SeparatorRegex,
 178
 179        [Parameter(ParameterSetName = 'v1')]
 180        [Parameter(ParameterSetName = 'v1_i1')]
 181        [Parameter(ParameterSetName = 'v1_i2')]
 182        [Parameter(ParameterSetName = 'v1_i3')]
 183        [Parameter(ParameterSetName = 'v2')]
 184        [Parameter(ParameterSetName = 'v2_i1')]
 185        [Parameter(ParameterSetName = 'v2_i2')]
 186        [Parameter(ParameterSetName = 'v2_i3')]
 187        [Parameter(ParameterSetName = 'v3')]
 188        [Parameter(ParameterSetName = 'v3_i1')]
 189        [Parameter(ParameterSetName = 'v3_i2')]
 190        [Parameter(ParameterSetName = 'v3_i3')]
 191        [string]$Realm,
 192
 193        [Parameter(ParameterSetName = 'v1')]
 194        [Parameter(ParameterSetName = 'v1_i1')]
 195        [Parameter(ParameterSetName = 'v1_i2')]
 196        [Parameter(ParameterSetName = 'v1_i3')]
 197        [Parameter(ParameterSetName = 'v2')]
 198        [Parameter(ParameterSetName = 'v2_i1')]
 199        [Parameter(ParameterSetName = 'v2_i2')]
 200        [Parameter(ParameterSetName = 'v2_i3')]
 201        [Parameter(ParameterSetName = 'v3')]
 202        [Parameter(ParameterSetName = 'v3_i1')]
 203        [Parameter(ParameterSetName = 'v3_i2')]
 204        [Parameter(ParameterSetName = 'v3_i3')]
 205        [switch]$AllowInsecureHttp,
 206
 207        [Parameter(ParameterSetName = 'v1')]
 208        [Parameter(ParameterSetName = 'v1_i1')]
 209        [Parameter(ParameterSetName = 'v1_i2')]
 210        [Parameter(ParameterSetName = 'v1_i3')]
 211        [Parameter(ParameterSetName = 'v2')]
 212        [Parameter(ParameterSetName = 'v2_i1')]
 213        [Parameter(ParameterSetName = 'v2_i2')]
 214        [Parameter(ParameterSetName = 'v2_i3')]
 215        [Parameter(ParameterSetName = 'v3')]
 216        [Parameter(ParameterSetName = 'v3_i1')]
 217        [Parameter(ParameterSetName = 'v3_i2')]
 218        [Parameter(ParameterSetName = 'v3_i3')]
 219        [Serilog.ILogger]$Logger,
 220
 221        [Parameter(ParameterSetName = 'v1_i1')]
 222        [Parameter(ParameterSetName = 'v1_i2')]
 223        [Parameter(ParameterSetName = 'v1_i3')]
 224        [Parameter(ParameterSetName = 'v2_i1')]
 225        [Parameter(ParameterSetName = 'v2_i2')]
 226        [Parameter(ParameterSetName = 'v2_i3')]
 227        [Parameter(ParameterSetName = 'v3_i1')]
 228        [Parameter(ParameterSetName = 'v3_i2')]
 229        [Parameter(ParameterSetName = 'v3_i3')]
 230        [Kestrun.Claims.ClaimPolicyConfig]$ClaimPolicyConfig,
 231
 232        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i1')]
 233        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i1')]
 234        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i1')]
 235        [scriptblock]$IssueClaimsScriptBlock,
 236
 237        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i2')]
 238        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i2')]
 239        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i2')]
 240        [string]$IssueClaimsCode,
 241
 242        [Parameter(ParameterSetName = 'v3_i2')]
 243        [Parameter(ParameterSetName = 'v2_i2')]
 244        [Parameter(ParameterSetName = 'v1_i2')]
 245        [Kestrun.Scripting.ScriptLanguage]$IssueClaimsCodeLanguage = [Kestrun.Scripting.ScriptLanguage]::CSharp,
 246
 247        [Parameter(Mandatory = $true, ParameterSetName = 'v3_i3')]
 248        [Parameter(Mandatory = $true, ParameterSetName = 'v2_i3')]
 249        [Parameter(Mandatory = $true, ParameterSetName = 'v1_i3')]
 250        [string]$IssueClaimsCodeFilePath,
 251
 252        [Parameter()]
 253        [switch]$PassThru
 254    )
 255    process {
 0256        if ($PSCmdlet.ParameterSetName -ne 'Options') {
 0257            $Options = [Kestrun.Authentication.BasicAuthenticationOptions]::new()
 0258            $Options.ValidateCodeSettings = [Kestrun.Authentication.AuthenticationCodeSettings]::new()
 0259            if ($null -ne $ScriptBlock) {
 0260                $Options.ValidateCodeSettings.Code = $ScriptBlock.ToString()
 0261                $Options.ValidateCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::PowerShell
 0262            } elseif (-not [string]::IsNullOrWhiteSpace($Code)) {
 0263                $Options.ValidateCodeSettings.Code = $Code
 0264                $Options.ValidateCodeSettings.Language = $CodeLanguage
 0265            } elseif (-not [string]::IsNullOrWhiteSpace($CodeFilePath)) {
 0266                if (-not (Test-Path -Path $CodeFilePath)) {
 0267                    throw "The specified code file path does not exist: $CodeFilePath"
 268                }
 0269                $extension = Split-Path -Path $CodeFilePath -Extension
 0270                switch ($extension) {
 271                    '.ps1' {
 0272                        $Options.ValidateCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::PowerShell
 273                    }
 274                    '.cs' {
 0275                        $Options.ValidateCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::CSharp
 276                    }
 277                    '.vb' {
 0278                        $Options.ValidateCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::VisualBasic
 279                    }
 280                    default {
 0281                        throw "Unsupported '$extension' code file extension."
 282                    }
 283                }
 0284                $Options.ValidateCodeSettings.Code = Get-Content -Path $CodeFilePath -Raw
 285            }
 286
 0287            if (-not [string]::IsNullOrWhiteSpace($HeaderName)) {
 0288                $Options.HeaderName = $HeaderName
 289            }
 0290            if ($Base64Encoded.IsPresent) {
 0291                $Options.Base64Encoded = $Base64Encoded.IsPresent
 292            }
 0293            if ($SuppressWwwAuthenticate.IsPresent) {
 0294                $Options.SuppressWwwAuthenticate = $SuppressWwwAuthenticate.IsPresent
 295            }
 0296            if ($null -ne $SeparatorRegex) {
 0297                $Options.SeparatorRegex = $SeparatorRegex
 298            }
 0299            if (-not [string]::IsNullOrWhiteSpace($Realm)) {
 0300                $Options.Realm = $Realm
 301            }
 302
 0303            if (-not ([string]::IsNullOrWhiteSpace($Description))) {
 0304                $Options.Description = $Description
 305            }
 306
 0307            $Options.AllowInsecureHttp = $AllowInsecureHttp.IsPresent
 308
 0309            if ($null -ne $ClaimPolicyConfig) {
 0310                $Options.ClaimPolicyConfig = $ClaimPolicyConfig
 311            }
 0312            if ($null -ne $Logger) {
 0313                $Options.Logger = $Logger
 314            }
 315
 0316            if ($PSCmdlet.ParameterSetName.contains('_')) {
 317
 0318                $Options.IssueClaimsCodeSettings = [Kestrun.Authentication.AuthenticationCodeSettings]::new()
 0319                if ($null -ne $IssueClaimsScriptBlock) {
 0320                    $Options.IssueClaimsCodeSettings.Code = $IssueClaimsScriptBlock.ToString()
 0321                    $Options.IssueClaimsCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::PowerShell
 0322                } elseif (-not [string]::IsNullOrWhiteSpace($IssueClaimsCode)) {
 0323                    $Options.IssueClaimsCodeSettings.Code = $IssueClaimsCode
 0324                    $Options.IssueClaimsCodeSettings.Language = $IssueClaimsCodeLanguage
 0325                } elseif (-not [string]::IsNullOrWhiteSpace($IssueClaimsCodeFilePath)) {
 0326                    if (-not (Test-Path -Path $IssueClaimsCodeFilePath)) {
 0327                        throw "The specified code file path does not exist: $IssueClaimsCodeFilePath"
 328                    }
 0329                    $extension = Split-Path -Path $IssueClaimsCodeFilePath -Extension
 0330                    switch ($extension) {
 331                        '.ps1' {
 0332                            $Options.IssueClaimsCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::PowerShell
 333                        }
 334                        '.cs' {
 0335                            $Options.IssueClaimsCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::CSharp
 336                        }
 337                        '.vb' {
 0338                            $Options.IssueClaimsCodeSettings.Language = [Kestrun.Scripting.ScriptLanguage]::VisualBasic
 339                        }
 340                        default {
 0341                            throw "Unsupported '$extension' code file extension."
 342                        }
 343                    }
 0344                    $Options.IssueClaimsCodeSettings.Code = Get-Content -Path $CodeFilePath -Raw
 345                }
 346            }
 347            # Set OpenApi documentation IDs
 0348            $Options.DocumentationId = $DocId
 349        }
 350        # Ensure the server instance is resolved
 0351        $Server = Resolve-KestrunServer -Server $Server
 352
 0353        [Kestrun.Hosting.KestrunHostAuthnExtensions]::AddBasicAuthentication(
 354            $Server,
 355            $AuthenticationScheme,
 356            $DisplayName,
 357            $Options
 0358        ) | Out-Null
 359
 0360        if ($PassThru.IsPresent) {
 361            # if the PassThru switch is specified, return the modified server instance
 0362            return $Server
 363        }
 364    }
 365}

Methods/Properties

Add-KrBasicAuthentication()