Private/Add-BitbucketSession.ps1

Function Add-BitbucketSession {
    param([Parameter(Mandatory=$false)] [String] $Username,
          [Parameter(Mandatory=$false)] [String] $Password,
          [Parameter(Mandatory=$false)] [String] $Token,
          [Parameter(Mandatory=$true)]  [String] $Server,
          [Parameter(Mandatory=$true)]  [String] $Version,
          [Parameter(Mandatory=$false)] [Switch] $UseOAuth)

    $Server = $Server.Trim("/")
    
    if(!$global:BITBUCKETCLI_SESSIONS){
        $global:BITBUCKETCLI_SESSIONS = @{}
    }

    @($global:BITBUCKETCLI_SESSIONS.Keys) | ForEach-Object { 
        try {  $global:BITBUCKETCLI_SESSIONS[$_].IsSelected = $false } catch { }} 

    if(!$Token -and !$UseOAuth){
        $ACCESS_TOKEN = (Get-BitbucketBasicToken  -Username $Username -Password  $Password)
        $AUTH_SCHEMA = "Basic"
    }else{
        $ACCESS_TOKEN = (Get-BitbucketOAuthToken -Token $Token -Username $Username -Password $Password)
        $AUTH_SCHEMA = "Bearer"
    }

    $global:BITBUCKETCLI_SESSIONS[$Server] = ([PSCustomObject] @{
        Id              = @($global:BITBUCKETCLI_SESSIONS.Keys).Count+1
        IsSelected      = $true
        Server          = $Server
        Version         = $Version
        Username        = $Username
        AccessToken     = $ACCESS_TOKEN
        Authorization   = "$AUTH_SCHEMA $ACCESS_TOKEN"
    })

    return $global:BITBUCKETCLI_SESSIONS[$Server]
}