api

package
v0.0.0-...-bd1a880 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 8, 2025 License: MIT Imports: 56 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var WebsocketUpgrader = websocket.Upgrader{
	ReadBufferSize:  1024,
	WriteBufferSize: 1024,
	CheckOrigin: func(r *http.Request) bool {

		return true
	},
}

WebsocketUpgrader defines the websocket upgrader settings

Functions

This section is empty.

Types

type AuthController

type AuthController struct {
	// contains filtered or unexported fields
}

AuthController handles authentication-related requests

func NewAuthController

func NewAuthController(
	authService auth.Service,
	userRepo repositories.UserRepository,
	logger *logrus.Logger,
	tokenExpiry time.Duration,
	refreshExpiry time.Duration,
) *AuthController

NewAuthController creates a new AuthController

func (*AuthController) ChangePassword

func (ac *AuthController) ChangePassword(c *gin.Context)

ChangePassword godoc @Summary Change current user password @Description Allows the authenticated user to change their own password. @Tags User @Accept json @Produce json @Security BearerAuth @Param passwords body models.ChangePasswordRequest true "Password change details" @Success 204 "Password successfully changed" @Failure 400 {object} models.ErrorResponse "Invalid input" @Failure 401 {object} models.ErrorResponse "Authentication required or incorrect current password" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /user/password [put]

func (*AuthController) CreateUser

func (ac *AuthController) CreateUser(c *gin.Context)

CreateUser godoc @Summary Create a new user (Admin) @Description Creates a new user with specified details. Only admins can perform this action. @Tags Admin @Accept json @Produce json @Security BearerAuth @Param user body models.AdminCreateUserRequest true "New user details" @Success 201 {object} models.SuccessResponse{data=models.UserResponse} "Successfully created user" @Failure 400 {object} models.ErrorResponse "Invalid input" @Failure 401 {object} models.ErrorResponse "Authentication required" @Failure 403 {object} models.ErrorResponse "Admin privileges required" @Failure 409 {object} models.ErrorResponse "Email already in use" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /admin/users [post]

func (*AuthController) DeleteUser

func (ac *AuthController) DeleteUser(c *gin.Context)

DeleteUser godoc @Summary Delete a user (Admin) @Description Deletes a user by ID. Only admins can perform this action. @Tags Admin @Produce json @Security BearerAuth @Param id path int true "User ID" example(1) @Success 204 "Successfully deleted user" @Failure 400 {object} models.ErrorResponse "Invalid user ID" @Failure 401 {object} models.ErrorResponse "Authentication required" @Failure 403 {object} models.ErrorResponse "Admin privileges required or cannot delete self" @Failure 404 {object} models.ErrorResponse "User not found" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /admin/users/{id} [delete]

func (*AuthController) GetCurrentUser

func (ac *AuthController) GetCurrentUser(c *gin.Context)

GetCurrentUser godoc @Summary Get current user details @Description Retrieves the details of the currently authenticated user. @Tags User @Produce json @Security BearerAuth @Success 200 {object} models.SuccessResponse{data=models.UserResponse} "Successfully retrieved user details" @Failure 401 {object} models.ErrorResponse "Authentication required" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /user/me [get]

func (*AuthController) GetUserByID

func (ac *AuthController) GetUserByID(c *gin.Context)

GetUserByID godoc @Summary Get user by ID (Admin) @Description Retrieves details for a specific user by their ID. Only admins can perform this action. @Tags Admin @Produce json @Security BearerAuth @Param id path int true "User ID" example(1) @Success 200 {object} models.SuccessResponse{data=models.UserResponse} "Successfully retrieved user details" @Failure 400 {object} models.ErrorResponse "Invalid user ID" @Failure 401 {object} models.ErrorResponse "Authentication required" @Failure 403 {object} models.ErrorResponse "Admin privileges required" @Failure 404 {object} models.ErrorResponse "User not found" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /admin/users/{id} [get]

func (*AuthController) ListUsers

func (ac *AuthController) ListUsers(c *gin.Context)

