first commit
This commit is contained in:
264
app/settings/handlers/settings_handler.go
Normal file
264
app/settings/handlers/settings_handler.go
Normal file
@@ -0,0 +1,264 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"gobeyhan/app/settings/services"
|
||||
"gobeyhan/database/models"
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type SettingsHandler struct {
|
||||
service *services.SettingsService
|
||||
}
|
||||
|
||||
func NewSettingsHandler(service *services.SettingsService) *SettingsHandler {
|
||||
return &SettingsHandler{service: service}
|
||||
}
|
||||
|
||||
// GetAllWhitelist godoc
|
||||
// @Summary Get all CORS whitelist entries (Admin)
|
||||
// @Description Get all CORS whitelist origins
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Success 200 {array} models.CorsWhitelist
|
||||
// @Router /api/v1/admin/cors/whitelist [get]
|
||||
func (h *SettingsHandler) GetAllWhitelist(c *gin.Context) {
|
||||
whitelist, err := h.service.GetAllCorsWhitelist()
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"data": whitelist})
|
||||
}
|
||||
|
||||
// CreateWhitelist godoc
|
||||
// @Summary Create CORS whitelist entry (Admin)
|
||||
// @Description Add a new origin to CORS whitelist
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param whitelist body models.CorsWhitelist true "Whitelist object"
|
||||
// @Success 201 {object} models.CorsWhitelist
|
||||
// @Router /api/v1/admin/cors/whitelist [post]
|
||||
func (h *SettingsHandler) CreateWhitelist(c *gin.Context) {
|
||||
var input models.CorsWhitelist
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.service.CreateCorsWhitelist(&input); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusCreated, gin.H{"data": input})
|
||||
}
|
||||
|
||||
// UpdateWhitelist godoc
|
||||
// @Summary Update CORS whitelist entry (Admin)
|
||||
// @Description Update an existing CORS whitelist entry
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param id path int true "Whitelist ID"
|
||||
// @Param whitelist body models.CorsWhitelist true "Whitelist object"
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Router /api/v1/admin/cors/whitelist/{id} [put]
|
||||
func (h *SettingsHandler) UpdateWhitelist(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
|
||||
var input map[string]interface{}
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.service.UpdateCorsWhitelist(id, input); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "Whitelist updated successfully"})
|
||||
}
|
||||
|
||||
// DeleteWhitelist godoc
|
||||
// @Summary Delete CORS whitelist entry (Admin)
|
||||
// @Description Delete a CORS whitelist entry
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param id path int true "Whitelist ID"
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Router /api/v1/admin/cors/whitelist/{id} [delete]
|
||||
func (h *SettingsHandler) DeleteWhitelist(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
|
||||
if err := h.service.DeleteCorsWhitelist(id); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "Whitelist deleted successfully"})
|
||||
}
|
||||
|
||||
// GetAllBlacklist godoc
|
||||
// @Summary Get all CORS blacklist entries (Admin)
|
||||
// @Description Get all CORS blacklist origins
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Success 200 {array} models.CorsBlacklist
|
||||
// @Router /api/v1/admin/cors/blacklist [get]
|
||||
func (h *SettingsHandler) GetAllBlacklist(c *gin.Context) {
|
||||
blacklist, err := h.service.GetAllCorsBlacklist()
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"data": blacklist})
|
||||
}
|
||||
|
||||
// CreateBlacklist godoc
|
||||
// @Summary Create CORS blacklist entry (Admin)
|
||||
// @Description Add a new origin to CORS blacklist
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param blacklist body models.CorsBlacklist true "Blacklist object"
|
||||
// @Success 201 {object} models.CorsBlacklist
|
||||
// @Router /api/v1/admin/cors/blacklist [post]
|
||||
func (h *SettingsHandler) CreateBlacklist(c *gin.Context) {
|
||||
var input models.CorsBlacklist
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.service.CreateCorsBlacklist(&input); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusCreated, gin.H{"data": input})
|
||||
}
|
||||
|
||||
// UpdateBlacklist godoc
|
||||
// @Summary Update CORS blacklist entry (Admin)
|
||||
// @Description Update an existing CORS blacklist entry
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param id path int true "Blacklist ID"
|
||||
// @Param blacklist body models.CorsBlacklist true "Blacklist object"
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Router /api/v1/admin/cors/blacklist/{id} [put]
|
||||
func (h *SettingsHandler) UpdateBlacklist(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
|
||||
var input map[string]interface{}
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.service.UpdateCorsBlacklist(id, input); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "Blacklist updated successfully"})
|
||||
}
|
||||
|
||||
// DeleteBlacklist godoc
|
||||
// @Summary Delete CORS blacklist entry (Admin)
|
||||
// @Description Delete a CORS blacklist entry
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param id path int true "Blacklist ID"
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Router /api/v1/admin/cors/blacklist/{id} [delete]
|
||||
func (h *SettingsHandler) DeleteBlacklist(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
|
||||
if err := h.service.DeleteCorsBlacklist(id); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "Blacklist deleted successfully"})
|
||||
}
|
||||
|
||||
// GetAllRateLimits godoc
|
||||
// @Summary Get all rate limit settings (Admin)
|
||||
// @Description Get all rate limit configurations
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Success 200 {array} models.RateLimitSetting
|
||||
// @Router /api/v1/admin/rate-limits [get]
|
||||
func (h *SettingsHandler) GetAllRateLimits(c *gin.Context) {
|
||||
settings, err := h.service.GetAllRateLimitSettings()
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"data": settings})
|
||||
}
|
||||
|
||||
// UpdateRateLimit godoc
|
||||
// @Summary Update rate limit setting (Admin)
|
||||
// @Description Update an existing rate limit configuration
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param id path int true "Rate Limit ID"
|
||||
// @Param setting body models.RateLimitSetting true "Rate limit object"
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Router /api/v1/admin/rate-limits/{id} [put]
|
||||
func (h *SettingsHandler) UpdateRateLimit(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
|
||||
var input map[string]interface{}
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.service.UpdateRateLimitSetting(id, input); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "Rate limit updated successfully"})
|
||||
}
|
||||
|
||||
// InvalidateCorsCache godoc
|
||||
// @Summary Invalidate CORS cache (Admin)
|
||||
// @Description Clear the CORS cache to force reload from database
|
||||
// @Tags admin,settings
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Router /api/v1/admin/cors/cache/invalidate [post]
|
||||
func (h *SettingsHandler) InvalidateCorsCache(c *gin.Context) {
|
||||
h.service.InvalidateCorsCache()
|
||||
c.JSON(http.StatusOK, gin.H{"message": "CORS cache invalidated successfully"})
|
||||
}
|
||||
Reference in New Issue
Block a user