package controller import ( "encoding/json" "net/http" "github.com/goodrain/rainbond/api/handler" httputil "github.com/goodrain/rainbond/util/http" "github.com/sirupsen/logrus" ) // LicenseV2Controller handles license V2 HTTP endpoints. type LicenseV2Controller struct{} var licenseV2Controller *LicenseV2Controller // GetLicenseV2Controller returns the singleton LicenseV2Controller. func GetLicenseV2Controller() *LicenseV2Controller { if licenseV2Controller != nil { return licenseV2Controller } licenseV2Controller = &LicenseV2Controller{} return licenseV2Controller } // GetClusterID is deprecated - cluster ID is no longer used for license verification. func (l *LicenseV2Controller) GetClusterID(w http.ResponseWriter, r *http.Request) { httputil.ReturnSuccess(r, w, map[string]string{"cluster_id": ""}) } // ActivateLicense activates a license. func (l *LicenseV2Controller) ActivateLicense(w http.ResponseWriter, r *http.Request) { var req struct { LicenseCode string `json:"license_code"` EnterpriseID string `json:"enterprise_id"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { httputil.ReturnError(r, w, 400, "invalid request body") return } if req.LicenseCode == "" { httputil.ReturnError(r, w, 400, "license_code field is required") return } if req.EnterpriseID == "" { httputil.ReturnError(r, w, 400, "enterprise_id field is required") return } status, err := handler.GetLicenseV2Handler().ActivateLicense(r.Context(), req.LicenseCode, req.EnterpriseID) if err != nil { logrus.Errorf("activate license: %v", err) httputil.ReturnError(r, w, 500, err.Error()) return } httputil.ReturnSuccess(r, w, status) } // GetLicenseStatus returns the current license status. func (l *LicenseV2Controller) GetLicenseStatus(w http.ResponseWriter, r *http.Request) { status, err := handler.GetLicenseV2Handler().GetLicenseStatus(r.Context()) if err != nil { logrus.Errorf("get license status: %v", err) httputil.ReturnError(r, w, 500, err.Error()) return } httputil.ReturnSuccess(r, w, status) }