Page 6302 Azure AD Access Dialog, source in 29

Source29

src/Layers/W1/BaseApp/Modules/System/AzureADAuthentication/AzureADAccessDialog.Page.al133 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.Azure.Identity;

using Microsoft.Utilities;
using System.Environment;
using System.Security.Authentication;

page 6302 "Azure AD Access Dialog"
{
    Caption = 'Microsoft Entra service permissions';
    PageType = NavigatePage;

    layout
    {
        area(content)
        {
            label(Para0)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'The functionality you have selected to use requires services from Microsoft Entra to access your system.';
            }
            label(Para1)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Before you can begin using this functionality, you must first grant access to these services.  To grant access, choose the ''Authorize Azure Services''  link.';
            }
            usercontrol(OAuthIntegration; OAuthIntegration)
            {
                ApplicationArea = Basic, Suite;

                trigger ControlAddInReady()
                begin
                    CurrPage.OAuthIntegration.Authorize(AzureAdMgt.GetAuthCodeUrl(ResourceUrl), LinkNameTxt, LinkTooltipTxt);
                end;

                trigger AuthorizationCodeRetrieved(authorizationCode: Text)
                begin
                    AuthCode := authorizationCode;
                    CurrPage.Close();
                    if ClientTypeManagement.GetCurrentClientType() = CLIENTTYPE::Windows then
                        Message(CloseWindowMsg);
                end;

                trigger AuthorizationErrorOccurred(error: Text; description: Text)
                var
                    ActivityLog: Record "Activity Log";
                    AzureAdAppSetup: Record "Azure AD App Setup";
                begin
                    // OnOAuthAccessDenied event is raised if Auth fails because access is denied
                    // Subcribe to this event if you want to respond to it
                    // description contains AADSTS65004 error code if user denied the request and AADSTS65005 if the client
                    // has not set up required permissions for the resource being requested
                    if error = 'access_denied' then
                        OnOAuthAccessDenied(description, ResourceFriendlyName)
                    else begin
                        if not AzureAdAppSetup.IsEmpty() then begin
                            AzureAdAppSetup.FindFirst();
                            ActivityLog.LogActivityForUser(
                              AzureAdAppSetup.RecordId, ActivityLog.Status::Failed, 'Azure Authorization', description, error, UserId);
                        end;
                        ThrowError();
                    end;
                end;
            }
            label(Para2)
            {
                ApplicationArea = Basic, Suite;
                Caption = '';
                ShowCaption = false;
            }
            label(Para3)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Microsoft Entra Services:';
                Style = Strong;
                StyleExpr = true;
            }
            field(Para4; ResourceFriendlyName)
            {
                ApplicationArea = Basic, Suite;
                Editable = false;
                ShowCaption = false;
                Visible = ResourceFriendlyName <> '';
            }
        }
    }

    actions
    {
    }

    var
        AzureAdMgt: Codeunit "Azure AD Mgt.";
        ClientTypeManagement: Codeunit "Client Type Management";
        AuthCode: SecretText;
        ResourceUrl: Text;
        AuthorizationTxt: Label 'Error occurred while trying to authorize with Microsoft Entra ID. Please try again or contact your system administrator if error persist.';
        ResourceFriendlyName: Text;
        CloseWindowMsg: Label 'Authorization sucessful. Close the window to proceed.';
        LinkNameTxt: Label 'Authorize Azure Services';
        LinkTooltipTxt: Label 'You will be redirected to the authorization provider in a different browser instance.';

    procedure GetAuthorizationCodeAsSecretText(Resource: Text; ResourceName: Text): SecretText
    var
        BlankSecretText: SecretText;
    begin
        ResourceUrl := Resource;
        ResourceFriendlyName := ResourceName;
        CurrPage.Update();
        if not AzureAdMgt.IsAzureADAppSetupDone() then begin
            PAGE.RunModal(PAGE::"Azure AD App Setup Wizard");
            if not AzureAdMgt.IsAzureADAppSetupDone() then
                exit(BlankSecretText);
        end;

        CurrPage.RunModal();
        exit(AuthCode);
    end;

    local procedure ThrowError()
    begin
        if ClientTypeManagement.GetCurrentClientType() = CLIENTTYPE::Windows then
            Message(AuthorizationTxt)
        else
            Error(AuthorizationTxt)
    end;

    [IntegrationEvent(false, false)]
    [Scope('OnPrem')]
    procedure OnOAuthAccessDenied(description: Text; resourceFriendlyName: Text)
    begin
    end;
}