67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
|
|
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"service-operation/types"
|
|
)
|
|
|
|
func (h *OperationHandler) HandleQuickOperation(w http.ResponseWriter, r *http.Request) {
|
|
opType := r.URL.Query().Get("type")
|
|
host := r.URL.Query().Get("host")
|
|
|
|
if host == "" || opType == "" {
|
|
http.Error(w, "Type and host parameters are required", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
req := types.OperationRequest{
|
|
Type: types.OperationType(opType),
|
|
Host: host,
|
|
}
|
|
|
|
// Parse optional parameters
|
|
if countStr := r.URL.Query().Get("count"); countStr != "" {
|
|
if c, err := strconv.Atoi(countStr); err == nil && c > 0 && c <= h.config.MaxCount {
|
|
req.Count = c
|
|
}
|
|
}
|
|
|
|
if portStr := r.URL.Query().Get("port"); portStr != "" {
|
|
if p, err := strconv.Atoi(portStr); err == nil && p > 0 && p <= 65535 {
|
|
req.Port = p
|
|
}
|
|
}
|
|
|
|
if query := r.URL.Query().Get("query"); query != "" {
|
|
req.Query = query
|
|
}
|
|
|
|
if url := r.URL.Query().Get("url"); url != "" {
|
|
req.URL = url
|
|
}
|
|
|
|
if method := r.URL.Query().Get("method"); method != "" {
|
|
req.Method = method
|
|
}
|
|
|
|
if serviceID := r.URL.Query().Get("service_id"); serviceID != "" {
|
|
req.ServiceID = serviceID
|
|
}
|
|
|
|
// Forward to main handler
|
|
reqBody, _ := json.Marshal(req)
|
|
r.Body = http.NoBody
|
|
r.Method = http.MethodPost
|
|
r.Header.Set("Content-Type", "application/json")
|
|
|
|
// Create a new request with the body
|
|
newReq := r.Clone(r.Context())
|
|
newReq.Body = http.NoBody
|
|
newReq.ContentLength = int64(len(reqBody))
|
|
|
|
h.HandleOperation(w, newReq)
|
|
} |