Merge pull request #7 from benclaussen/connect_http

Add logic and functions to connect via HTTP instead of HTTPS
This commit is contained in:
Ben Claussen 2021-03-31 10:09:22 -04:00 committed by GitHub
commit 214d5615e7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 105 additions and 36 deletions

View file

@ -49,21 +49,12 @@ function BuildNewURI {
[OutputType([System.UriBuilder])] [OutputType([System.UriBuilder])]
param param
( (
[Parameter(Mandatory = $false)]
[string]$Hostname,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string[]]$Segments, [string[]]$Segments,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[hashtable]$Parameters, [hashtable]$Parameters,
[Parameter(Mandatory = $false)]
[boolean]$HTTPS = $true,
[ValidateRange(1, 65535)]
[uint16]$Port = 443,
[switch]$SkipConnectedCheck [switch]$SkipConnectedCheck
) )
@ -74,28 +65,8 @@ function BuildNewURI {
$null = CheckNetboxIsConnected $null = CheckNetboxIsConnected
} }
if (-not $Hostname) {
$Hostname = Get-NetboxHostname
}
if ($HTTPS) {
Write-Verbose " Setting scheme to HTTPS"
$Scheme = 'https'
} else {
Write-Warning " Connecting via non-secure HTTP is not-recommended"
Write-Verbose " Setting scheme to HTTP"
$Scheme = 'http'
if (-not $PSBoundParameters.ContainsKey('Port')) {
# Set the port to 80 if the user did not supply it
Write-Verbose " Setting port to 80 as default because it was not supplied by the user"
$Port = 80
}
}
# Begin a URI builder with HTTP/HTTPS and the provided hostname # Begin a URI builder with HTTP/HTTPS and the provided hostname
$uriBuilder = [System.UriBuilder]::new($Scheme, $Hostname, $Port) $uriBuilder = [System.UriBuilder]::new($script:NetboxConfig.HostScheme, $script:NetboxConfig.Hostname, $script:NetboxConfig.HostPort)
# Generate the path by trimming excess slashes and whitespace from the $segments[] and joining together # Generate the path by trimming excess slashes and whitespace from the $segments[] and joining together
$uriBuilder.Path = "api/{0}/" -f ($Segments.ForEach({ $uriBuilder.Path = "api/{0}/" -f ($Segments.ForEach({

View file

@ -12,6 +12,15 @@
.PARAMETER Credential .PARAMETER Credential
A description of the Credential parameter. A description of the Credential parameter.
.PARAMETER Scheme
A description of the Scheme parameter.
.PARAMETER Port
A description of the Port parameter.
.PARAMETER URI
A description of the URI parameter.
.EXAMPLE .EXAMPLE
PS C:\> Connect-NetboxAPI -Hostname "netbox.domain.com" PS C:\> Connect-NetboxAPI -Hostname "netbox.domain.com"
@ -21,14 +30,26 @@
Additional information about the function. Additional information about the function.
#> #>
[CmdletBinding()] [CmdletBinding(DefaultParameterSetName = 'Manual')]
param param
( (
[Parameter(Mandatory = $true)] [Parameter(ParameterSetName = 'Manual',
Mandatory = $true)]
[string]$Hostname, [string]$Hostname,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[pscredential]$Credential [pscredential]$Credential,
[Parameter(ParameterSetName = 'Manual')]
[ValidateSet('https', 'http', IgnoreCase = $true)]
[string]$Scheme = 'https',
[Parameter(ParameterSetName = 'Manual')]
[uint16]$Port = 443,
[Parameter(ParameterSetName = 'URI',
Mandatory = $true)]
[string]$URI
) )
if (-not $Credential) { if (-not $Credential) {
@ -42,9 +63,25 @@
} }
} }
$null = Set-NetboxHostName -Hostname $Hostname
$null = Set-NetboxCredential -Credential $Credential $null = Set-NetboxCredential -Credential $Credential
switch ($PSCmdlet.ParameterSetName) {
'Manual' {
$uriBuilder = [System.UriBuilder]::new($Scheme, $Hostname, $Port)
}
'URI' {
$uriBuilder = [System.UriBuilder]::new($URI)
if ([string]::IsNullOrWhiteSpace($uriBuilder.Host)) {
throw "URI appears to be invalid. Must be in format [host.name], [scheme://host.name], or [scheme://host.name:port]"
}
}
}
$null = Set-NetboxHostName -Hostname $uriBuilder.Host
$null = Set-NetboxHostScheme -Scheme $uriBuilder.Scheme
$null = Set-NetboxHostPort -Port $uriBuilder.Port
try { try {
Write-Verbose "Verifying API connectivity..." Write-Verbose "Verifying API connectivity..."
$null = VerifyAPIConnectivity $null = VerifyAPIConnectivity

View file

@ -0,0 +1,11 @@
function Get-NetboxHostPort {
[CmdletBinding()]
param ()
Write-Verbose "Getting Netbox host port"
if ($null -eq $script:NetboxConfig.HostPort) {
throw "Netbox host port is not set! You may set it with Set-NetboxHostPort -Port 'https'"
}
$script:NetboxConfig.HostPort
}

View file

@ -0,0 +1,11 @@
function Get-NetboxHostScheme {
[CmdletBinding()]
param ()
Write-Verbose "Getting Netbox host scheme"
if ($null -eq $script:NetboxConfig.Hostscheme) {
throw "Netbox host sceme is not set! You may set it with Set-NetboxHostScheme -Scheme 'https'"
}
$script:NetboxConfig.HostScheme
}

View file

@ -0,0 +1,15 @@
function Set-NetboxHostPort {
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([string])]
param
(
[Parameter(Mandatory = $true)]
[uint16]$Port
)
if ($PSCmdlet.ShouldProcess('Netbox Port', 'Set')) {
$script:NetboxConfig.HostPort = $Port
$script:NetboxConfig.HostPort
}
}

View file

@ -0,0 +1,20 @@
function Set-NetboxHostScheme {
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([string])]
param
(
[Parameter(Mandatory = $false)]
[ValidateSet('https', 'http', IgnoreCase = $true)]
[string]$Scheme = 'https'
)
if ($PSCmdlet.ShouldProcess('Netbox Host Scheme', 'Set')) {
if ($Scheme -eq 'http') {
Write-Warning "Connecting via non-secure HTTP is not-recommended"
}
$script:NetboxConfig.HostScheme = $Scheme
$script:NetboxConfig.HostScheme
}
}

View file

@ -3,7 +3,7 @@
# #
# Generated by: Ben Claussen # Generated by: Ben Claussen
# #
# Generated on: 2021-03-30 # Generated on: 2021-03-31
# #
@{ @{
@ -12,7 +12,7 @@
RootModule = 'NetboxPS.psm1' RootModule = 'NetboxPS.psm1'
# Version number of this module. # Version number of this module.
ModuleVersion = '1.3.2' ModuleVersion = '1.3.3'
# Supported PSEditions # Supported PSEditions
# CompatiblePSEditions = @() # CompatiblePSEditions = @()

View file

@ -104,6 +104,10 @@
<File Build="0" Shared="True" ReferenceFunction="Invoke-Get-NetboxCircuitType_ps1" ExportFunctions="True">Functions\Circuits\Types\Get-NetboxCircuitType.ps1</File> <File Build="0" Shared="True" ReferenceFunction="Invoke-Get-NetboxCircuitType_ps1" ExportFunctions="True">Functions\Circuits\Types\Get-NetboxCircuitType.ps1</File>
<File Build="0" Shared="True" ReferenceFunction="Invoke-Get-ModelDefinition_ps1" ExportFunctions="True">Functions\Helpers\Get-ModelDefinition.ps1</File> <File Build="0" Shared="True" ReferenceFunction="Invoke-Get-ModelDefinition_ps1" ExportFunctions="True">Functions\Helpers\Get-ModelDefinition.ps1</File>
<File Build="0" Shared="True" ReferenceFunction="Invoke-Set-NetboxIPAMPrefix_ps1" ExportFunctions="True">Functions\IPAM\Prefix\Set-NetboxIPAMPrefix.ps1</File> <File Build="0" Shared="True" ReferenceFunction="Invoke-Set-NetboxIPAMPrefix_ps1" ExportFunctions="True">Functions\IPAM\Prefix\Set-NetboxIPAMPrefix.ps1</File>
<File Build="0" Shared="True" ReferenceFunction="Invoke-Set-NetboxHostScheme_ps1" ExportFunctions="True">Functions\Setup\Set-NetboxHostScheme.ps1</File>
<File Build="0" Shared="True" ReferenceFunction="Invoke-Get-NetboxHostScheme_ps1" ExportFunctions="True">Functions\Setup\Get-NetboxHostScheme.ps1</File>
<File Build="0" Shared="True" ReferenceFunction="Invoke-Set-NetboxHostPort_ps1" ExportFunctions="True">Functions\Setup\Set-NetboxHostPort.ps1</File>
<File Build="0" Shared="True" ReferenceFunction="Invoke-Get-NetboxHostPort_ps1" ExportFunctions="True">Functions\Setup\Get-NetboxHostPort.ps1</File>
</Files> </Files>
<StartupScript>R:\Netbox\NetboxPS\Test-Module.ps1</StartupScript> <StartupScript>R:\Netbox\NetboxPS\Test-Module.ps1</StartupScript>
</Project> </Project>