Skip to content

Commit

Permalink
Validate cursor for patches
Browse files Browse the repository at this point in the history
  • Loading branch information
cjmalloy committed Oct 5, 2023
1 parent 9d1684f commit 1ebd4f2
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 6 deletions.
4 changes: 3 additions & 1 deletion src/main/java/jasper/service/ExtService.java
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public Instant update(Ext ext, boolean force) {

@PreAuthorize("@auth.canWriteTag(#qualifiedTag)")
@Timed(value = "jasper.service", extraTags = {"service", "ext"}, histogram = true)
public Instant patch(String qualifiedTag, Patch patch) {
public Instant patch(String qualifiedTag, Instant cursor, Patch patch) {
var created = false;
var ext = extRepository.findOneByQualifiedTag(qualifiedTag).orElse(null);
if (ext == null) {
Expand All @@ -147,6 +147,8 @@ public Instant patch(String qualifiedTag, Patch patch) {
var qt = selector(qualifiedTag);
ext.setTag(qt.tag);
ext.setOrigin(qt.origin);
} else {
if (!cursor.truncatedTo(ChronoUnit.SECONDS).equals(ext.getModified().truncatedTo(ChronoUnit.SECONDS))) throw new ModifiedException("Ext " + ext.getQualifiedTag());
}
if (ext.getConfig() == null) {
ext.setConfig(validate.templateDefaults(qualifiedTag));
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/jasper/service/RefService.java
Original file line number Diff line number Diff line change
Expand Up @@ -143,14 +143,16 @@ public Instant update(Ref ref, boolean force) {

@PreAuthorize("@auth.canWriteRef(#url, #origin)")
@Timed(value = "jasper.service", extraTags = {"service", "ref"}, histogram = true)
public Instant patch(String url, String origin, Patch patch) {
public Instant patch(String url, String origin, Instant cursor, Patch patch) {
var created = false;
var ref = refRepository.findOneByUrlAndOrigin(url, origin).orElse(null);
if (ref == null) {
created = true;
ref = new Ref();
ref.setUrl(url);
ref.setOrigin(origin);
} else {
if (!cursor.truncatedTo(ChronoUnit.SECONDS).equals(ref.getModified().truncatedTo(ChronoUnit.SECONDS))) throw new ModifiedException("Ref");
}
ref.setPlugins(validate.pluginDefaults(ref));
try {
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/jasper/web/rest/ExtController.java
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,10 @@ Instant updateExt(
@PatchMapping(consumes = "application/json-patch+json")
Instant patchExt(
@RequestParam @Length(max = QTAG_LEN) @Pattern(regexp = Tag.QTAG_REGEX) String tag,
@RequestParam Instant cursor,
@RequestBody JsonPatch patch
) {
return extService.patch(tag, patch);
return extService.patch(tag, cursor, patch);
}

@ApiResponses({
Expand All @@ -157,9 +158,10 @@ Instant patchExt(
@ResponseStatus(HttpStatus.NO_CONTENT)
Instant mergeExt(
@RequestParam @Length(max = QTAG_LEN) @Pattern(regexp = Tag.QTAG_REGEX) String tag,
@RequestParam Instant cursor,
@RequestBody JsonMergePatch patch
) {
return extService.patch(tag, patch);
return extService.patch(tag, cursor, patch);
}

@ApiResponses({
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/jasper/web/rest/RefController.java
Original file line number Diff line number Diff line change
Expand Up @@ -246,9 +246,10 @@ Instant updateRef(
Instant patchRef(
@RequestParam @Length(max = URL_LEN) @Pattern(regexp = Ref.REGEX) String url,
@RequestParam(defaultValue = "") @Length(max = ORIGIN_LEN) @Pattern(regexp = HasOrigin.REGEX) String origin,
@RequestParam Instant cursor,
@RequestBody JsonPatch patch
) {
return refService.patch(url, origin, patch);
return refService.patch(url, origin, cursor, patch);
}

@ApiResponses({
Expand All @@ -260,9 +261,10 @@ Instant patchRef(
Instant mergeRef(
@RequestParam @Length(max = URL_LEN) @Pattern(regexp = Ref.REGEX) String url,
@RequestParam(defaultValue = "") @Length(max = ORIGIN_LEN) @Pattern(regexp = HasOrigin.REGEX) String origin,
@RequestParam Instant cursor,
@RequestBody JsonMergePatch patch
) {
return refService.patch(url, origin, patch);
return refService.patch(url, origin, cursor, patch);
}

@ApiResponses({
Expand Down

0 comments on commit 1ebd4f2

Please sign in to comment.