feat: batch set server config

This commit is contained in:
uubulb 2025-02-01 17:44:04 +08:00
parent a5ecdbf612
commit e9f8847708
2 changed files with 29 additions and 26 deletions

View File

@ -273,40 +273,38 @@ func getServerConfig(c *gin.Context) (string, error) {
// @Description Set server config // @Description Set server config
// @Tags auth required // @Tags auth required
// @Accept json // @Accept json
// @param request body string true "config" // @Param body body model.ServerConfigForm true "ServerConfigForm"
// @Produce json // @Produce json
// @Success 200 {object} model.CommonResponse[any] // @Success 200 {object} model.CommonResponse[any]
// @Router /server/{id}/config [post] // @Router /server/config [post]
func setServerConfig(c *gin.Context) (any, error) { func setServerConfig(c *gin.Context) (any, error) {
idStr := c.Param("id") var configForm model.ServerConfigForm
id, err := strconv.ParseUint(idStr, 10, 64) if err := c.ShouldBindJSON(&configForm); err != nil {
if err != nil {
return "", err
}
var configRaw string
if err := c.ShouldBindJSON(&configRaw); err != nil {
return nil, err return nil, err
} }
singleton.ServerLock.RLock() singleton.ServerLock.RLock()
s, ok := singleton.ServerList[id] for _, sid := range configForm.Servers {
if !ok || s.TaskStream == nil { s, ok := singleton.ServerList[sid]
singleton.ServerLock.RUnlock() if !ok || s.TaskStream == nil {
return "", nil singleton.ServerLock.RUnlock()
return "", nil
}
if !s.HasPermission(c) {
singleton.ServerLock.RUnlock()
return "", singleton.Localizer.ErrorT("permission denied")
}
if err := s.TaskStream.Send(&pb.Task{
Type: model.TaskTypeApplyConfig,
Data: configForm.Config,
}); err != nil {
singleton.ServerLock.RUnlock()
return "", err
}
} }
singleton.ServerLock.RUnlock() singleton.ServerLock.RUnlock()
if !s.HasPermission(c) {
return "", singleton.Localizer.ErrorT("permission denied")
}
if err := s.TaskStream.Send(&pb.Task{
Type: model.TaskTypeApplyConfig,
Data: configRaw,
}); err != nil {
return "", err
}
return nil, nil return nil, nil
} }

View File

@ -31,6 +31,11 @@ type ServerForm struct {
OverrideDDNSDomains map[uint64][]string `json:"override_ddns_domains,omitempty" validate:"optional"` OverrideDDNSDomains map[uint64][]string `json:"override_ddns_domains,omitempty" validate:"optional"`
} }
type ServerConfigForm struct {
Servers []uint64 `json:"servers,omitempty"`
Config string `json:"config,omitempty"`
}
type ForceUpdateResponse struct { type ForceUpdateResponse struct {
Success []uint64 `json:"success,omitempty" validate:"optional"` Success []uint64 `json:"success,omitempty" validate:"optional"`
Failure []uint64 `json:"failure,omitempty" validate:"optional"` Failure []uint64 `json:"failure,omitempty" validate:"optional"`