P2.1: BYOC Admin API — произвольные креды при создании тенанта
POST /admin/tenants теперь принимает опциональные access_key/secret_key. Если задано любое из полей — оба обязательны (мин. длина 8/16). С произвольными кредами tenantID генерируется случайно (CreateFixedAutoID). Без кредов — поведение прежнее (store.Create).
This commit is contained in:
+21
-1
@@ -275,6 +275,10 @@ func (h *Handler) jwtMiddleware(next http.Handler) http.Handler {
|
||||
type createTenantRequest struct {
|
||||
Name string `json:"name"`
|
||||
MaxQueues int `json:"max_queues"`
|
||||
// BYOC: необязательные произвольные креды. Если задано одно поле —
|
||||
// оба обязательны.
|
||||
AccessKey string `json:"access_key,omitempty"`
|
||||
SecretKey string `json:"secret_key,omitempty"`
|
||||
}
|
||||
|
||||
// tenantCreateResponse — ответ с secret_key (показывается ТОЛЬКО при создании)
|
||||
@@ -317,7 +321,23 @@ func (h *Handler) createTenant(w http.ResponseWriter, r *http.Request) {
|
||||
json.NewEncoder(w).Encode(map[string]string{"error": "name is required"})
|
||||
return
|
||||
}
|
||||
t, err := h.store.Create(req.Name, req.MaxQueues)
|
||||
|
||||
// BYOC: либо оба поля кредов заданы, либо ни одного.
|
||||
var t *tenant.Tenant
|
||||
var err error
|
||||
if req.AccessKey != "" || req.SecretKey != "" {
|
||||
if req.AccessKey == "" || req.SecretKey == "" {
|
||||
jsonErr(w, http.StatusBadRequest, "both access_key and secret_key are required when specifying custom credentials")
|
||||
return
|
||||
}
|
||||
if len(req.AccessKey) < 8 || len(req.SecretKey) < 16 {
|
||||
jsonErr(w, http.StatusBadRequest, "access_key min 8 chars, secret_key min 16 chars")
|
||||
return
|
||||
}
|
||||
t, err = h.store.CreateFixedAutoID(req.Name, req.MaxQueues, req.AccessKey, req.SecretKey)
|
||||
} else {
|
||||
t, err = h.store.Create(req.Name, req.MaxQueues)
|
||||
}
|
||||
if err != nil {
|
||||
log.Errorf("admin: failed to create tenant: %v", err)
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
Reference in New Issue
Block a user