ListUsers godoc @Summary List all users (Admin) @Description Retrieves a paginated list of all users. Only admins can perform this action. @Tags Admin @Produce json @Security BearerAuth @Param page query int false "Page number" default(1) @Param page_size query int false "Number of items per page" default(10) minimum(1) maximum(100) @Param sort_by query string false "Field to sort by (e.g., email, name, created_at)" default(id) @Param sort_order query string false "Sort order (asc, desc)" default(asc) Enums(asc, desc) @Param search query string false "Search term for email or name" @Param active query bool false "Filter by active status" @Success 200 {object} models.SuccessResponse{data=models.UserListResponse} "Successfully retrieved users" // Use UserListResponse @Failure 400 {object} models.ErrorResponse "Invalid query parameters" @Failure 401 {object} models.ErrorResponse "Authentication required" @Failure 403 {object} models.ErrorResponse "Admin privileges required" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /admin/users [get]

func (*AuthController) Login

func (ac *AuthController) Login(c *gin.Context)

Login godoc @Summary Log in a user @Description Logs in a user with email and password, returning JWT tokens. @Tags Auth @Accept json @Produce json @Param credentials body models.LoginRequest true "User login credentials" @Success 200 {object} models.SuccessResponse{data=models.TokenResponse} "Successfully logged in" @Failure 400 {object} models.ErrorResponse "Invalid input" @Failure 401 {object} models.ErrorResponse "Invalid credentials" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /auth/login [post]

func (*AuthController) Logout

func (ac *AuthController) Logout(c *gin.Context)

Logout godoc @Summary Log out a user @Description Invalidates the current access token. @Tags Auth @Security BearerAuth @Success 204 "Successfully logged out" @Failure 400 {object} models.ErrorResponse "Invalid authorization header" @Failure 401 {object} models.ErrorResponse "Authentication required" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /auth/logout [post]

func (*AuthController) Refresh

func (ac *AuthController) Refresh(c *gin.Context)

Refresh godoc @Summary Refresh JWT tokens @Description Refreshes the access and refresh tokens using a valid refresh token. @Tags Auth @Accept json @Produce json @Param token body models.RefreshTokenRequest true "Refresh token details" @Success 200 {object} models.SuccessResponse{data=models.TokenResponse} "Successfully refreshed tokens" @Failure 400 {object} models.ErrorResponse "Invalid input" @Failure 401 {object} models.ErrorResponse "Invalid or expired refresh token" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /auth/refresh [post]

func (*AuthController) Register

func (ac *AuthController) Register(c *gin.Context)

Register godoc @Summary Register a new user @Description Registers a new user. The first user registered automatically gets the admin role. @Tags Auth @Accept json @Produce json @Param user body models.RegisterRequest true "User registration details" @Success 201 {object} models.SuccessResponse{data=models.TokenResponse} "Successfully registered and logged in" @Failure 400 {object} models.ErrorResponse "Invalid input" @Failure 409 {object} models.ErrorResponse "Email already in use" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /auth/register [post]

func (*AuthController) UpdateCurrentUser

func (ac *AuthController) UpdateCurrentUser(c *gin.Context)

UpdateCurrentUser godoc @Summary Update current user details @Description Updates the name and/or email of the currently authenticated user. Changing email requires re-verification. @Tags User @Accept json @Produce json @Security BearerAuth @Param user body object{name=string,email=string} true "User update details" example({"name": "Updated Name", "email": "updated.email@example.com"}) @Success 200 {object} models.SuccessResponse{data=models.UserResponse} "Successfully updated user details" @Failure 400 {object} models.ErrorResponse "Invalid input" @Failure 401 {object} models.ErrorResponse "Authentication required" @Failure 409 {object} models.ErrorResponse "Email already in use" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /user/me [put]

func (*AuthController) UpdateUser

func (ac *AuthController) UpdateUser(c *gin.Context)

UpdateUser godoc @Summary Update a user (Admin) @Description Updates a user's details by ID. Only admins can perform this action. @Tags Admin @Accept json @Produce json @Security BearerAuth @Param id path int true "User ID" example(1) @Param user body models.AdminUpdateUserRequest true "User update details (fields are optional)" @Success 200 {object} models.SuccessResponse{data=models.UserResponse} "Successfully updated user" @Failure 400 {object} models.ErrorResponse "Invalid input or user ID" @Failure 401 {object} models.ErrorResponse "Authentication required" @Failure 403 {object} models.ErrorResponse "Admin privileges required" @Failure 404 {object} models.ErrorResponse "User not found" @Failure 409 {object} models.ErrorResponse "Email already in use" @Failure 500 {object} models.ErrorResponse "Internal server error" @Router /admin/users/{id} [put]

type ExecController

