From 4210dc0c6d956ff1bad372479f2c24a97e155898 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 20 Jul 2020 15:07:11 +0200 Subject: [PATCH] implemented public api for verifying changeset signatures --- .../java/sonia/scm/repository/Changeset.java | 33 +++++++++++++ .../java/sonia/scm/repository/Signature.java | 47 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 scm-core/src/main/java/sonia/scm/repository/Signature.java diff --git a/scm-core/src/main/java/sonia/scm/repository/Changeset.java b/scm-core/src/main/java/sonia/scm/repository/Changeset.java index e2c980db37..5edd01531e 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Changeset.java +++ b/scm-core/src/main/java/sonia/scm/repository/Changeset.java @@ -32,6 +32,7 @@ import sonia.scm.util.ValidationUtil; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -85,6 +86,8 @@ public class Changeset extends BasicPropertiesAware implements ModelObject { */ private Collection contributors; + private List signatures; + public Changeset() {} public Changeset(String id, Long date, Person author) @@ -348,4 +351,34 @@ public class Changeset extends BasicPropertiesAware implements ModelObject { this.contributors.addAll(contributors); } } + + /** + * Sets a collection of signatures which belong to this changeset. + * @param signatures collection of signatures + * @since 2.3.0 + */ + public void setSignatures(Collection signatures) { + this.signatures = new ArrayList<>(signatures); + } + + /** + * Returns a immutable list of signatures. + * @return signatures + * @since 2.3.0 + */ + public List getSignatures() { + return Collections.unmodifiableList(signatures); + } + + /** + * Adds a signature to the list of signatures. + * @param signature + * @since 2.3.0 + */ + public void addSignature(Signature signature) { + if (signatures == null) { + signatures = new ArrayList<>(); + } + signatures.add(signature); + } } diff --git a/scm-core/src/main/java/sonia/scm/repository/Signature.java b/scm-core/src/main/java/sonia/scm/repository/Signature.java new file mode 100644 index 0000000000..4cada0e629 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/Signature.java @@ -0,0 +1,47 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import lombok.Value; + +import java.util.Optional; + +/** + * Signature is the output of a signature verification. + * @since 2.3.0 + */ +@Value +public class Signature { + + private final String key; + private final String type; + private final boolean verified; + private final String owner; + + public Optional getOwner() { + return Optional.ofNullable(owner); + } + +}