-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdevops-api.ps1
More file actions
95 lines (85 loc) · 3.15 KB
/
devops-api.ps1
File metadata and controls
95 lines (85 loc) · 3.15 KB
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
#region Set Parameters
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"
$VerbosePreference = "Continue"
$env:PodePort ??= 8080
$env:ThreadCount ??= 10
#endregion
#region Uninstall/Install Required Modules
$requiredModules = @(
@{Name = "pode"; Version = "1.6.1"},
@{Name = "gitlab"; Version = "0.0.12"}
)
$requiredModules | ForEach-Object {
Write-Verbose -Message "Installing $($_.Name)"
Uninstall-Module -Name $_.Name -Force -AllVersions -ErrorAction SilentlyContinue
Install-Module -Name $_.Name -RequiredVersion $_.Version -Force
}
#endregion
Start-PodeServer -Threads $env:ThreadCount {
#region Define Authentication types for Routes and OpenAPI
New-PodeAuthType -Bearer -Scope "dev" | Add-PodeAuth -Name 'Dev-Auth' -ScriptBlock {
param($token)
# here you'd check a real storage, this is just for example
if ($token -eq 'dev-token') {
return @{
User = @{
'Name' = 'Guest'
'Type' = 'Developer'
}
Scope = 'dev'
}
}
return $null
}
New-PodeAuthType -Bearer -Scope "admin" | Add-PodeAuth -Name 'Admin-Auth' -ScriptBlock {
param($token)
# here you'd check a real storage, this is just for example
if ($token -eq 'admin-token') {
return @{
User = @{
'Name' = 'Cansin'
'Type' = 'Admin'
}
Scope = 'admin'
}
}
return $null
}
New-PodeAuthType -Basic | Add-PodeAuth -Name 'OpenAPI' -ScriptBlock {
param($username, $password)
# here you'd check a real user storage, this is just for example
if ($username -eq 'evde' -and $password -eq 'kal') {
return @{
User = @{
Name = 'admin'
Type = 'openAPI'
}
}
}
# aww geez! no user was found
return @{ Message = 'Invalid details supplied' }
}
Set-PodeOAGlobalAuth -Name 'OpenAPI' -Verbose
#endregion
#region Set Pode Endpoints
Add-PodeEndpoint -Address * -Port $env:PodePort -Protocol Http
Enable-PodeOpenApi -Path '/docs/openapi' -Title 'DevOps API' -Version 1.0.0
Enable-PodeOpenApiViewer -Type Swagger -Path '/docs/swagger' -DarkMode -Middleware (Get-PodeAuthMiddleware -Name "OpenAPI" -Sessionless)
#endregion
#region Enable Error Logging
New-PodeLoggingMethod -Terminal | Enable-PodeErrorLogging
#endregion
#region routes
#region Gitlab
ConvertTo-PodeRoute -Module Gitlab -Path "/api" -Verbose -Commands @("Get-GitlabGroups")
ConvertTo-PodeRoute -Module Gitlab -Path "/api" -Verbose -Commands @("New-GitlabProject") -Middleware @(
(Get-PodeAuthMiddleware -Name 'Dev-Auth' -Sessionless),
(Get-PodeAuthMiddleware -Name 'Admin-Auth' -Sessionless)
)
ConvertTo-PodeRoute -Module Gitlab -Path "/api" -Verbose -Commands @("New-GitlabGroup") -Middleware (
Get-PodeAuthMiddleware -Name 'Admin-Auth' -Sessionless
)
#endregion
#endregion
}