AzureSettings.psm1

Import-Module MSAL.PS

function Get-OutlookEndpoint (
  [Microsoft.Identity.Client.AzureCloudInstance]$AzureCloudInstance = [Microsoft.Identity.Client.AzureCloudInstance]::AzurePublic
) {
  switch ($AzureCloudInstance) {
    "AzureChina" {
      return "partner.outlook.cn"
    }
    "AzureUsGovernment" {
      return "outlook.office365.us"
    }
    "AzurePublic" {
      return "outlook.office365.com"
    }
  }
}

Add-Type -TypeDefinition @"
  public enum AccessType
  {
    AsUser,
    AsApp
  }
  public enum AppName
  {
    IMAP,
    POP
  }
"@


function  Get-Port ([AppName]$AppName) {
  switch ($AppName) {
    "IMAP" { return 993 }
    "POP" { return 995 }
  }  
}

function Get-Scope (
  [AppName]$AppName,
  [AccessType]$AccessType,
  [Microsoft.Identity.Client.AzureCloudInstance]$AzureCloudInstance = [Microsoft.Identity.Client.AzureCloudInstance]::AzurePublic
) {
  $endpoint = Get-OutlookEndpoint -AzureCloudInstance $AzureCloudInstance
  switch ($AccessType) {
    "AsApp" { return "https://$endpoint/.default" }
    "AsUser" {
      switch ($AppName) {
        "IMAP" { return "https://$endpoint/IMAP.AccessAsUser.All" }
        "POP" { return "https://$endpoint/POP.AccessAsUser.All" }
      }
    }
  }
}