Plugins/Gist.ps1
# Author: Miodrag Milic <miodrag.milic@gmail.com> # Last Change: 10-Nov-2016. <# .SYNOPSIS Upload files to Github gist platform. .DESCRIPTION Plugin uploads one or more local files to the gist with the given id #> param( $Info, # Gist id, leave empty to create a new gist [string] $Id, # Github ApiKey, create in Github profile -> Settings -> Personal access tokens -> Generate new token # Make sure token has 'gist' scope set. [string] $ApiKey, # File paths to attach to gist [string[]] $Path, # Gist description [string] $Description = "Update-AUPackages Report #powershell #chocolatey", # GitHub API base url, overridable for GitHub Enterprise installations [string] $GitHubAPI = "https://api.github.com", # If the Gist should be created as public or not, ignored when Id is provided [bool] $PublicGist = $true ) # Create gist $gist = @{ description = $Description public = $PublicGist files = @{} } Get-ChildItem $Path | ForEach-Object { $name = Split-Path $_ -Leaf $content = Get-Content $_ -Raw $gist.files[$name] = @{content = "$content"} } # request #https://github.com/majkinetor/au/issues/142 if ($PSVersionTable.PSVersion.major -ge 6) { $AvailableTls = [enum]::GetValues('Net.SecurityProtocolType') | Where-Object { $_ -ge 'Tls' } # PowerShell 6+ does not support SSL3, so use TLS minimum $AvailableTls.ForEach({[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor $_}) } else { [System.Net.ServicePointManager]::SecurityProtocol = 3072 -bor 768 -bor [System.Net.SecurityProtocolType]::Tls -bor [System.Net.SecurityProtocolType]::Ssl3 } $params = @{ ContentType = 'application/json' Method = if ($Id) { "PATCH" } else { "POST" } Uri = if ($Id) { "$GitHubAPI/gists/$Id" } else { "$GitHubAPI/gists" } Body = $gist | ConvertTo-Json UseBasicparsing = $true Headers = @{ 'Accept' = 'application/vnd.github.v3+json' } } if ($ApiKey) { $params.Headers['Authorization'] = ('Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($ApiKey))) } $Response = Invoke-WebRequest @params if ($Response.StatusCode -in @(200, 201, 304)) { $JsonResponse = $Response.Content | ConvertFrom-Json $GistURL = $JsonResponse.html_url $Revision = $JsonResponse.history[0].version Write-Output "$GistURL/$Revision" } |