AlertMonitoring/WebhookSetup.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
Set-StrictMode -Version Latest
function Set-AzSKWebhookSettings
{
    <#
    .SYNOPSIS
    This command would help in updating the Webhook configuration settings under the current powershell session.
    .DESCRIPTION
    This command will update the Event Hub Settings under the current powershell session. This also remembers the current settings and use them in the subsequent sessions.
     
    .PARAMETER WebhookUrl
        Full URL of the Webhook. Sometimes this contains AuthZ token as well.
    .PARAMETER AuthZHeaderName
        Name of the AuthZ header (typically this is "Authorization", however sometimes "Signature" is also used).
    .PARAMETER AuthZHeaderValue
        Value of AuthZHeader.
    .PARAMETER Source
        Provide the source of OMS Events.(e.g. CC,CICD,SDL)
    .PARAMETER Disable
        Use -Disable option to clean the OMS setting under the current instance.
 
    .LINK
    https://aka.ms/azskossdocs
 
    #>

    param(
        
        [Parameter(Mandatory = $true, HelpMessage="Full Url of the Webhook.", ParameterSetName = "Setup")]
        [AllowEmptyString()]
        [string]
        $WebhookUrl,

        [Parameter(Mandatory = $false, HelpMessage="Name of the AuthZ header (typically 'Authorization')", ParameterSetName = "Setup")]
        [AllowEmptyString()]
        [string]
        $AuthZHeaderName,

        [Parameter(Mandatory = $false, HelpMessage="Value of the AuthZ header", ParameterSetName = "Setup")]
        [AllowEmptyString()]
        [string]
        $AuthZHeaderValue,

        [Parameter(Mandatory = $false, HelpMessage="Provide the source of Webhook Events.(e.g. CC,CICD,SDL)", ParameterSetName = "Setup")]
        [AllowEmptyString()]
        [string]
        $Source,

        [Parameter(Mandatory = $false, HelpMessage="Use -AllowSelfSignedWebhookCertificate option to allow a self-signed certificate for webhooks. This setting is to facilitate development/testing and is *not* recommended for production environments.", ParameterSetName = "Setup")]
        [TertiaryBool]
        $AllowSelfSignedWebhookCertificate = [TertiaryBool]::NotSet,

        [Parameter(Mandatory = $true, HelpMessage="Use -Disable option to clear the Webhook settings for the current instance.", ParameterSetName = "Disable")]
        [switch]
        $Disable
    )
    Begin
    {
        [CommandHelper]::BeginCommand($PSCmdlet.MyInvocation);
        [ListenerHelper]::RegisterListeners();
    }
    Process
    {
        try
        {
            $appSettings = [ConfigurationManager]::GetLocalAzSKSettings();
            if(-not $Disable) 
            {
                    $appSettings.WebhookUrl = $WebhookUrl
                    # set the default value to authorization only when header value is sent
                    if([string]::IsNullOrWhiteSpace($AuthZHeaderName) -and -not [string]::IsNullOrWhiteSpace($AuthZHeaderValue))
                    {
                        $appSettings.WebhookAuthZHeaderName = "Authorization";
                    }
                    else
                    {
                        $appSettings.WebhookAuthZHeaderName = $AuthZHeaderName    
                    }                    
                    $appSettings.WebhookAuthZHeaderValue = $AuthZHeaderValue
            }
            else 
            {
                    $appSettings.WebhookUrl = ""
                    $appSettings.WebhookAuthZHeaderName = ""
                    $appSettings.WebhookAuthZHeaderValue = ""
            }
            if(-not [string]::IsNullOrWhiteSpace($Source))
            {                
                $appSettings.WebhookSource = $Source
            }
            else
            {
                $appSettings.WebhookSource = "SDL"
            }

            if($AllowSelfSignedWebhookCertificate -ne [TertiaryBool]::NotSet)
            {
                $appSettings.AllowSelfSignedWebhookCertificate = $AllowSelfSignedWebhookCertificate;
            }
            else
            {
                $appSettings.AllowSelfSignedWebhookCertificate = [TertiaryBool]::NotSet;
            }
            [ConfigurationManager]::UpdateAzSKSettings($appSettings);
        }
        catch
        {
            [EventBase]::PublishGenericException($_);
        }
    }
    End
    {
        [ListenerHelper]::UnregisterListeners();
    }
}