-
Notifications
You must be signed in to change notification settings - Fork 0
/
NgrokPS.psm1
65 lines (57 loc) · 2.43 KB
/
NgrokPS.psm1
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
function Connect-Ngrok {
param (
[Parameter(Mandatory = $true)]
[uint16]
$TargetPort,
[Parameter(Mandatory = $false)]
[string]
$HostProfile = $null,
[Parameter(Mandatory = $false)]
[string]
$NgrokRegion = "eu",
[Parameter(Mandatory = $false)]
[switch]
$ForceProfileOverwrite = $false,
[Parameter(Mandatory = $false)]
[ValidateSet("http", "https")]
[string]
$HttpProtocol = "https"
)
$oldErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = "Stop"
try {
try {
Import-Module CredentialManager
}
catch {
Write-Warning "CredentialManager module not found. Please install it from the PSGallery"
throw "CredentialManager Module not installed."
}
if ([string]::IsNullOrWhiteSpace($HostProfile)) {
if ([string]::IsNullOrWhiteSpace($env:NGROKPS_DEFAULT_PROFILE)) {
throw "No Profile provided and no value configured in NGROKPS_DEFAULT_PROFILE environment variable."
}
$HostProfile = $env:NGROKPS_DEFAULT_PROFILE;
}
$credentialTarget = "ngrokps:$($HostProfile.ToLower())"
$authCredentials = Get-StoredCredential -Target $credentialTarget
if ($null -eq $authCredentials -or $ForceProfileOverwrite) {
Write-Warning "No Profile $HostProfile found. Creating..."
if($PSVersionTable.PSVersion -gt [version]::new("6.0.0")){
throw "Profile creation only supported with PowerShell 5.X due to CredentialManager not supporting PowerShell >6.0.0 for creating stored credentials. Please create teh Stored credentials manually or re run this command with PowerShell 5.X"
}
$authCredentials = Get-Credential -Message "Please set the hostname and password for the Ngrok Profile $HostProfile"
New-StoredCredential -Target $credentialTarget -Credentials $authCredentials -Persist Enterprise
}
$hostName = $authCredentials.UserName
$ngrokToken = $authCredentials.GetNetworkCredential().Password
ngrok.exe config add-authtoken $ngrokToken
ngrok.exe http --region=$NgrokRegion --hostname=$hostName "$($HttpProtocol)://localhost:$($TargetPort)"
}
catch {
throw;
}
finally {
$ErrorActionPreference = $oldErrorActionPreference
}
}