GroupAccessTokens.psm1
|
function Get-GitlabGroupAccessToken { [CmdletBinding()] [OutputType('Gitlab.AccessToken')] param ( [Parameter(Position=0, Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [string] $GroupId, [Parameter(Position=1, Mandatory=$false)] [string] $TokenId, [Parameter(Mandatory=$false)] [string] $SiteUrl ) $Resource = "groups/$GroupId/access_tokens" if ($TokenId) { $Resource += "/$TokenId" } Invoke-GitlabApi GET $Resource | New-GitlabObject 'Gitlab.AccessToken' } function New-GitlabGroupAccessToken { [CmdletBinding(SupportsShouldProcess)] [OutputType([PSCustomObject])] param ( [Parameter(Position=0, Mandatory)] [string] $GroupId, [Parameter(Mandatory)] [string] $Name, [Parameter(Mandatory)] [ValidateSet('api', 'read_api', 'read_registry', 'write_registry', 'read_repository', 'write_repository')] [string []] $Scope, [Parameter(Mandatory)] [string] [ValidateScript({Test-GitlabSettableAccessLevel $_})] $AccessLevel, [Parameter()] [System.DateTime] [ValidateScript({ $_ -le (Get-Date).AddYears(1)},ErrorMessage = "ExpiresAt can't be more than 1 year from now")] $ExpiresAt = $(Get-Date).AddYears(1), [switch] [Parameter()] $CopyToClipboard, [Parameter()] [string] $SiteUrl ) if ($PSCmdlet.ShouldProcess("Group '$GroupId'", "Create Access Token '$Name' with scopes '$($Scope -join ',')' and access level '$AccessLevel'")) { # https://docs.gitlab.com/ee/api/group_access_tokens.html#create-a-group-access-token $Response = Invoke-GitlabApi POST "groups/$GroupId/access_tokens" -Body @{ name = $Name scopes = $Scope access_level = Get-GitlabMemberAccessLevel $AccessLevel expires_at = $ExpiresAt.ToString('yyyy-MM-dd') } if ($CopyToClipboard) { $Response.token | Set-Clipboard } else { $Response } } } # https://docs.gitlab.com/ee/api/group_access_tokens.html#revoke-a-group-access-token function Remove-GitlabGroupAccessToken { [CmdletBinding(SupportsShouldProcess, ConfirmImpact='High')] [OutputType([void])] [Alias('Revoke-GitlabGroupAccessToken')] param ( [Parameter(Position=0, Mandatory=$true)] [string] $GroupId, [Parameter(Position=1, Mandatory=$true)] [string] $TokenId, [Parameter(Mandatory=$false)] [string] $SiteUrl ) $Resource = "groups/$GroupId/access_tokens/$TokenId" if ($PSCmdlet.ShouldProcess("Group '$GroupId' token #$TokenId", "revoke access token")) { try { Invoke-GitlabApi DELETE $Resource | Out-Null Write-Host "$TokenId revoked from $GroupId" } catch { Write-Error "Error revoking gitlab token from ${GroupId}: $_" } } } |