github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/functions/scope.go (about)

     1  package functions
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/google/uuid"
     7  )
     8  
     9  var (
    10  	tenantID           = uuid.NewString()
    11  	groupID            = uuid.NewString()
    12  	updaterID          = uuid.NewString()
    13  	subscriptionID     = uuid.NewString()
    14  	managingResourceID = uuid.NewString()
    15  )
    16  
    17  func ManagementGroup(_ ...interface{}) interface{} {
    18  
    19  	return fmt.Sprintf(`{
    20      "id": "/providers/Microsoft.Management/managementGroups/mgPlaceholder",
    21      "name": "mgPlaceholder",
    22      "properties": {
    23        "details": {
    24          "parent": {
    25            "displayName": "Tenant Root Group",
    26            "id": "/providers/Microsoft.Management/managementGroups/%[1]s",
    27            "name": "%[1]s"
    28          },
    29          "updatedBy": "%[2]s",
    30          "updatedTime": "2020-07-23T21:05:52.661306Z",
    31          "version": "1"
    32        },
    33        "displayName": "Management PlaceHolder Group",
    34        "tenantId": "%[3]s"
    35      },
    36      "type": "/providers/Microsoft.Management/managementGroups"
    37    }
    38  `, groupID, updaterID, tenantID)
    39  }
    40  
    41  func ManagementGroupResourceID(args ...interface{}) interface{} {
    42  	if len(args) < 2 {
    43  		return ""
    44  	}
    45  
    46  	switch len(args) {
    47  	case 3:
    48  		return fmt.Sprintf("/providers/Microsoft.Management/managementGroups/%s/providers/%s/%s/%s", groupID, args[0], args[1], args[2])
    49  	case 4:
    50  		return fmt.Sprintf("/providers/Microsoft.Management/managementGroups/%s/providers/%s/%s/%s", args[0], args[1], args[2], args[3])
    51  	default:
    52  		return fmt.Sprintf("/providers/Microsoft.Management/managementGroups/%s/providers/%s/%s", groupID, args[0], args[1])
    53  	}
    54  
    55  }
    56  
    57  func Subscription(_ ...interface{}) interface{} {
    58  	return fmt.Sprintf(`{
    59    "id": "/subscriptions/%[1]s",
    60    "subscriptionId": "%[1]s",
    61    "tenantId": "%[2]s",
    62    "displayName": "Placeholder Subscription"
    63  }`, subscriptionID, tenantID)
    64  }
    65  
    66  func SubscriptionResourceID(args ...interface{}) interface{} {
    67  	if len(args) < 2 {
    68  		return nil
    69  	}
    70  
    71  	switch len(args) {
    72  
    73  	case 3:
    74  		return fmt.Sprintf("/subscriptions/%s/providers/%s/%s/%s", subscriptionID, args[0], args[1], args[2])
    75  	case 4:
    76  		// subscription ID has been provided so use that
    77  		return fmt.Sprintf("/subscriptions/%s/providers/%s/%s/%s", args[0], args[1], args[2], args[3])
    78  	default:
    79  
    80  		return fmt.Sprintf("/subscriptions/%s/providers/%s/%s", subscriptionID, args[0], args[1])
    81  	}
    82  }
    83  
    84  func Tenant(_ ...interface{}) interface{} {
    85  	return fmt.Sprintf(`{
    86      "countryCode": "US",
    87      "displayName": "Placeholder Tenant Name",
    88      "id": "/tenants/%[1]s",
    89      "tenantId": "%[1]s"
    90    }`, tenantID)
    91  }
    92  
    93  func TenantResourceID(args ...interface{}) interface{} {
    94  	if len(args) < 2 {
    95  		return nil
    96  	}
    97  
    98  	switch len(args) {
    99  	case 3:
   100  		return fmt.Sprintf("/providers/%s/%s/%s", args[0], args[1], args[2])
   101  
   102  	default:
   103  		return fmt.Sprintf("/providers/%s/%s", args[0], args[1])
   104  	}
   105  
   106  }