Skip to content

Commit b0c0779

Browse files
committed
IP ranges containing single IP appear as a single address rather than a range (solves #3340)
1 parent 80268c3 commit b0c0779

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

src/main/java/edu/harvard/iq/dataverse/api/Admin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import edu.harvard.iq.dataverse.Dataverse;
44
import edu.harvard.iq.dataverse.EMailValidator;
55
import edu.harvard.iq.dataverse.actionlogging.ActionLogRecord;
6-
import static edu.harvard.iq.dataverse.api.AbstractApiBean.errorResponse;
76
import edu.harvard.iq.dataverse.api.dto.RoleDTO;
87
import edu.harvard.iq.dataverse.authorization.AuthenticatedUserDisplayInfo;
98
import edu.harvard.iq.dataverse.authorization.AuthenticationProvider;

src/main/java/edu/harvard/iq/dataverse/api/Groups.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import javax.json.JsonArrayBuilder;
1818
import javax.json.JsonObject;
1919
import javax.json.JsonString;
20-
import javax.transaction.TransactionRolledbackException;
2120
import javax.ws.rs.DELETE;
2221
import javax.ws.rs.POST;
2322
import javax.ws.rs.PathParam;

src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import edu.harvard.iq.dataverse.authorization.RoleAssigneeDisplayInfo;
2424
import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroup;
2525
import edu.harvard.iq.dataverse.authorization.groups.impl.ipaddress.IpGroup;
26+
import edu.harvard.iq.dataverse.authorization.groups.impl.ipaddress.ip.IpAddress;
2627
import edu.harvard.iq.dataverse.authorization.groups.impl.ipaddress.ip.IpAddressRange;
2728
import edu.harvard.iq.dataverse.authorization.groups.impl.shib.ShibGroup;
2829
import edu.harvard.iq.dataverse.authorization.providers.AuthenticationProviderRow;
@@ -31,6 +32,7 @@
3132
import edu.harvard.iq.dataverse.privateurl.PrivateUrl;
3233
import edu.harvard.iq.dataverse.util.DatasetFieldWalker;
3334
import edu.harvard.iq.dataverse.util.StringUtil;
35+
import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder;
3436
import java.util.Set;
3537
import javax.json.Json;
3638
import javax.json.JsonArrayBuilder;
@@ -39,8 +41,7 @@
3941
import java.util.List;
4042
import java.util.TreeSet;
4143

42-
import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder;
43-
import java.math.BigDecimal;
44+
import java.util.Arrays;
4445
import java.util.Collection;
4546
import java.util.Deque;
4647
import java.util.EnumSet;
@@ -51,6 +52,7 @@
5152
import java.util.function.Function;
5253
import java.util.function.Supplier;
5354
import java.util.stream.Collector;
55+
import static java.util.stream.Collectors.toList;
5456
import javax.json.JsonArray;
5557
import javax.json.JsonObject;
5658
import javax.json.JsonValue;
@@ -127,17 +129,33 @@ public static JsonObjectBuilder json( RoleAssigneeDisplayInfo d ) {
127129
}
128130

129131
public static JsonObjectBuilder json(IpGroup grp) {
130-
JsonArrayBuilder rangeBld = Json.createArrayBuilder();
131-
for (IpAddressRange r : grp.getRanges()) {
132-
rangeBld.add(Json.createArrayBuilder().add(r.getBottom().toString()).add(r.getTop().toString()));
133-
}
134-
return jsonObjectBuilder()
135-
.add("alias", grp.getPersistedGroupAlias())
132+
// collect single addresses
133+
List<String> singles = grp.getRanges().stream().filter( IpAddressRange::isSingleAddress )
134+
.map( IpAddressRange::getBottom )
135+
.map( IpAddress::toString ).collect(toList());
136+
// collect "real" ranges
137+
List<List<String>> ranges = grp.getRanges().stream().filter( rng -> !rng.isSingleAddress() )
138+
.map( rng -> Arrays.asList(rng.getBottom().toString(), rng.getTop().toString()) )
139+
.collect(toList());
140+
141+
JsonObjectBuilder bld = jsonObjectBuilder()
142+
.add("alias", grp.getPersistedGroupAlias() )
136143
.add("identifier", grp.getIdentifier())
137-
.add("id", grp.getId())
138-
.add("name", grp.getDisplayName())
139-
.add("description", grp.getDescription())
140-
.add("ranges", rangeBld);
144+
.add("id", grp.getId() )
145+
.add("name", grp.getDisplayName() )
146+
.add("description", grp.getDescription() );
147+
148+
if ( ! singles.isEmpty() ) {
149+
bld.add("addresses", asJsonArray(singles) );
150+
}
151+
152+
if ( ! ranges.isEmpty() ) {
153+
JsonArrayBuilder rangesBld = Json.createArrayBuilder();
154+
ranges.forEach( r -> rangesBld.add( Json.createArrayBuilder().add(r.get(0)).add(r.get(1))) );
155+
bld.add("ranges", rangesBld );
156+
}
157+
158+
return bld;
141159
}
142160

143161
public static JsonObjectBuilder json(ShibGroup grp) {

0 commit comments

Comments
 (0)