type ExecController struct {
	// contains filtered or unexported fields
}

ExecController handles container exec-related API requests

func NewExecController

func NewExecController(

	dockerClient docker.Manager,
	logger *logrus.Logger,
) *ExecController

NewExecController creates a new exec controller

func (*ExecController) CreateExec

func (ctrl *ExecController) CreateExec(c *gin.Context)

CreateExec handles POST /exec/create

func (*ExecController) InspectExec

func (ctrl *ExecController) InspectExec(c *gin.Context)

InspectExec handles GET /exec/:id

func (*ExecController) RegisterRoutes

func (ctrl *ExecController) RegisterRoutes(router *gin.RouterGroup, authMW *middleware.AuthMiddleware)

RegisterRoutes registers the exec API routes

func (*ExecController) ResizeExec

func (ctrl *ExecController) ResizeExec(c *gin.Context)

ResizeExec handles POST /exec/resize

func (*ExecController) StartExec

func (ctrl *ExecController) StartExec(c *gin.Context)

StartExec handles POST /exec/start

func (*ExecController) StartExecWebsocket

func (ctrl *ExecController) StartExecWebsocket(c *gin.Context)

StartExecWebsocket handles POST /exec/start/ws

type FileController

type FileController struct {
	// contains filtered or unexported fields
}

FileController handles container file-related API requests

func NewFileController

func NewFileController(

	dockerClient client.APIClient,
	tempDir string,
	logger *logrus.Logger,
) *FileController

NewFileController creates a new file controller

func (*FileController) ArchiveFiles

func (ctrl *FileController) ArchiveFiles(c *gin.Context)

ArchiveFiles handles GET /containers/:id/files/archive

func (*FileController) DownloadFile

func (ctrl *FileController) DownloadFile(c *gin.Context)

DownloadFile handles GET /containers/:id/files/download

func (*FileController) EditFile

func (ctrl *FileController) EditFile(c *gin.Context)

EditFile handles PUT /containers/:id/files/edit

func (*FileController) ExtractArchive

func (ctrl *FileController) ExtractArchive(c *gin.Context)

ExtractArchive handles POST /containers/:id/files/extract

func (*FileController) ListFiles

func (ctrl *FileController) ListFiles(c *gin.Context)

ListFiles handles GET /containers/:id/files

func (*FileController) RegisterRoutes

func (ctrl *FileController) RegisterRoutes(router *gin.RouterGroup, authMW *middleware.AuthMiddleware)

RegisterRoutes registers the file API routes

func (*FileController) RemoveFile

func (ctrl *FileController) RemoveFile(c *gin.Context)

RemoveFile handles DELETE /containers/:id/files/remove

func (*FileController) TailFile

func (ctrl *FileController) TailFile(c *gin.Context)

TailFile handles GET /containers/:id/files/tail

func (*FileController) UploadFile

func (ctrl *FileController) UploadFile(c *gin.Context)

UploadFile handles POST /containers/:id/files/upload

type NetworkController

type NetworkController struct {
	// contains filtered or unexported fields
}

NetworkController handles network-related API requests

func NewNetworkController

func NewNetworkController(
	networkService network.Service,
	networkRepo repositories.NetworkRepository,
	dockerManager docker.Manager,
	logger *logrus.Logger,
) *NetworkController

NewNetworkController creates a new network controller

func (*NetworkController) ConnectContainer

func (ctrl *NetworkController) ConnectContainer(c *gin.Context)

ConnectContainer handles POST /networks/:id/connect

func (*NetworkController) CreateNetwork

func (ctrl *NetworkController) CreateNetwork(c *gin.Context)

CreateNetwork handles POST /networks

func (*NetworkController) DeleteNetwork

func (ctrl *NetworkController) DeleteNetwork(c *gin.Context)

DeleteNetwork handles DELETE /networks/:id

func (*NetworkController) DisconnectContainer

func (ctrl *NetworkController) DisconnectContainer(c *gin.Context)

DisconnectContainer handles POST /networks/:id/disconnect

func (*NetworkController) GetNetwork

func (ctrl *NetworkController) GetNetwork(c *gin.Context)

GetNetwork handles GET /networks/:id

func (*NetworkController) ListNetworks

func (ctrl *NetworkController) ListNetworks(c *gin.Context)

ListNetworks handles GET /networks

func (*NetworkController) PruneNetworks

func (ctrl *NetworkController) PruneNetworks(c *gin.Context)

