File: Provisioning\MicrosoftGraphApiConstructs.cs
Web Access
Project: src\src\Aspire.Hosting.Azure.EntraId\Aspire.Hosting.Azure.EntraId.csproj (Aspire.Hosting.Azure.EntraId)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Azure.Provisioning;
using Azure.Provisioning.Primitives;
 
namespace Aspire.Hosting.Azure.EntraId.Provisioning;
 
/// <summary>
/// Models an entry of an application's <c>api.oauth2PermissionScopes</c>, a delegated permission that the API exposes.
/// </summary>
internal sealed class MicrosoftGraphPermissionScope : ProvisionableConstruct
{
    public BicepValue<string> Id
    {
        get { Initialize(); return _id!; }
        set { Initialize(); _id!.Assign(value); }
    }
    private BicepValue<string>? _id;
 
    public BicepValue<string> Value
    {
        get { Initialize(); return _value!; }
        set { Initialize(); _value!.Assign(value); }
    }
    private BicepValue<string>? _value;
 
    public BicepValue<string> Type
    {
        get { Initialize(); return _type!; }
        set { Initialize(); _type!.Assign(value); }
    }
    private BicepValue<string>? _type;
 
    public BicepValue<bool> IsEnabled
    {
        get { Initialize(); return _isEnabled!; }
        set { Initialize(); _isEnabled!.Assign(value); }
    }
    private BicepValue<bool>? _isEnabled;
 
    public BicepValue<string> AdminConsentDisplayName
    {
        get { Initialize(); return _adminConsentDisplayName!; }
        set { Initialize(); _adminConsentDisplayName!.Assign(value); }
    }
    private BicepValue<string>? _adminConsentDisplayName;
 
    public BicepValue<string> AdminConsentDescription
    {
        get { Initialize(); return _adminConsentDescription!; }
        set { Initialize(); _adminConsentDescription!.Assign(value); }
    }
    private BicepValue<string>? _adminConsentDescription;
 
    public BicepValue<string> UserConsentDisplayName
    {
        get { Initialize(); return _userConsentDisplayName!; }
        set { Initialize(); _userConsentDisplayName!.Assign(value); }
    }
    private BicepValue<string>? _userConsentDisplayName;
 
    public BicepValue<string> UserConsentDescription
    {
        get { Initialize(); return _userConsentDescription!; }
        set { Initialize(); _userConsentDescription!.Assign(value); }
    }
    private BicepValue<string>? _userConsentDescription;
 
    protected override void DefineProvisionableProperties()
    {
        _id = DefineProperty<string>(nameof(Id), ["id"], isRequired: true);
        _value = DefineProperty<string>(nameof(Value), ["value"], isRequired: true);
        _type = DefineProperty<string>(nameof(Type), ["type"], isRequired: true);
        _isEnabled = DefineProperty<bool>(nameof(IsEnabled), ["isEnabled"], isRequired: true);
        _adminConsentDisplayName = DefineProperty<string>(nameof(AdminConsentDisplayName), ["adminConsentDisplayName"]);
        _adminConsentDescription = DefineProperty<string>(nameof(AdminConsentDescription), ["adminConsentDescription"]);
        _userConsentDisplayName = DefineProperty<string>(nameof(UserConsentDisplayName), ["userConsentDisplayName"]);
        _userConsentDescription = DefineProperty<string>(nameof(UserConsentDescription), ["userConsentDescription"]);
    }
}
 
/// <summary>
/// Models an entry of an application's <c>api.preAuthorizedApplications</c>, a client application that is
/// authorized to request delegated permissions of the API without user or admin consent prompts.
/// </summary>
internal sealed class MicrosoftGraphPreAuthorizedApplication : ProvisionableConstruct
{
    public BicepValue<string> AppId
    {
        get { Initialize(); return _appId!; }
        set { Initialize(); _appId!.Assign(value); }
    }
    private BicepValue<string>? _appId;
 
    public BicepList<string> DelegatedPermissionIds
    {
        get { Initialize(); return _delegatedPermissionIds!; }
        set { Initialize(); _delegatedPermissionIds!.Assign(value); }
    }
    private BicepList<string>? _delegatedPermissionIds;
 
    protected override void DefineProvisionableProperties()
    {
        _appId = DefineProperty<string>(nameof(AppId), ["appId"], isRequired: true);
        _delegatedPermissionIds = DefineListProperty<string>(nameof(DelegatedPermissionIds), ["delegatedPermissionIds"], isRequired: true);
    }
}
 
/// <summary>
/// Models an entry of an application's <c>requiredResourceAccess</c>: the permissions that the application declares it needs from one API.
/// </summary>
internal sealed class MicrosoftGraphRequiredResourceAccess : ProvisionableConstruct
{
    public BicepValue<string> ResourceAppId
    {
        get { Initialize(); return _resourceAppId!; }
        set { Initialize(); _resourceAppId!.Assign(value); }
    }
    private BicepValue<string>? _resourceAppId;
 
    public BicepList<MicrosoftGraphResourceAccess> ResourceAccess
    {
        get { Initialize(); return _resourceAccess!; }
        set { Initialize(); _resourceAccess!.Assign(value); }
    }
    private BicepList<MicrosoftGraphResourceAccess>? _resourceAccess;
 
    protected override void DefineProvisionableProperties()
    {
        _resourceAppId = DefineProperty<string>(nameof(ResourceAppId), ["resourceAppId"], isRequired: true);
        _resourceAccess = DefineListProperty<MicrosoftGraphResourceAccess>(nameof(ResourceAccess), ["resourceAccess"], isRequired: true);
    }
}
 
/// <summary>
/// Models a single permission in a <see cref="MicrosoftGraphRequiredResourceAccess"/>.
/// </summary>
internal sealed class MicrosoftGraphResourceAccess : ProvisionableConstruct
{
    public BicepValue<string> Id
    {
        get { Initialize(); return _id!; }
        set { Initialize(); _id!.Assign(value); }
    }
    private BicepValue<string>? _id;
 
    public BicepValue<string> Type
    {
        get { Initialize(); return _type!; }
        set { Initialize(); _type!.Assign(value); }
    }
    private BicepValue<string>? _type;
 
    protected override void DefineProvisionableProperties()
    {
        _id = DefineProperty<string>(nameof(Id), ["id"], isRequired: true);
        _type = DefineProperty<string>(nameof(Type), ["type"], isRequired: true);
    }
}