--- /dev/null
+// Copyright (C) The Azure-Samples Authors. All rights reserved.
+//
+// SPDX-License-Identifier: MIT
+
+// Largely borrowed from
+// https://github.com/Azure-Samples/azure-sdk-for-go-samples/tree/master/internal/config
+
+package config
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/Azure/go-autorest/autorest/azure"
+)
+
+var (
+ clientID string
+ clientSecret string
+ tenantID string
+ subscriptionID string
+ cloudName string = "AzurePublicCloud"
+ useDeviceFlow bool
+ environment *azure.Environment
+)
+
+// ClientID is the OAuth client ID.
+func ClientID() string {
+ return clientID
+}
+
+// ClientSecret is the OAuth client secret.
+func ClientSecret() string {
+ return clientSecret
+}
+
+// TenantID is the AAD tenant to which this client belongs.
+func TenantID() string {
+ return tenantID
+}
+
+// SubscriptionID is a target subscription for Azure resources.
+func SubscriptionID() string {
+ return subscriptionID
+}
+
+// UseDeviceFlow specifies if interactive auth should be used. Interactive
+// auth uses the OAuth Device Flow grant type.
+func UseDeviceFlow() bool {
+ return useDeviceFlow
+}
+
+// Environment returns an `azure.Environment{...}` for the current cloud.
+func Environment() *azure.Environment {
+ if environment != nil {
+ return environment
+ }
+ env, err := azure.EnvironmentFromName(cloudName)
+ if err != nil {
+ // TODO: move to initialization of var
+ panic(fmt.Sprintf(
+ "invalid cloud name '%s' specified, cannot continue\n", cloudName))
+ }
+ environment = &env
+ return environment
+}
+
+// ParseEnvironment loads the Azure environment variables for authentication
+func ParseEnvironment() error {
+ // these must be provided by environment
+ // clientID
+ clientID = os.Getenv("AZURE_CLIENT_ID")
+
+ // clientSecret
+ clientSecret = os.Getenv("AZURE_CLIENT_SECRET")
+
+ // tenantID (AAD)
+ tenantID = os.Getenv("AZURE_TENANT_ID")
+
+ // subscriptionID (ARM)
+ subscriptionID = os.Getenv("AZURE_SUBSCRIPTION_ID")
+
+ return nil
+}