PruneNetworks handles POST /networks/prune

func (*NetworkController) RegisterRoutes

func (ctrl *NetworkController) RegisterRoutes(router *gin.RouterGroup, authMW *middleware.AuthMiddleware)

RegisterRoutes registers the network API routes

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server represents the API server

func NewServer

func NewServer(cfg *ServerConfig) (*Server, error)

NewServer creates a new API server

func (*Server) DecrementWaitGroup

func (s *Server) DecrementWaitGroup()

DecrementWaitGroup decrements the shutdown wait group Called when an operation is complete

func (*Server) GetAuthMiddleware

func (s *Server) GetAuthMiddleware() *middleware.AuthMiddleware

GetAuthMiddleware returns the authentication middleware

func (*Server) GetAuthService

func (s *Server) GetAuthService() auth.Service

GetAuthService returns the authentication service

func (*Server) GetConfig

func (s *Server) GetConfig() *config.Config

GetConfig returns the configuration

func (*Server) GetDB

func (s *Server) GetDB() database.Database

GetDB returns the database instance

func (*Server) GetDockerManager

func (s *Server) GetDockerManager() docker.Manager

GetDockerManager returns the Docker manager

func (*Server) GetLogger

func (s *Server) GetLogger() *logrus.Logger

GetLogger returns the logger instance

func (*Server) IncrementWaitGroup

func (s *Server) IncrementWaitGroup()

IncrementWaitGroup increments the shutdown wait group Used to track ongoing operations during shutdown

func (*Server) RegisterRoutes

func (s *Server) RegisterRoutes() error

registerRoutes registers all API routes

func (*Server) Router

func (s *Server) Router() *gin.Engine

Router returns the Gin router instance

func (*Server) Shutdown

func (s *Server) Shutdown()

Shutdown gracefully shuts down the API server

func (*Server) Start

func (s *Server) Start() error

Start starts the API server

func (*Server) StartTLS

func (s *Server) StartTLS() error

StartTLS starts the API server with TLS enabled

type ServerConfig

type ServerConfig struct {
	Config        *config.Config
	Logger        *logrus.Logger
	DB            database.Database // Use Database interface
	AuthService   auth.Service
	DockerManager docker.Manager // Changed from DockerClient
}

ServerConfig contains the configuration for the API server

type VolumeController

type VolumeController struct {
	// contains filtered or unexported fields
}

VolumeController handles volume-related API requests

func NewVolumeController

func NewVolumeController(
	volumeService volume.Service,

	dockerManager docker.Manager,
	logger *logrus.Logger,
) *VolumeController

NewVolumeController creates a new volume controller

func (*VolumeController) BackupVolume

func (ctrl *VolumeController) BackupVolume(c *gin.Context)

BackupVolume handles GET /volumes/:id/backup

func (*VolumeController) CreateVolume

func (ctrl *VolumeController) CreateVolume(c *gin.Context)

CreateVolume handles POST /volumes

func (*VolumeController) DeleteVolume

func (ctrl *VolumeController) DeleteVolume(c *gin.Context)

DeleteVolume handles DELETE /volumes/:id

func (*VolumeController) GetVolume

func (ctrl *VolumeController) GetVolume(c *gin.Context)

GetVolume handles GET /volumes/:id

func (*VolumeController) InspectVolume

func (ctrl *VolumeController) InspectVolume(c *gin.Context)

InspectVolume handles POST /volumes/:id/inspect

func (*VolumeController) ListVolumes

func (ctrl *VolumeController) ListVolumes(c *gin.Context)

ListVolumes handles GET /volumes

func (*VolumeController) PruneVolumes

func (ctrl *VolumeController) PruneVolumes(c *gin.Context)

PruneVolumes handles POST /volumes/prune

func (*VolumeController) RegisterRoutes

func (ctrl *VolumeController) RegisterRoutes(router *gin.RouterGroup, authMW *middleware.AuthMiddleware)

RegisterRoutes registers the volume API routes

func (*VolumeController) RestoreVolume

func (ctrl *VolumeController) RestoreVolume(c *gin.Context)

RestoreVolume handles POST /volumes/:id/restore

func (*VolumeController) UpdateVolumePermissions

func (ctrl *VolumeController) UpdateVolumePermissions(c *gin.Context)

UpdateVolumePermissions handles POST /volumes/:id/permissions

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL