authorizer.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package azure
  2. import (
  3. "fmt"
  4. "github.com/Azure/azure-sdk-for-go/sdk/azcore"
  5. "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
  6. "github.com/opencost/opencost/core/pkg/util/json"
  7. "github.com/opencost/opencost/pkg/cloud"
  8. )
  9. const DefaultCredentialAuthorizerType = "AzureDefaultCredential"
  10. // Authorizer configs provide credentials from azidentity to connect to Azure services.
  11. type Authorizer interface {
  12. cloud.Authorizer
  13. GetCredential() (azcore.TokenCredential, error)
  14. }
  15. // SelectAuthorizerByType is an implementation of AuthorizerSelectorFn and acts as a register for Authorizer types
  16. func SelectAuthorizerByType(typeStr string) (Authorizer, error) {
  17. switch typeStr {
  18. case DefaultCredentialAuthorizerType:
  19. return &DefaultAzureCredentialHolder{}, nil
  20. default:
  21. return nil, fmt.Errorf("azure: provider authorizer type '%s' is not valid", typeStr)
  22. }
  23. }
  24. type DefaultAzureCredentialHolder struct{}
  25. func (dac *DefaultAzureCredentialHolder) MarshalJSON() ([]byte, error) {
  26. fmap := make(map[string]any, 1)
  27. fmap[cloud.AuthorizerTypeProperty] = DefaultCredentialAuthorizerType
  28. return json.Marshal(fmap)
  29. }
  30. func (dac *DefaultAzureCredentialHolder) Validate() error {
  31. return nil
  32. }
  33. func (dac *DefaultAzureCredentialHolder) Equals(config cloud.Config) bool {
  34. if config == nil {
  35. return false
  36. }
  37. _, ok := config.(*DefaultAzureCredentialHolder)
  38. if !ok {
  39. return false
  40. }
  41. return true
  42. }
  43. func (dac *DefaultAzureCredentialHolder) Sanitize() cloud.Config {
  44. return &DefaultAzureCredentialHolder{}
  45. }
  46. func (dac *DefaultAzureCredentialHolder) GetCredential() (azcore.TokenCredential, error) {
  47. return azidentity.NewDefaultAzureCredential(nil)
  48. }