RiverMeadow.Login/RiverMeadow.Login.psm1
Import-Module -Name $PSScriptRoot\..\Common\Error\Error function Invoke-RMLogin { param ( [string] $EmailAddress = (Read-Host "Enter email address"), [string] $Password, [string] $MFAVerifcationCode, [string] $RMHost ) if (-not $PSBoundParameters.ContainsKey('Password')) { $SecurePassword = Read-Host "Enter password" -AsSecureString $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword) $Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) } $Uri = "https://migrate.rivermeadow.com/api/v3" if ($PSBoundParameters.ContainsKey('RMHost')) { $Uri = "http://" + $RMHost + "/api/v3" } $Body = @{ email = $EmailAddress password = $Password } if ($MFAVerifcationCode) { $Body['mfa_token'] = $MFAVerifcationCode } $JsonBody = $Body | ConvertTo-Json $Headers = @{ Accept = "application/rm+json" } $Params = @{ Method = "Post" Uri = $Uri + "/login" Body = $JsonBody ContentType = "application/json" Headers = $Headers } if (Get-Variable -Name "RMContext-UserLogin" -ErrorAction SilentlyContinue) { # Delete the previous Login result before attempting a new one Remove-RMVariable } $UserLogin = $null try { $UserLogin = Invoke-RestMethod -SkipCertificateCheck @Params } catch [System.Exception] { $ErrorString = $PSItem.ToString() if ($ErrorString.Contains("error_code")) { $ErrorString = $ErrorString | ConvertFrom-Json if ($ErrorString.error_code -eq "mfa_token_required") { $VerificationCode = Read-Host "We sent you the Verification Code. Please enter it here" if ($RMHost) { Invoke-RMLogin -EmailAddress $EmailAddress -Password $Password -MFAVerifcationCode $VerificationCode -RMHost $RMHost } else { Invoke-RMLogin -EmailAddress $EmailAddress -Password $Password -MFAVerifcationCode $VerificationCode } } else { Show-RMError -ErrorObj $PSItem } } else { Show-RMError -ErrorObj $PSItem } return } Set-Variable -Name "RMContext-UserLogin" -Value $UserLogin -Scope Global Set-Variable -Name "RMContext-ReactorURI" -Value $Uri -Scope Global Get-RMUser -UserId $UserLogin.user_id -Uri $Uri $CurrentOrg = (Get-Variable -Name "RMContext-CurrentOrganizationName").Value $CurrentProjectName = (Get-Variable -Name "RMContext-CurrentProjectName").Value Write-Output "Current Organization Name: $CurrentOrg" Write-Output "Current Project Name: $CurrentProjectName" } function Get-RMUser { param( [Parameter(Mandatory)] [string]$UserId, [Parameter(Mandatory)] [string]$Uri ) $LoginResult = Get-Variable -Name "RMContext-UserLogin" $Headers = @{ "Accept" = "application/rm+json" "X-Auth-Token" = $LoginResult.Value.token } $Params = @{ Method = "Get" Uri = $Uri + "/users/" + $UserId Headers = $Headers } try { $UserInfo = Invoke-RestMethod -SkipCertificateCheck @Params } catch [System.Net.WebException] { Show-RMError -ErrorObj $PSItem throw $PSItem } Set-Variable -Name "RMContext-UserOrganizations" -Value $UserInfo.organizations -Scope Global $CurrentOrgName = Get-RMParentOrganizationNameById -OrganizationId $UserInfo.organization $CurrentProjectName = Get-RMOrganizationNameById -OrganizationId $UserInfo.organization Set-Variable -Name "RMContext-CurrentOrganizationName" -Value $CurrentOrgName -Scope Global Set-Variable -Name "RMContext-CurrentProjectName" -Value $CurrentProjectName -Scope Global Set-Variable -Name "RMContext-CurrentProjectId" -Value $UserInfo.organization -Scope Global } function Get-RMOrganizationNameById { param( [string] $OrganizationId ) $UserOrgs = Get-Variable -Name "RMContext-UserOrganizations" foreach($Org in $UserOrgs.Value) { if ($Org.id -eq $OrganizationId) { return $Org.name } } throw "No organization or project exists by the given $OrganizationId" } function Get-RMParentOrganizationIdById { param( [string] $OrganizationId ) $UserOrgs = Get-Variable -Name "RMContext-UserOrganizations" foreach($Org in $UserOrgs.Value) { if ($Org.id -eq $OrganizationId) { return $Org.parent_organization_id } } throw "No organization or project exists by the given $OrganizationId" } function Get-RMParentOrganizationNameById { param( [string] $OrganizationId ) $ParentOrgId = Get-RMParentOrganizationIdById -OrganizationId $OrganizationId $UserOrgs = Get-Variable -Name "RMContext-UserOrganizations" foreach($Org in $UserOrgs.Value) { if ($Org.id -eq $ParentOrgId) { return $Org.name } } throw "No organization or project exists by the given $OrganizationId" } function Remove-RMVariable { param() Remove-Variable -Name "RMContext-UserLogin" -Scope Global -ErrorAction SilentlyContinue Remove-Variable -Name "RMContext-UserOrganizations" -Scope Global -ErrorAction SilentlyContinue Remove-Variable -Name "RMContext-CurrentOrganizationName" -Scope Global -ErrorAction SilentlyContinue Remove-Variable -Name "RMContext-CurrentProjectName" -Scope Global -ErrorAction SilentlyContinue Remove-Variable -Name "RMContext-CurrentProjectId" -Scope Global -ErrorAction SilentlyContinue } Export-ModuleMember -Function Invoke-RMLogin -Alias irmlogin |