Table 1262 Isolated Certificate

App
Base Application
Namespace
System.Security.Encryption
Versions
17-28

Fields, 11Keys, 1Procedures, 2Obsolete, 1

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/System/IsolatedStorage/IsolatedCertificate.Table.al167 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.Security.Encryption;

using Microsoft.Foundation.NoSeries;
using System.Security.AccessControl;
using System.Security.User;

table 1262 "Isolated Certificate"
{
    Caption = 'Isolated Certificate';
    DataPerCompany = false;
    LookupPageID = "Certificate List";
    Permissions = TableData "Isolated Certificate" = rimd,
                  TableData "No. Series Tenant" = rimd;
    ReplicateData = false;
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Code"; Code[20])
        {
            Caption = 'Code';
            Editable = false;
            DataClassification = CustomerContent;
        }
        field(2; Scope; Option)
        {
            Caption = 'Available To';
            InitValue = Company;
            NotBlank = true;
            OptionCaption = ',Company,User,Company and User';
            OptionMembers = ,Company,User,CompanyAndUser;
            DataClassification = CustomerContent;
        }
        field(4; "Expiry Date"; DateTime)
        {
            Caption = 'Expiry Date';
            Editable = false;
            DataClassification = CustomerContent;
        }
        field(5; "Has Private Key"; Boolean)
        {
            Caption = 'Has Private Key';
            Editable = false;
            DataClassification = CustomerContent;
        }
        field(6; Name; Text[50])
        {
            Caption = 'Name';
            NotBlank = true;
            DataClassification = CustomerContent;
        }
        field(7; "User ID"; Code[50])
        {
            Caption = 'User ID';
            DataClassification = EndUserIdentifiableInformation;
            TableRelation = User."User Name";
            ValidateTableRelation = false;

            trigger OnValidate()
            var
                UserSelection: Codeunit "User Selection";
            begin
                UserSelection.ValidateUserName("User ID");
            end;
        }
        field(8; "Company ID"; Text[30])
        {
            Caption = 'Company ID';
            DataClassification = OrganizationIdentifiableInformation;
        }
        field(10; ThumbPrint; Text[50])
        {
            Caption = 'ThumbPrint';
            Editable = false;
            DataClassification = CustomerContent;
        }
        field(13; "Issued By"; Text[250])
        {
            Caption = 'Issued By';
            Editable = false;
            DataClassification = CustomerContent;
        }
        field(14; "Issued To"; Text[250])
        {
            Caption = 'Issued To';
            Editable = false;
            DataClassification = CustomerContent;
        }
    }

    keys
    {
        key(Key1; "Code")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
        fieldgroup(DropDown; "Code", Name)
        {
        }
    }

    trigger OnDelete()
    begin
        CertificateManagement.DeleteCertAndPasswordFromIsolatedStorage(Rec);
    end;

    trigger OnInsert()
    begin
        Code := GetNextAvailableCode();
        if ExistsInIsolatedStorage() then
            Error(CertCodeExistsErr);
    end;

    var
        CertificateManagement: Codeunit "Certificate Management";

        CertCodeTxt: Label 'CERT', Locked = true;
        CertStartCodeNumberTxt: Label '0000000000', Locked = true;
        CertCodeExistsErr: Label 'This Cert code is being already used in Isolated storage.';
        CertNoSeriesDescriptionTxt: Label 'Certificates No. Series';

    [Scope('OnPrem')]
    procedure IsCertificateExpired(): Boolean
    begin
        if ThumbPrint <> '' then
            exit("Expiry Date" < CurrentDateTime);
    end;

    local procedure GetNextAvailableCode(): Code[20]
    var
        CrossCompanyNoSeries: Codeunit "Cross-Company No. Series";
    begin
        if not CrossCompanyNoSeries.Exists(CertCodeTxt) then
            CrossCompanyNoSeries.CreateNoSeries(CertCodeTxt, CertNoSeriesDescriptionTxt, CertStartCodeNumberTxt);
        exit(CrossCompanyNoSeries.GetNextNo(CertCodeTxt));
    end;

    [Scope('OnPrem')]
    procedure SetScope()
    var
        User: Record User;
    begin
        User.Get(UserSecurityId());
        case Scope of
            Scope::Company:
                Validate("Company ID", CompanyName);
            Scope::User:
                Validate("User ID", User."User Name");
            Scope::CompanyAndUser:
                begin
                    Validate("Company ID", CompanyName);
                    Validate("User ID", User."User Name");
                end;
        end;
        Modify();
    end;

    local procedure ExistsInIsolatedStorage(): Boolean
    begin
        exit(IsolatedStorage.Contains(Code, CertificateManagement.GetCertDataScope(Rec)));
    end;
}