Skip to content

Commit 5201325

Browse files
committed
Fix signature class cast issue __WIP__
1 parent f1338e7 commit 5201325

File tree

8 files changed

+58
-46
lines changed

8 files changed

+58
-46
lines changed

src/main/java/com/baloise/confluence/digitalsignature/ContextHelper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import static java.lang.String.format;
1212

1313
public class ContextHelper {
14-
public Object getOrderedSignatures(Signature signature) {
14+
public Object getOrderedSignatures(Signature2 signature) {
1515
SortedSet<Entry<String, Date>> ret = new TreeSet<>(Comparator.comparing((Function<Entry<String, Date>, Date>) Entry::getValue)
1616
.thenComparing(Entry::getKey));
1717
ret.addAll(signature.getSignatures().entrySet());
@@ -38,7 +38,7 @@ public final <K> Set<K> union(Set<K>... sets) {
3838

3939
public Map<String, UserProfile> getProfiles(UserManager userManager, Set<String> userNames) {
4040
Map<String, UserProfile> ret = new HashMap<>();
41-
if (Signature.isPetitionMode(userNames)) return ret;
41+
if (Signature2.isPetitionMode(userNames)) return ret;
4242
for (String userName : userNames) {
4343
ret.put(userName, getProfileNotNull(userManager, userName));
4444
}
@@ -52,7 +52,7 @@ public UserProfile getProfileNotNull(UserManager userManager, String userName) {
5252

5353
public SortedSet<UserProfile> getOrderedProfiles(UserManager userManager, Set<String> userNames) {
5454
SortedSet<UserProfile> ret = new TreeSet<>(new UserProfileByName());
55-
if (Signature.isPetitionMode(userNames)) return ret;
55+
if (Signature2.isPetitionMode(userNames)) return ret;
5656
for (String userName : userNames) {
5757
ret.add(getProfileNotNull(userManager, userName));
5858
}

src/main/java/com/baloise/confluence/digitalsignature/DigitalSignatureMacro.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,10 @@ public String execute(Map<String, String> params, String body, ConversionContext
8282
}
8383

8484
Set<String> userGroups = getSet(params, "signerGroups");
85-
boolean petitionMode = Signature.isPetitionMode(userGroups);
85+
boolean petitionMode = Signature2.isPetitionMode(userGroups);
8686
Set<String> signers = petitionMode ? all : contextHelper.union(getSet(params, "signers"), loadUserGroups(userGroups), loadInheritedSigners(InheritSigners.ofValue(params.get("inheritSigners")), conversionContext));
8787
ContentEntityObject entity = conversionContext.getEntity();
88-
Signature signature = sync(new Signature(entity.getLatestVersionId(), body, params.get("title")).withNotified(getSet(params, "notified")).withMaxSignatures(getLong(params, "maxSignatures", -1)).withVisibilityLimit(getLong(params, "visibilityLimit", -1)), signers);
88+
Signature2 signature = sync(new Signature2(entity.getLatestVersionId(), body, params.get("title")).withNotified(getSet(params, "notified")).withMaxSignatures(getLong(params, "maxSignatures", -1)).withVisibilityLimit(getLong(params, "visibilityLimit", -1)), signers);
8989

9090
boolean protectedContent = getBoolean(params, "protectedContent", false);
9191
if (protectedContent && isPage(conversionContext)) {
@@ -100,7 +100,7 @@ public String execute(Map<String, String> params, String body, ConversionContext
100100
}
101101

102102
@NotNull
103-
private Map<String, Object> buildContext(Map<String, String> params, ConversionContext conversionContext, ContentEntityObject page, Signature signature, boolean protectedContent) {
103+
private Map<String, Object> buildContext(Map<String, String> params, ConversionContext conversionContext, ContentEntityObject page, Signature2 signature, boolean protectedContent) {
104104
ConfluenceUser currentUser = AuthenticatedUserThreadLocal.get();
105105
String currentUserName = currentUser.getName();
106106
boolean protectedContentAccess = protectedContent && (permissionManager.hasPermission(currentUser, Permission.EDIT, page) || signature.hasSigned(currentUserName));
@@ -135,7 +135,7 @@ private Map<String, Object> buildContext(Map<String, String> params, ConversionC
135135
return context;
136136
}
137137

138-
private void ensureProtectedPage(ConversionContext conversionContext, Page page, Signature signature) {
138+
private void ensureProtectedPage(ConversionContext conversionContext, Page page, Signature2 signature) {
139139
Page protectedPage = pageManager.getPage(conversionContext.getSpaceKey(), signature.getProtectedKey());
140140
if (protectedPage == null) {
141141
ContentPermissionSet editors = page.getContentPermissionSet(EDIT_PERMISSION);
@@ -160,15 +160,15 @@ private void ensureProtectedPage(ConversionContext conversionContext, Page page,
160160
}
161161
}
162162

163-
private boolean hideSignatures(Map<String, String> params, Signature signature, String currentUserName) {
163+
private boolean hideSignatures(Map<String, String> params, Signature2 signature, String currentUserName) {
164164
boolean pendingVisible = isVisible(signature, currentUserName, params.get("pendingVisible"));
165165
boolean signaturesVisible = isVisible(signature, currentUserName, params.get("signaturesVisible"));
166166
if (!pendingVisible) signature.setMissingSignatures(new TreeSet<>());
167167
if (!signaturesVisible) signature.setSignatures(new HashMap<>());
168168
return pendingVisible && signaturesVisible;
169169
}
170170

171-
private boolean isVisible(Signature signature, String currentUserName, String signaturesVisibleParam) {
171+
private boolean isVisible(Signature2 signature, String currentUserName, String signaturesVisibleParam) {
172172
switch (SignaturesVisible.ofValue(signaturesVisibleParam)) {
173173
case IF_SIGNATORY:
174174
return signature.hasSigned(currentUserName) || signature.isSignatory(currentUserName);
@@ -268,8 +268,8 @@ private Set<String> getSet(Map<String, String> params, String key) {
268268
return value == null || value.trim().isEmpty() ? new TreeSet<>() : new TreeSet<>(asList(value.split("[;, ]+")));
269269
}
270270

271-
private Signature sync(Signature signature, Set<String> signers) {
272-
Signature loaded = Signature.fromBandana(this.bandanaManager, signature.getKey());
271+
private Signature2 sync(Signature2 signature, Set<String> signers) {
272+
Signature2 loaded = Signature2.fromBandana(this.bandanaManager, signature.getKey());
273273
if (loaded != null) {
274274
signature.setSignatures(loaded.getSignatures());
275275
boolean save = false;
@@ -306,9 +306,9 @@ private Signature sync(Signature signature, Set<String> signers) {
306306
return signature;
307307
}
308308

309-
private void save(Signature signature) {
309+
private void save(Signature2 signature) {
310310
if (signature.hasMissingSignatures()) {
311-
Signature.toBandana(bandanaManager, signature);
311+
Signature2.toBandana(bandanaManager, signature);
312312
}
313313
}
314314

@@ -322,7 +322,7 @@ public OutputType getOutputType() {
322322
return OutputType.BLOCK;
323323
}
324324

325-
protected String getMailto(Collection<UserProfile> profiles, String subject, boolean signed, Signature signature) {
325+
protected String getMailto(Collection<UserProfile> profiles, String subject, boolean signed, Signature2 signature) {
326326
if (profiles == null || profiles.isEmpty()) return null;
327327
Collection<UserProfile> profilesWithMail = profiles.stream().filter(contextHelper::hasEmail).collect(toList());
328328
StringBuilder ret = new StringBuilder("mailto:");

src/main/java/com/baloise/confluence/digitalsignature/Signature.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Set;
1010
import java.util.TreeSet;
1111

12+
@Deprecated
1213
public class Signature implements Serializable, Cloneable {
1314

1415
private static final long serialVersionUID = 1L;

src/main/java/com/baloise/confluence/digitalsignature/Signature2.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,19 @@ public static Signature2 fromBandana(BandanaManager mgr, String key) {
6868
throw new IllegalArgumentException("Value is null in Bandana???");
6969
}
7070

71-
if (value instanceof Signature2) {
71+
if (value instanceof Signature) {
7272
// required for downward compatibility - update for next time.
73-
Signature2 signature = (Signature2) value;
74-
toBandana(mgr, key, signature);
75-
return signature;
73+
Signature signature = (Signature) value;
74+
Signature2 sig = new Signature2(signature.getPageId(), signature.getBody(), signature.getTitle());
75+
sig.setSignatures(signature.getSignatures());
76+
sig.setMaxSignatures(signature.getMaxSignatures());
77+
sig.setHash(signature.getHash());
78+
sig.setKey(signature.getKey());
79+
sig.setNotify(signature.getNotify());
80+
sig.setMissingSignatures(signature.getMissingSignatures());
81+
sig.setVisibilityLimit(signature.getVisibilityLimit());
82+
toBandana(mgr, key, sig);
83+
return sig;
7684
}
7785

7886
if (value instanceof String) {

src/main/java/com/baloise/confluence/digitalsignature/rest/DigitalSignatureService.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@
2020
import com.atlassian.velocity.htmlsafe.HtmlSafe;
2121
import com.baloise.confluence.digitalsignature.ContextHelper;
2222
import com.baloise.confluence.digitalsignature.Markdown;
23-
import com.baloise.confluence.digitalsignature.Signature;
23+
import com.baloise.confluence.digitalsignature.Signature2;
2424
import org.apache.velocity.tools.generic.DateTool;
25-
import org.jsoup.helper.StringUtil;
2625
import org.slf4j.Logger;
2726
import org.slf4j.LoggerFactory;
2827

29-
import javax.ws.rs.*;
28+
import javax.ws.rs.Consumes;
29+
import javax.ws.rs.GET;
30+
import javax.ws.rs.Path;
31+
import javax.ws.rs.Produces;
32+
import javax.ws.rs.QueryParam;
3033
import javax.ws.rs.core.Context;
3134
import javax.ws.rs.core.MediaType;
3235
import javax.ws.rs.core.Response;
@@ -87,9 +90,9 @@ public Response sign(@QueryParam("key") final String key,
8790
@Context UriInfo uriInfo) {
8891
ConfluenceUser confluenceUser = AuthenticatedUserThreadLocal.get();
8992
String userName = confluenceUser.getName();
90-
Signature signature = Signature.fromBandana(bandanaManager, key);
93+
Signature2 signature = Signature2.fromBandana(bandanaManager, key);
9194

92-
if (signature == null || StringUtil.isBlank(userName)) {
95+
if (signature == null || userName == null || userName.trim().isEmpty()) {
9396
log.error("Both, a signature and a user name are required to call this method.",
9497
new NullPointerException(signature == null ? "signature" : "userName"));
9598
return Response.noContent().build();
@@ -102,7 +105,7 @@ public Response sign(@QueryParam("key") final String key,
102105
.build();
103106
}
104107

105-
Signature.toBandana(bandanaManager, key, signature);
108+
Signature2.toBandana(bandanaManager, key, signature);
106109
String baseUrl = settingsManager.getGlobalSettings().getBaseUrl();
107110
for (String notifiedUser : signature.getNotify()) {
108111
notify(notifiedUser, confluenceUser, signature, baseUrl);
@@ -118,7 +121,7 @@ public Response sign(@QueryParam("key") final String key,
118121
return temporaryRedirect(pageUri).build();
119122
}
120123

121-
private void notify(final String notifiedUser, ConfluenceUser signedUser, final Signature signature, final String baseUrl) {
124+
private void notify(final String notifiedUser, ConfluenceUser signedUser, final Signature2 signature, final String baseUrl) {
122125
try {
123126
UserProfile notifiedUserProfile = contextHelper.getProfileNotNull(userManager, notifiedUser);
124127

@@ -171,7 +174,7 @@ private void notify(final String notifiedUser, ConfluenceUser signedUser, final
171174
@Produces("text/html; charset=UTF-8")
172175
@HtmlSafe
173176
public String export(@QueryParam("key") final String key) {
174-
Signature signature = Signature.fromBandana(bandanaManager, key);
177+
Signature2 signature = Signature2.fromBandana(bandanaManager, key);
175178

176179
if (signature == null) {
177180
log.error("A signature is required to call this method.", new NullPointerException("signature"));
@@ -200,7 +203,7 @@ public Response emails(@QueryParam("key") final String key,
200203
@QueryParam("signed") final boolean signed,
201204
@QueryParam("emailOnly") final boolean emailOnly,
202205
@Context UriInfo uriInfo) {
203-
Signature signature = Signature.fromBandana(bandanaManager, key);
206+
Signature2 signature = Signature2.fromBandana(bandanaManager, key);
204207

205208
if (signature == null) {
206209
log.error("A signature is required to call this method.", new NullPointerException("signature"));

src/test/java/com/baloise/confluence/digitalsignature/DigitalSignatureMacroTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import static org.mockito.Mockito.when;
1414

1515
class DigitalSignatureMacroTest {
16-
private final Signature signature = new Signature(1, "test", "title");
16+
private final Signature2 signature = new Signature2(1, "test", "title");
1717
private final BootstrapManager bootstrapManager = mock(BootstrapManager.class);
1818
private final BandanaManager bandana = mock(BandanaManager.class);
1919

src/test/java/com/baloise/confluence/digitalsignature/SignatureSerialisationTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class SignatureSerialisationTest {
1818
@Test
1919
void deserialize() throws IOException, ClassNotFoundException {
2020
ObjectInputStream in = new ObjectInputStream(getClass().getResourceAsStream("/signature.ser"));
21-
Signature signature = (Signature) in.readObject();
21+
Signature2 signature = (Signature2) in.readObject();
2222
in.close();
2323

2424
assertAll(
@@ -29,16 +29,16 @@ void deserialize() throws IOException, ClassNotFoundException {
2929
() -> assertEquals(9999, signature.getSignatures().get("signed1").getTime()),
3030

3131
// assert we can still read the old gson serialization
32-
() -> assertEquals(signature, Signature.deserialize(SIG_JSON)),
32+
() -> assertEquals(signature, Signature2.deserialize(SIG_JSON)),
3333

3434
// assert that deserialization of the serialization results in the original Signature
35-
() -> assertEquals(signature, Signature.deserialize(signature.serialize()))
35+
() -> assertEquals(signature, Signature2.deserialize(signature.serialize()))
3636
);
3737
}
3838

3939
@Test
4040
void serialize() throws IOException, ClassNotFoundException {
41-
Signature signature = new Signature(123L, "body", "title");
41+
Signature2 signature = new Signature2(123L, "body", "title");
4242
signature.getNotify().add("notify1");
4343
signature.getMissingSignatures().add("missing1");
4444
signature.getMissingSignatures().add("missing2");

src/test/java/com/baloise/confluence/digitalsignature/SignatureTest.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class SignatureTest {
1818
class SerializationTest {
1919
@Test
2020
void serialize_empty() {
21-
Signature signature = new Signature();
21+
Signature2 signature = new Signature2();
2222

2323
String json = signature.serialize();
2424

@@ -27,7 +27,7 @@ void serialize_empty() {
2727

2828
@Test
2929
void serialize_initializedObject() {
30-
Signature signature = new Signature(42L, "body text", "title text");
30+
Signature2 signature = new Signature2(42L, "body text", "title text");
3131
signature.sign("max.mustermann");
3232
signature.setMissingSignatures(Collections.singleton("max.muster"));
3333
signature.setNotify(Collections.singleton("max.meier"));
@@ -39,20 +39,20 @@ void serialize_initializedObject() {
3939

4040
@Test
4141
void deserialize_empty() {
42-
assertNull(Signature.deserialize(null));
43-
assertNull(Signature.deserialize(""));
42+
assertNull(Signature2.deserialize(null));
43+
assertNull(Signature2.deserialize(""));
4444
}
4545

4646
@Test
4747
void serializeAndDeserialize() {
48-
Signature signature = new Signature(42L, "body text", "title text");
48+
Signature2 signature = new Signature2(42L, "body text", "title text");
4949
signature.sign("max.mustermann");
5050
signature.setMissingSignatures(Collections.singleton("max.muster"));
5151
signature.setNotify(Collections.singleton("max.meier"));
5252

5353
String json = signature.serialize();
5454

55-
Signature restoredSignature = Signature.deserialize(json);
55+
Signature2 restoredSignature = Signature2.deserialize(json);
5656

5757
assertEquals("{\"key\":\"signature.752b4cc6b4933fc7f0a6efa819c1bcc440c32155457e836d99d1bfe927cc22f5\",\"hash\":\"752b4cc6b4933fc7f0a6efa819c1bcc440c32155457e836d99d1bfe927cc22f5\",\"pageId\":42,\"title\":\"title text\",\"body\":\"body text\",\"maxSignatures\":-1,\"visibilityLimit\":-1,\"signatures\":{},\"missingSignatures\":[\"max.muster\"],\"notify\":[\"max.meier\"]}", json);
5858
assertEquals(signature, restoredSignature);
@@ -62,50 +62,50 @@ void serializeAndDeserialize() {
6262
@Nested
6363
class BandanaWrapperTest {
6464
private final BandanaManager bandana = mock(DefaultBandanaManager.class);
65-
private final Signature signature = new Signature(1, "test", "title");
65+
private final Signature2 signature = new Signature2(1, "test", "title");
6666

6767
@Test
6868
void toBandanaFromBandana_readAsWritten() {
6969
ArgumentCaptor<String> stringCapator = ArgumentCaptor.forClass(String.class);
7070
ArgumentCaptor<Object> objectCapator = ArgumentCaptor.forClass(Object.class);
7171

7272
String key = signature.getKey();
73-
assertNull(Signature.fromBandana(bandana, key), "Should not be there yet.");
73+
assertNull(Signature2.fromBandana(bandana, key), "Should not be there yet.");
7474

7575
doNothing().when(bandana).setValue(any(), stringCapator.capture(), objectCapator.capture());
7676
when(bandana.getKeys(any())).thenReturn(Collections.singletonList(key));
7777

78-
Signature.toBandana(bandana, signature);
78+
Signature2.toBandana(bandana, signature);
7979
assertEquals(key, stringCapator.getValue());
8080
assertEquals(signature.serialize(), objectCapator.getValue());
8181

8282
when(bandana.getValue(any(), any())).thenCallRealMethod();
8383
when(bandana.getValue(any(), eq(key), eq(true))).thenReturn(signature);
84-
assertEquals(signature, Signature.fromBandana(bandana, signature.getKey()));
84+
assertEquals(signature, Signature2.fromBandana(bandana, signature.getKey()));
8585
}
8686

8787
@Test
8888
void fromBandana_signature_signature() {
8989
String key = signature.getKey();
90-
assertNull(Signature.fromBandana(bandana, key), "Should not be there yet.");
90+
assertNull(Signature2.fromBandana(bandana, key), "Should not be there yet.");
9191

9292
when(bandana.getKeys(any())).thenReturn(Collections.singletonList(key));
9393
when(bandana.getValue(any(), any())).thenCallRealMethod();
9494
when(bandana.getValue(any(), eq(key), eq(true))).thenReturn(signature);
9595

96-
assertEquals(signature, Signature.fromBandana(bandana, signature.getKey()));
96+
assertEquals(signature, Signature2.fromBandana(bandana, signature.getKey()));
9797
}
9898

9999
@Test
100100
void fromBandana_string_signature() {
101101
String key = signature.getKey();
102-
assertNull(Signature.fromBandana(bandana, key), "Should not be there yet.");
102+
assertNull(Signature2.fromBandana(bandana, key), "Should not be there yet.");
103103

104104
when(bandana.getKeys(any())).thenReturn(Collections.singletonList(key));
105105
when(bandana.getValue(any(), any())).thenCallRealMethod();
106106
when(bandana.getValue(any(), eq(key), eq(true))).thenReturn(signature.serialize());
107107

108-
assertEquals(signature, Signature.fromBandana(bandana, signature.getKey()));
108+
assertEquals(signature, Signature2.fromBandana(bandana, signature.getKey()));
109109
}
110110
}
111111
}

0 commit comments

Comments
 (0)