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

135 lines
7.3 KiB
Go

package api
import (
"github.com/gin-gonic/gin"
"oci-portal/internal/service"
)
// registerOci 挂载 OCI 租户配置及其资源的全部路由;共用 ociConfigHandler。
// 按资源域顺序分节注册,便于维护:配置元数据 → 计算 → 网络 → 存储 → IAM/审计。
func registerOci(secured *gin.RouterGroup, ociConfigs *service.OciConfigService) {
h := &ociConfigHandler{svc: ociConfigs}
secured.GET("/regions", listRegions)
secured.GET("/overview", h.overview)
registerOciConfig(secured, h)
registerOciCompute(secured, h)
registerOciNetwork(secured, h)
registerOciStorage(secured, h)
registerOciCost(secured, h)
registerOciTenantIAM(secured, h)
}
// registerOciConfig 配置本身 + 区域/区间/订阅/限额/形状/镜像。
func registerOciConfig(g *gin.RouterGroup, h *ociConfigHandler) {
g.POST("/oci-configs", h.create)
g.GET("/oci-configs", h.list)
g.GET("/oci-configs/:id", h.get)
g.PUT("/oci-configs/:id", h.update)
g.POST("/oci-configs/:id/verify", h.verify)
g.DELETE("/oci-configs/:id", h.remove)
g.GET("/oci-configs/:id/compartments", h.compartments)
g.GET("/oci-configs/:id/cached-regions", h.cachedRegions)
g.GET("/oci-configs/:id/cached-compartments", h.cachedCompartments)
g.GET("/oci-configs/:id/region-subscriptions", h.regionSubscriptions)
g.POST("/oci-configs/:id/region-subscriptions", h.subscribeRegion)
g.GET("/oci-configs/:id/limits", h.limits)
g.GET("/oci-configs/:id/limits/services", h.limitServices)
g.GET("/oci-configs/:id/subscriptions", h.subscriptions)
g.GET("/oci-configs/:id/subscriptions/:subscriptionId", h.subscriptionDetail)
g.GET("/oci-configs/:id/shapes", h.shapes)
g.GET("/oci-configs/:id/images", h.images)
g.GET("/oci-configs/:id/images/:imageId", h.getImage)
g.GET("/oci-configs/:id/availability-domains", h.availabilityDomains)
}
// registerOciCompute 实例、控制台连接、VNIC、流量。
func registerOciCompute(g *gin.RouterGroup, h *ociConfigHandler) {
g.GET("/oci-configs/:id/instances", h.listInstances)
g.POST("/oci-configs/:id/instances", h.createInstance)
g.GET("/oci-configs/:id/instances/:instanceId", h.getInstance)
g.PUT("/oci-configs/:id/instances/:instanceId", h.updateInstance)
g.DELETE("/oci-configs/:id/instances/:instanceId", h.terminateInstance)
g.POST("/oci-configs/:id/instances/:instanceId/action", h.instanceAction)
g.POST("/oci-configs/:id/instances/:instanceId/change-public-ip", h.changePublicIP)
g.POST("/oci-configs/:id/instances/:instanceId/ipv6-addresses", h.addInstanceIpv6)
g.DELETE("/oci-configs/:id/instances/:instanceId/ipv6-addresses", h.deleteInstanceIpv6)
g.POST("/oci-configs/:id/instances/:instanceId/console-connections", h.createConsoleConnection)
g.GET("/oci-configs/:id/instances/:instanceId/console-connections", h.listConsoleConnections)
g.DELETE("/oci-configs/:id/console-connections/:connectionId", h.deleteConsoleConnection)
g.GET("/oci-configs/:id/instances/:instanceId/vnics", h.listInstanceVnics)
g.POST("/oci-configs/:id/instances/:instanceId/vnics", h.attachVnic)
g.DELETE("/oci-configs/:id/vnic-attachments/:attachmentId", h.detachVnic)
g.POST("/oci-configs/:id/vnics/:vnicId/ipv6-addresses", h.addVnicIpv6)
g.GET("/oci-configs/:id/instances/:instanceId/traffic", h.instanceTraffic)
}
// registerOciNetwork VCN、子网、安全列表。
func registerOciNetwork(g *gin.RouterGroup, h *ociConfigHandler) {
g.GET("/oci-configs/:id/vcns", h.listVCNs)
g.POST("/oci-configs/:id/vcns", h.createVCN)
g.GET("/oci-configs/:id/vcns/:vcnId", h.getVCN)
g.PUT("/oci-configs/:id/vcns/:vcnId", h.updateVCN)
g.DELETE("/oci-configs/:id/vcns/:vcnId", h.deleteVCN)
g.POST("/oci-configs/:id/vcns/:vcnId/enable-ipv6", h.enableVCNIPv6)
g.GET("/oci-configs/:id/subnets", h.listSubnets)
g.POST("/oci-configs/:id/subnets", h.createSubnet)
g.GET("/oci-configs/:id/subnets/:subnetId", h.getSubnet)
g.PUT("/oci-configs/:id/subnets/:subnetId", h.updateSubnet)
g.DELETE("/oci-configs/:id/subnets/:subnetId", h.deleteSubnet)
g.GET("/oci-configs/:id/security-lists", h.listSecurityLists)
g.POST("/oci-configs/:id/security-lists", h.createSecurityList)
g.GET("/oci-configs/:id/security-lists/:securityListId", h.getSecurityList)
g.PUT("/oci-configs/:id/security-lists/:securityListId", h.updateSecurityList)
g.DELETE("/oci-configs/:id/security-lists/:securityListId", h.deleteSecurityList)
}
// registerOciStorage 引导卷、块存储、附加/替换。
func registerOciStorage(g *gin.RouterGroup, h *ociConfigHandler) {
g.GET("/oci-configs/:id/boot-volumes", h.listBootVolumes)
g.GET("/oci-configs/:id/boot-volumes/:bootVolumeId", h.getBootVolume)
g.PUT("/oci-configs/:id/boot-volumes/:bootVolumeId", h.updateBootVolume)
g.DELETE("/oci-configs/:id/boot-volumes/:bootVolumeId", h.deleteBootVolume)
g.GET("/oci-configs/:id/instances/:instanceId/boot-volume-attachments", h.listBootVolumeAttachments)
g.POST("/oci-configs/:id/instances/:instanceId/boot-volume-attachments", h.attachBootVolume)
g.POST("/oci-configs/:id/instances/:instanceId/replace-boot-volume", h.replaceBootVolume)
g.DELETE("/oci-configs/:id/boot-volume-attachments/:attachmentId", h.detachBootVolume)
g.GET("/oci-configs/:id/volumes", h.listBlockVolumes)
g.GET("/oci-configs/:id/instances/:instanceId/volume-attachments", h.listVolumeAttachments)
g.POST("/oci-configs/:id/instances/:instanceId/volume-attachments", h.attachVolume)
g.DELETE("/oci-configs/:id/volume-attachments/:attachmentId", h.detachVolume)
}
// registerOciCost 成本快照。
func registerOciCost(g *gin.RouterGroup, h *ociConfigHandler) {
g.GET("/oci-configs/:id/costs", h.costs)
}
// registerOciTenantIAM 租户 IAM 治理:审计、用户、密码策略、身份提供商、单点登录规则。
func registerOciTenantIAM(g *gin.RouterGroup, h *ociConfigHandler) {
g.GET("/oci-configs/:id/audit-events", h.getAuditEvents)
g.GET("/oci-configs/:id/audit-events/detail", h.getAuditEventDetail)
g.GET("/oci-configs/:id/users", h.listTenantUsers)
g.POST("/oci-configs/:id/users", h.createTenantUser)
g.GET("/oci-configs/:id/users/:userId", h.getTenantUserDetail)
g.PUT("/oci-configs/:id/users/:userId", h.updateTenantUser)
g.DELETE("/oci-configs/:id/users/:userId", h.deleteTenantUser)
g.POST("/oci-configs/:id/users/:userId/reset-password", h.resetTenantUserPassword)
g.DELETE("/oci-configs/:id/users/:userId/mfa-devices", h.deleteTenantUserMfa)
g.DELETE("/oci-configs/:id/users/:userId/api-keys", h.deleteTenantUserApiKeys)
g.GET("/oci-configs/:id/notification-recipients", h.getNotificationRecipients)
g.PUT("/oci-configs/:id/notification-recipients", h.updateNotificationRecipients)
g.GET("/oci-configs/:id/password-policies", h.listPasswordPolicies)
g.PUT("/oci-configs/:id/password-policies/:policyId", h.updatePasswordPolicy)
g.GET("/oci-configs/:id/identity-settings", h.getIdentitySetting)
g.PUT("/oci-configs/:id/identity-settings", h.updateIdentitySetting)
g.GET("/oci-configs/:id/identity-providers", h.listIdentityProviders)
g.POST("/oci-configs/:id/identity-providers", h.createIdentityProvider)
g.POST("/oci-configs/:id/identity-providers/:idpId/activate", h.activateIdentityProvider)
g.DELETE("/oci-configs/:id/identity-providers/:idpId", h.deleteIdentityProvider)
g.GET("/oci-configs/:id/saml-metadata", h.downloadSamlMetadata)
g.GET("/oci-configs/:id/sign-on-rules", h.listSignOnRules)
g.POST("/oci-configs/:id/sign-on-exemptions", h.createMfaExemption)
g.DELETE("/oci-configs/:id/sign-on-exemptions/:ruleId", h.deleteMfaExemption)
}