init from gitlab
This commit is contained in:
46
internal/server/api/settings/networks.go
Normal file
46
internal/server/api/settings/networks.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package settings
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/labstack/echo/v4"
|
||||
"gitlab.com/texm/shokku/internal/env"
|
||||
"gitlab.com/texm/shokku/internal/server/dto"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func CreateNetwork(e *env.Env, c echo.Context) error {
|
||||
var req dto.AlterNetworkRequest
|
||||
if err := dto.BindRequest(c, &req); err != nil {
|
||||
return err.ToHTTP()
|
||||
}
|
||||
|
||||
if err := e.Dokku.CreateNetwork(req.Network); err != nil {
|
||||
return fmt.Errorf("error creating network: %w", err)
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
|
||||
func DestroyNetwork(e *env.Env, c echo.Context) error {
|
||||
var req dto.AlterNetworkRequest
|
||||
if err := dto.BindRequest(c, &req); err != nil {
|
||||
return err.ToHTTP()
|
||||
}
|
||||
|
||||
if err := e.Dokku.DestroyNetwork(req.Network); err != nil {
|
||||
return fmt.Errorf("error destroying network: %w", err)
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
|
||||
func ListNetworks(e *env.Env, c echo.Context) error {
|
||||
networks, err := e.Dokku.ListNetworks()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error listing networks: %w", err)
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, dto.ListNetworksResponse{
|
||||
Networks: networks,
|
||||
})
|
||||
}
|
||||
75
internal/server/api/settings/registry.go
Normal file
75
internal/server/api/settings/registry.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package settings
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/texm/dokku-go"
|
||||
"gitlab.com/texm/shokku/internal/env"
|
||||
"gitlab.com/texm/shokku/internal/server/dto"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func SetDockerRegistry(e *env.Env, c echo.Context) error {
|
||||
var req dto.SetDockerRegistryRequest
|
||||
if err := dto.BindRequest(c, &req); err != nil {
|
||||
return err.ToHTTP()
|
||||
}
|
||||
|
||||
if err := e.Dokku.LoginDockerRegistry(req.Server, req.Username, req.Password); err != nil {
|
||||
return echo.NewHTTPError(http.StatusForbidden, err.Error())
|
||||
}
|
||||
|
||||
propErr := e.Dokku.SetAppDockerRegistryProperty("--global", dokku.DockerRegistryPropertyServer, req.Server)
|
||||
if propErr != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, propErr.Error())
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
|
||||
func GetDockerRegistryReport(e *env.Env, c echo.Context) error {
|
||||
report, err := e.Dokku.GetDockerRegistryReport()
|
||||
if err != nil && !errors.Is(err, dokku.NoDeployedAppsError) {
|
||||
return fmt.Errorf("failed to get registry report: %w", err)
|
||||
}
|
||||
|
||||
var response dto.GetDockerRegistryReportResponse
|
||||
for _, appReport := range report {
|
||||
response.Server = appReport.GlobalServer
|
||||
response.PushOnRelease = appReport.GlobalPushOnRelease
|
||||
break
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, response)
|
||||
}
|
||||
|
||||
func AddGitAuth(e *env.Env, c echo.Context) error {
|
||||
var req dto.AddGitAuthRequest
|
||||
if err := dto.BindRequest(c, &req); err != nil {
|
||||
return err.ToHTTP()
|
||||
}
|
||||
|
||||
if err := e.Dokku.GitSetAuth(req.Host, req.Username, req.Password); err != nil {
|
||||
return echo.NewHTTPError(http.StatusForbidden, err.Error())
|
||||
}
|
||||
|
||||
if err := e.Dokku.GitAllowHost(req.Host); err != nil {
|
||||
return echo.NewHTTPError(http.StatusForbidden, err.Error())
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
|
||||
func RemoveGitAuth(e *env.Env, c echo.Context) error {
|
||||
var req dto.RemoveGitAuthRequest
|
||||
if err := dto.BindRequest(c, &req); err != nil {
|
||||
return err.ToHTTP()
|
||||
}
|
||||
|
||||
if err := e.Dokku.GitRemoveAuth(req.Host); err != nil {
|
||||
return echo.NewHTTPError(http.StatusForbidden, err.Error())
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
33
internal/server/api/settings/routes.go
Normal file
33
internal/server/api/settings/routes.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package settings
|
||||
|
||||
import (
|
||||
"github.com/labstack/echo/v4"
|
||||
"gitlab.com/texm/shokku/internal/env"
|
||||
)
|
||||
|
||||
func RegisterRoutes(e *env.Env, g *echo.Group) {
|
||||
g.GET("/versions", e.H(GetVersions))
|
||||
|
||||
g.GET("/events", e.H(GetEventLogs))
|
||||
g.GET("/events/list", e.H(GetEventLogsList))
|
||||
g.POST("/events", e.H(SetEventLoggingEnabled))
|
||||
|
||||
g.GET("/users", e.H(GetUsers))
|
||||
g.GET("/ssh-keys", e.H(GetSSHKeys))
|
||||
|
||||
g.GET("/domains", e.H(GetGlobalDomains))
|
||||
g.POST("/domains", e.H(AddGlobalDomain))
|
||||
g.DELETE("/domains", e.H(RemoveGlobalDomain))
|
||||
|
||||
g.GET("/networks", e.H(ListNetworks))
|
||||
g.POST("/networks", e.H(CreateNetwork))
|
||||
g.DELETE("/networks", e.H(DestroyNetwork))
|
||||
|
||||
g.GET("/plugins", e.H(ListPlugins))
|
||||
|
||||
g.GET("/registry", e.H(GetDockerRegistryReport))
|
||||
g.POST("/registry", e.H(SetDockerRegistry))
|
||||
|
||||
g.POST("/git-auth", e.H(AddGitAuth))
|
||||
g.DELETE("/git-auth", e.H(RemoveGitAuth))
|
||||
}
|
||||
156
internal/server/api/settings/settings.go
Normal file
156
internal/server/api/settings/settings.go
Normal file
@@ -0,0 +1,156 @@
|
||||
package settings
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gitlab.com/texm/shokku/internal/env"
|
||||
"gitlab.com/texm/shokku/internal/models"
|
||||
"gitlab.com/texm/shokku/internal/server/dto"
|
||||
"net/http"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
func GetVersions(e *env.Env, c echo.Context) error {
|
||||
dokkuVersion, err := e.Dokku.GetDokkuVersion()
|
||||
if err != nil {
|
||||
return fmt.Errorf("getting dokku version: %w", err)
|
||||
}
|
||||
return c.JSON(http.StatusOK, &dto.GetVersionsResponse{
|
||||
Dokku: dokkuVersion,
|
||||
Shokku: e.Version,
|
||||
})
|
||||
}
|
||||
|
||||
func GetUsers(e *env.Env, c echo.Context) error {
|
||||
var dbUsers []models.User
|
||||
res := e.DB.Model(models.User{}).Preload("SSHKeys").Find(&dbUsers)
|
||||
if res.Error != nil {
|
||||
return fmt.Errorf("querying db users: %w", res.Error)
|
||||
}
|
||||
|
||||
users := make([]dto.User, len(dbUsers))
|
||||
for i, dbUser := range dbUsers {
|
||||
keys := make([]string, len(dbUser.SSHKeys))
|
||||
for j, key := range dbUser.SSHKeys {
|
||||
keys[j] = key.Key
|
||||
}
|
||||
users[i] = dto.User{
|
||||
Name: dbUser.Name,
|
||||
Source: dbUser.Source,
|
||||
SSHKeys: keys,
|
||||
}
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, dto.GetUsersResponse{
|
||||
Users: users,
|
||||
})
|
||||
}
|
||||
|
||||
func GetSSHKeys(e *env.Env, c echo.Context) error {
|
||||
keys, err := e.Dokku.ListSSHKeys()
|
||||
if err != nil {
|
||||
return fmt.Errorf("listing ssh keys: %w", err)
|
||||
}
|
||||
return c.JSON(http.StatusOK, &dto.GetSSHKeysResponse{
|
||||
Keys: keys,
|
||||
})
|
||||
}
|
||||
|
||||
func GetGlobalDomains(e *env.Env, c echo.Context) error {
|
||||
report, err := e.Dokku.GetGlobalDomainsReport()
|
||||
if err != nil {
|
||||
return fmt.Errorf("getting global domains report: %w", err)
|
||||
}
|
||||
|
||||
if len(report.Domains) == 0 {
|
||||
report.Domains = make([]string, 0)
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, &dto.GetGlobalDomainsResponse{
|
||||
Domains: report.Domains,
|
||||
Enabled: report.Enabled,
|
||||
})
|
||||
}
|
||||
|
||||
func AddGlobalDomain(e *env.Env, c echo.Context) error {
|
||||
var req dto.AlterGlobalDomainRequest
|
||||
if err := dto.BindRequest(c, &req); err != nil {
|
||||
return err.ToHTTP()
|
||||
}
|
||||
|
||||
// TODO: domain verification etc
|
||||
if err := e.Dokku.AddGlobalDomain(req.Domain); err != nil {
|
||||
return fmt.Errorf("adding global domain: %w", err)
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
|
||||
func RemoveGlobalDomain(e *env.Env, c echo.Context) error {
|
||||
var req dto.DeleteGlobalDomainRequest
|
||||
if err := dto.BindRequest(c, &req); err != nil {
|
||||
return err.ToHTTP()
|
||||
}
|
||||
|
||||
// TODO: domain verification etc
|
||||
if err := e.Dokku.RemoveGlobalDomain(req.Domain); err != nil {
|
||||
return fmt.Errorf("removing global domain: %w", err)
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
|
||||
func SetEventLoggingEnabled(e *env.Env, c echo.Context) error {
|
||||
var req dto.SetEventLoggingEnabledRequest
|
||||
if err := dto.BindRequest(c, &req); err != nil {
|
||||
return err.ToHTTP()
|
||||
}
|
||||
|
||||
if err := e.Dokku.SetEventLoggingEnabled(req.Enabled); err != nil {
|
||||
return fmt.Errorf("setting event logging: %w", err)
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
|
||||
func GetEventLogsList(e *env.Env, c echo.Context) error {
|
||||
events, err := e.Dokku.ListLoggedEvents()
|
||||
if err != nil {
|
||||
return fmt.Errorf("removing global domain: %w", err)
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, dto.GetEventLogsListResponse{
|
||||
Events: events,
|
||||
})
|
||||
}
|
||||
|
||||
func GetEventLogs(e *env.Env, c echo.Context) error {
|
||||
logs, err := e.Dokku.GetEventLogs()
|
||||
if err != nil {
|
||||
return fmt.Errorf("getting event logs: %w", err)
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, dto.GetEventLogsResponse{
|
||||
Logs: logs,
|
||||
})
|
||||
}
|
||||
|
||||
func ListPlugins(e *env.Env, c echo.Context) error {
|
||||
plugins, err := e.Dokku.ListPlugins()
|
||||
if err != nil {
|
||||
return fmt.Errorf("listing plugins: %w", err)
|
||||
}
|
||||
info := make([]dto.PluginInfo, len(plugins))
|
||||
for i := 0; i < len(plugins); i++ {
|
||||
p := plugins[i]
|
||||
info[i] = dto.PluginInfo{
|
||||
Name: p.Name,
|
||||
Version: p.Version,
|
||||
Enabled: p.Enabled,
|
||||
Description: p.Description,
|
||||
}
|
||||
}
|
||||
return c.JSON(http.StatusOK, &dto.ListPluginsResponse{
|
||||
Plugins: info,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user