Files
oci-portal/internal/api/console.go
T
2026-07-09 19:18:04 +08:00

80 lines
2.3 KiB
Go

package api
import (
"net/http"
"github.com/gin-gonic/gin"
)
// ---- 控制台连接(VNC / 串口) ----
type createConsoleConnectionRequest struct {
Region string `json:"region"`
SSHPublicKey string `json:"sshPublicKey" binding:"required"`
}
// @Summary 创建实例控制台连接
// @Tags 计算
// @Param id path int true "配置 ID"
// @Param instanceId path string true "instanceId"
// @Param body body createConsoleConnectionRequest true "请求体"
// @Success 201 {object} map[string]any
// @Security BearerAuth
// @Router /api/v1/oci-configs/{id}/instances/{instanceId}/console-connections [post]
func (h *ociConfigHandler) createConsoleConnection(c *gin.Context) {
id, ok := pathID(c)
if !ok {
return
}
var req createConsoleConnectionRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
conn, err := h.svc.CreateConsoleConnection(c.Request.Context(), id, req.Region, c.Param("instanceId"), req.SSHPublicKey)
if err != nil {
respondError(c, err)
return
}
c.JSON(http.StatusCreated, conn)
}
// @Summary 实例控制台连接列表
// @Tags 计算
// @Param id path int true "配置 ID"
// @Param instanceId path string true "instanceId"
// @Success 200 {object} map[string]any
// @Security BearerAuth
// @Router /api/v1/oci-configs/{id}/instances/{instanceId}/console-connections [get]
func (h *ociConfigHandler) listConsoleConnections(c *gin.Context) {
id, ok := pathID(c)
if !ok {
return
}
connections, err := h.svc.ConsoleConnections(c.Request.Context(), id, c.Query("region"), c.Param("instanceId"))
if err != nil {
respondError(c, err)
return
}
c.JSON(http.StatusOK, connections)
}
// @Summary 删除实例控制台连接
// @Tags 计算
// @Param id path int true "配置 ID"
// @Param connectionId path string true "connectionId"
// @Success 204 "无内容"
// @Security BearerAuth
// @Router /api/v1/oci-configs/{id}/console-connections/{connectionId} [delete]
func (h *ociConfigHandler) deleteConsoleConnection(c *gin.Context) {
id, ok := pathID(c)
if !ok {
return
}
if err := h.svc.DeleteConsoleConnection(c.Request.Context(), id, c.Query("region"), c.Param("connectionId")); err != nil {
respondError(c, err)
return
}
c.Status(http.StatusNoContent)
}