func (api *API) CreateCert(ctx context.Context, w http.ResponseWriter, req *http.Request) { var cert *router.Certificate if err := json.NewDecoder(req.Body).Decode(&cert); err != nil { httphelper.Error(w, err) return } l := api.router.HTTP.(*HTTPListener) err := l.AddCert(cert) if err != nil { jsonError := httphelper.JSONError{} switch err { case ErrConflict: jsonError.Code = httphelper.ConflictErrorCode jsonError.Message = "Duplicate cert" case ErrInvalid: jsonError.Code = httphelper.ValidationErrorCode jsonError.Message = "Invalid cert" default: httphelper.Error(w, err) return } } httphelper.JSON(w, 200, cert) }
func (api *API) CreateRoute(ctx context.Context, w http.ResponseWriter, req *http.Request) { log, _ := ctxhelper.LoggerFromContext(ctx) var route *router.Route if err := json.NewDecoder(req.Body).Decode(&route); err != nil { log.Error(err.Error()) httphelper.Error(w, err) return } l := api.router.ListenerFor(route.Type) if l == nil { httphelper.ValidationError(w, "type", "Invalid route type") return } err := l.AddRoute(route) if err != nil { rjson, jerr := json.Marshal(&route) if jerr != nil { log.Error(jerr.Error()) httphelper.Error(w, jerr) return } jsonError := httphelper.JSONError{Detail: rjson} switch err { case ErrConflict: jsonError.Code = httphelper.ConflictErrorCode jsonError.Message = "Duplicate route" case ErrInvalid: jsonError.Code = httphelper.ValidationErrorCode jsonError.Message = "Invalid route" default: log.Error(err.Error()) httphelper.Error(w, err) return } httphelper.Error(w, jsonError) return } httphelper.JSON(w, 200, route) }