diff --git a/registry/registry/repo.go b/registry/registry/repo.go index 4395b21..bafac99 100644 --- a/registry/registry/repo.go +++ b/registry/registry/repo.go @@ -21,6 +21,7 @@ import ( var ErrNotFound = errors.New("not found") var ErrUnknownComp = errors.New("unknown value for compatibility_mode") var ErrUnknownVal = errors.New("unknown value for validity mode") +var ErrUnknownFormat = errors.New("unknown value for schema format") var ErrNotValid = errors.New("schema is not valid") var ErrNotComp = errors.New("schemas are not compatible") var ErrInvalidValueHeader = errors.New("invalid header value") diff --git a/registry/server/handler.go b/registry/server/handler.go index 7b484fa..3722663 100644 --- a/registry/server/handler.go +++ b/registry/server/handler.go @@ -159,9 +159,8 @@ func (h Handler) GetSpecificationByIdAndVersion(w http.ResponseWriter, r *http.R log.Println(err) } - body, _ := json.Marshal(specification) writeResponse(w, responseBodyAndCode{ - Body: body, + Body: specification, Code: http.StatusOK, }) } @@ -359,8 +358,8 @@ func (h Handler) GetSchemas(w http.ResponseWriter, _ *http.Request) { if err != nil { if errors.Is(err, registry.ErrNotFound) { writeResponse(w, responseBodyAndCode{ - Body: serializeErrorMessage(http.StatusText(http.StatusNotFound)), - Code: http.StatusNotFound, + Body: serializeErrorMessage("No active schemas registered in the Registry"), + Code: http.StatusNoContent, }) return } @@ -535,8 +534,19 @@ func (h Handler) SearchSchemas(w http.ResponseWriter, r *http.Request) { // @Failure 500 // @Router /schemas [post] func (h Handler) PostSchema(w http.ResponseWriter, r *http.Request) { + registerRequest, err := readSchemaRegisterRequest(r.Body) if err != nil { + if errors.Is(err, registry.ErrUnknownFormat) { + body, _ := json.Marshal(report{ + Message: "Bad request: unknown format value", + }) + writeResponse(w, responseBodyAndCode{ + Body: body, + Code: http.StatusBadRequest, + }) + return + } writeResponse(w, responseBodyAndCode{ Body: serializeErrorMessage(http.StatusText(http.StatusBadRequest)), Code: http.StatusBadRequest, @@ -548,7 +558,7 @@ func (h Handler) PostSchema(w http.ResponseWriter, r *http.Request) { if err != nil { if errors.Is(err, registry.ErrUnknownComp) { body, _ := json.Marshal(report{ - Message: "Bad request: unknown value for compatibility_mode", + Message: "Bad request: unknown compatibility_mode value", }) writeResponse(w, responseBodyAndCode{ Body: body, @@ -559,7 +569,7 @@ func (h Handler) PostSchema(w http.ResponseWriter, r *http.Request) { if errors.Is(err, registry.ErrUnknownVal) { body, _ := json.Marshal(report{ - Message: "Bad request: unknown value for validity_mode", + Message: "Bad request: unknown validity_mode value", }) writeResponse(w, responseBodyAndCode{ Body: body, diff --git a/registry/server/util.go b/registry/server/util.go index 3c52d5a..d596a3f 100644 --- a/registry/server/util.go +++ b/registry/server/util.go @@ -18,6 +18,7 @@ import ( "encoding/json" "io" "net/http" + "strings" "github.com/dataphos/schema-registry/registry" ) @@ -27,6 +28,8 @@ type responseBodyAndCode struct { Code int } +var supportedFormats = []string{"json", "avro", "xml", "csv", "protobuf"} + func writeResponse(w http.ResponseWriter, response responseBodyAndCode) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(response.Code) @@ -49,9 +52,24 @@ func readSchemaRegisterRequest(body io.ReadCloser) (registry.SchemaRegistrationR return registry.SchemaRegistrationRequest{}, err } + // check if format is unknown + format := strings.ToLower(schemaRegisterRequest.SchemaType) + if !containsFormat(format) { + return registry.SchemaRegistrationRequest{}, registry.ErrUnknownFormat + } + return schemaRegisterRequest, nil } +func containsFormat(format string) bool { + for _, supportedFormat := range supportedFormats { + if format == supportedFormat { + return true + } + } + return false +} + func readSchemaUpdateRequest(body io.ReadCloser) (registry.SchemaUpdateRequest, error) { encoded, err := io.ReadAll(body) if err != nil { diff --git a/registry/validity/external/validity-checker/src/main/java/net/syntio/validity/checker/Checker.java b/registry/validity/external/validity-checker/src/main/java/net/syntio/validity/checker/Checker.java index 74a9e5b..46ad3e3 100644 --- a/registry/validity/external/validity-checker/src/main/java/net/syntio/validity/checker/Checker.java +++ b/registry/validity/external/validity-checker/src/main/java/net/syntio/validity/checker/Checker.java @@ -32,7 +32,7 @@ public static boolean checkValidity(String schemaType, String schema, String mod case "full" -> ValidityLevel.FULL; default -> ValidityLevel.NONE; }; - ContentValidator validator = ValidatorFactory.createValidator(schemaType); + ContentValidator validator = ValidatorFactory.createValidator(schemaType.toLowerCase()); if (validator == null) { // in case ValidatorFactory returns null return false; } diff --git a/registry/validity/http/http.go b/registry/validity/http/http.go index 32b9c83..b130163 100644 --- a/registry/validity/http/http.go +++ b/registry/validity/http/http.go @@ -77,7 +77,7 @@ func CheckOverHTTP(ctx context.Context, schemaType, schema, mode, url string) (b var parsedBody checkResponse if err = json.Unmarshal(body, &parsedBody); err != nil { - return false, "error unmarshalling compatibility check body", err + return false, "error unmarshalling validity check body", err } valid := parsedBody.Result