encryption properties are not mutable except during creation requests

This commit is contained in:
Adrian Cole 2010-11-21 18:37:47 +01:00
parent 6ee0b3548d
commit 0ca3a686f5
7 changed files with 82 additions and 46 deletions

View File

@ -36,8 +36,12 @@ import com.google.common.collect.ImmutableSet;
*/ */
public class CreateDriveRequest extends BaseDrive { public class CreateDriveRequest extends BaseDrive {
public static class Builder extends BaseDrive.Builder { public static class Builder extends BaseDrive.Builder {
private Set<String> avoid = ImmutableSet.of(); private Set<String> avoid = ImmutableSet.of();
@Nullable
private String encryptionCipher;
public Builder avoid(Iterable<String> avoid) { public Builder avoid(Iterable<String> avoid) {
this.avoid = ImmutableSet.copyOf(checkNotNull(avoid, "avoid")); this.avoid = ImmutableSet.copyOf(checkNotNull(avoid, "avoid"));
return this; return this;
@ -51,12 +55,9 @@ public class CreateDriveRequest extends BaseDrive {
return Builder.class.cast(super.claimType(claimType)); return Builder.class.cast(super.claimType(claimType));
} }
/**
* {@inheritDoc}
*/
@Override
public Builder encryptionCipher(String encryptionCipher) { public Builder encryptionCipher(String encryptionCipher) {
return Builder.class.cast(super.encryptionCipher(encryptionCipher)); this.encryptionCipher = encryptionCipher;
return this;
} }
/** /**
@ -105,11 +106,14 @@ public class CreateDriveRequest extends BaseDrive {
} }
private final Set<String> avoid; private final Set<String> avoid;
@Nullable
private final String encryptionCipher;
public CreateDriveRequest(String name, long size, @Nullable ClaimType claimType, Iterable<String> readers, public CreateDriveRequest(String name, long size, @Nullable ClaimType claimType, Iterable<String> readers,
Iterable<String> tags, Map<String, String> userMetadata, @Nullable String encryptionCipher, Iterable<String> tags, Map<String, String> userMetadata, @Nullable String encryptionCipher,
Iterable<String> avoid) { Iterable<String> avoid) {
super(name, size, claimType, readers, tags, userMetadata, encryptionCipher); super(name, size, claimType, readers, tags, userMetadata);
this.encryptionCipher = encryptionCipher;
this.avoid = ImmutableSet.copyOf(checkNotNull(avoid, "avoid")); this.avoid = ImmutableSet.copyOf(checkNotNull(avoid, "avoid"));
} }
@ -122,4 +126,51 @@ public class CreateDriveRequest extends BaseDrive {
return avoid; return avoid;
} }
/**
*
* @return either 'none' or 'aes-xts-plain' (the default)
*/
@Nullable
public String getEncryptionCipher() {
return encryptionCipher;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((avoid == null) ? 0 : avoid.hashCode());
result = prime * result + ((encryptionCipher == null) ? 0 : encryptionCipher.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
CreateDriveRequest other = (CreateDriveRequest) obj;
if (avoid == null) {
if (other.avoid != null)
return false;
} else if (!avoid.equals(other.avoid))
return false;
if (encryptionCipher == null) {
if (other.encryptionCipher != null)
return false;
} else if (!encryptionCipher.equals(other.encryptionCipher))
return false;
return true;
}
@Override
public String toString() {
return "[name=" + name + ", size=" + size + ", claimType=" + claimType + ", readers=" + readers + ", tags="
+ tags + ", userMetadata=" + userMetadata + ", avoid=" + avoid + ", encryptionCipher=" + encryptionCipher
+ "]";
}
} }

View File

@ -42,6 +42,7 @@ public class DriveInfo extends BaseDrive {
private Boolean autoexpanding; private Boolean autoexpanding;
private Integer bits; private Integer bits;
private Set<String> claimed = ImmutableSet.of(); private Set<String> claimed = ImmutableSet.of();
private String encryptionCipher;
private String description; private String description;
private String uuid; private String uuid;
private Set<String> driveType = ImmutableSet.of(); private Set<String> driveType = ImmutableSet.of();
@ -166,12 +167,9 @@ public class DriveInfo extends BaseDrive {
return Builder.class.cast(super.claimType(claimType)); return Builder.class.cast(super.claimType(claimType));
} }
/**
* {@inheritDoc}
*/
@Override
public Builder encryptionCipher(String encryptionCipher) { public Builder encryptionCipher(String encryptionCipher) {
return Builder.class.cast(super.encryptionCipher(encryptionCipher)); this.encryptionCipher = encryptionCipher;
return this;
} }
/** /**
@ -239,6 +237,8 @@ public class DriveInfo extends BaseDrive {
@Nullable @Nullable
private final Set<String> driveType; private final Set<String> driveType;
@Nullable @Nullable
private final String encryptionCipher;
@Nullable
private final String encryptionKey; private final String encryptionKey;
@Nullable @Nullable
private final Boolean free; private final Boolean free;
@ -268,7 +268,7 @@ public class DriveInfo extends BaseDrive {
String encryptionKey, Boolean free, String imaging, String installNotes, String name, String os, String encryptionKey, Boolean free, String imaging, String installNotes, String name, String os,
Iterable<String> readers, Long readBytes, Long readRequests, Long size, Iterable<String> tags, DriveType type, Iterable<String> readers, Long readBytes, Long readRequests, Long size, Iterable<String> tags, DriveType type,
URI url, Iterable<String> use, Map<String, String> userMetadata, Long writeBytes, Long writeRequests) { URI url, Iterable<String> use, Map<String, String> userMetadata, Long writeBytes, Long writeRequests) {
super(name, size, claimType, readers, tags, userMetadata, encryptionCipher); super(name, size, claimType, readers, tags, userMetadata);
this.status = status; this.status = status;
this.user = user; this.user = user;
this.autoexpanding = autoexpanding; this.autoexpanding = autoexpanding;
@ -277,6 +277,7 @@ public class DriveInfo extends BaseDrive {
this.description = description; this.description = description;
this.uuid = drive; this.uuid = drive;
this.driveType = ImmutableSet.copyOf(driveType); this.driveType = ImmutableSet.copyOf(driveType);
this.encryptionCipher = encryptionCipher;
this.encryptionKey = encryptionKey; this.encryptionKey = encryptionKey;
this.free = free; this.free = free;
this.imaging = imaging; this.imaging = imaging;
@ -343,6 +344,15 @@ public class DriveInfo extends BaseDrive {
return driveType; return driveType;
} }
/**
*
* @return either 'none' or 'aes-xts-plain' (the default)
*/
@Nullable
public String getEncryptionCipher() {
return encryptionCipher;
}
// TODO // TODO
public String getEncryptionKey() { public String getEncryptionKey() {
return encryptionKey; return encryptionKey;

View File

@ -43,19 +43,12 @@ public class BaseDrive {
protected Set<String> readers = ImmutableSet.of(); protected Set<String> readers = ImmutableSet.of();
protected Set<String> tags = ImmutableSet.of(); protected Set<String> tags = ImmutableSet.of();
protected Map<String, String> userMetadata = ImmutableMap.of(); protected Map<String, String> userMetadata = ImmutableMap.of();
@Nullable
protected String encryptionCipher;
public Builder claimType(ClaimType claimType) { public Builder claimType(ClaimType claimType) {
this.claimType = claimType; this.claimType = claimType;
return this; return this;
} }
public Builder encryptionCipher(String encryptionCipher) {
this.encryptionCipher = encryptionCipher;
return this;
}
public Builder name(String name) { public Builder name(String name) {
this.name = name; this.name = name;
return this; return this;
@ -82,7 +75,7 @@ public class BaseDrive {
} }
public BaseDrive build() { public BaseDrive build() {
return new BaseDrive(name, size, claimType, readers, tags, userMetadata, encryptionCipher); return new BaseDrive(name, size, claimType, readers, tags, userMetadata);
} }
} }
@ -92,18 +85,15 @@ public class BaseDrive {
protected final Set<String> readers; protected final Set<String> readers;
protected final Set<String> tags; protected final Set<String> tags;
protected final Map<String, String> userMetadata; protected final Map<String, String> userMetadata;
@Nullable
protected final String encryptionCipher;
public BaseDrive(String name, long size, @Nullable ClaimType claimType, Iterable<String> readers, public BaseDrive(String name, long size, @Nullable ClaimType claimType, Iterable<String> readers,
Iterable<String> tags, Map<String, String> userMetadata, @Nullable String encryptionCipher) { Iterable<String> tags, Map<String, String> userMetadata) {
this.name = checkNotNull(name, "name"); this.name = checkNotNull(name, "name");
this.size = size; this.size = size;
this.claimType = checkNotNull(claimType, "set claimType to exclusive, not null"); this.claimType = checkNotNull(claimType, "set claimType to exclusive, not null");
this.readers = ImmutableSet.copyOf(checkNotNull(readers, "readers")); this.readers = ImmutableSet.copyOf(checkNotNull(readers, "readers"));
this.tags = ImmutableSet.copyOf(checkNotNull(tags, "tags")); this.tags = ImmutableSet.copyOf(checkNotNull(tags, "tags"));
this.userMetadata = ImmutableMap.copyOf(checkNotNull(userMetadata, "userMetadata")); this.userMetadata = ImmutableMap.copyOf(checkNotNull(userMetadata, "userMetadata"));
this.encryptionCipher = encryptionCipher;
} }
/** /**
@ -116,15 +106,6 @@ public class BaseDrive {
return claimType; return claimType;
} }
/**
*
* @return either 'none' or 'aes-xts-plain' (the default)
*/
@Nullable
public String getEncryptionCipher() {
return encryptionCipher;
}
/** /**
* *
* @return Drive name * @return Drive name
@ -171,7 +152,6 @@ public class BaseDrive {
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + ((claimType == null) ? 0 : claimType.hashCode()); result = prime * result + ((claimType == null) ? 0 : claimType.hashCode());
result = prime * result + ((encryptionCipher == null) ? 0 : encryptionCipher.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((readers == null) ? 0 : readers.hashCode()); result = prime * result + ((readers == null) ? 0 : readers.hashCode());
result = prime * result + (int) (size ^ (size >>> 32)); result = prime * result + (int) (size ^ (size >>> 32));
@ -191,11 +171,6 @@ public class BaseDrive {
BaseDrive other = (BaseDrive) obj; BaseDrive other = (BaseDrive) obj;
if (claimType != other.claimType) if (claimType != other.claimType)
return false; return false;
if (encryptionCipher == null) {
if (other.encryptionCipher != null)
return false;
} else if (!encryptionCipher.equals(other.encryptionCipher))
return false;
if (name == null) { if (name == null) {
if (other.name != null) if (other.name != null)
return false; return false;
@ -224,7 +199,7 @@ public class BaseDrive {
@Override @Override
public String toString() { public String toString() {
return "[name=" + name + ", size=" + size + ", claimType=" + claimType + ", readers=" + readers + ", tags=" return "[name=" + name + ", size=" + size + ", claimType=" + claimType + ", readers=" + readers + ", tags="
+ tags + ", userMetadata=" + userMetadata + ", encryptionCipher=" + encryptionCipher + "]"; + tags + ", userMetadata=" + userMetadata + "]";
} }
} }

View File

@ -53,8 +53,6 @@ public class BaseDriveToMap implements Function<BaseDrive, Map<String, String>>
builder.put("tags", Joiner.on(' ').join(from.getTags())); builder.put("tags", Joiner.on(' ').join(from.getTags()));
for (Entry<String, String> entry : from.getUserMetadata().entrySet()) for (Entry<String, String> entry : from.getUserMetadata().entrySet())
builder.put("user:" + entry.getKey(), entry.getValue()); builder.put("user:" + entry.getKey(), entry.getValue());
if (from.getEncryptionCipher() != null)
builder.put("encryption:cipher", from.getEncryptionCipher());
return builder.build(); return builder.build();
} }
} }

View File

@ -49,6 +49,8 @@ public class CreateDriveRequestToMap implements Function<CreateDriveRequest, Map
builder.putAll(baseDriveToMap.apply(from)); builder.putAll(baseDriveToMap.apply(from));
if (from.getAvoid().size() != 0) if (from.getAvoid().size() != 0)
builder.put("avoid", Joiner.on(' ').join(from.getAvoid())); builder.put("avoid", Joiner.on(' ').join(from.getAvoid()));
if (from.getEncryptionCipher() != null)
builder.put("encryption:cipher", from.getEncryptionCipher());
return builder.build(); return builder.build();
} }
} }

View File

@ -51,13 +51,13 @@ public class BaseDriveToMapTest {
.claimType(ClaimType.SHARED)// .claimType(ClaimType.SHARED)//
.readers(ImmutableSet.of("ffffffff-ffff-ffff-ffff-ffffffffffff"))// .readers(ImmutableSet.of("ffffffff-ffff-ffff-ffff-ffffffffffff"))//
.tags(ImmutableSet.of("tag1", "tag2")).userMetadata(ImmutableMap.of("foo", "bar", "baz", "raz"))// .tags(ImmutableSet.of("tag1", "tag2")).userMetadata(ImmutableMap.of("foo", "bar", "baz", "raz"))//
.encryptionCipher("aes-xts-plain").build(); .build();
assertEquals( assertEquals(
BASEDRIVE_TO_MAP.apply(one), BASEDRIVE_TO_MAP.apply(one),
ImmutableMap.builder().put("name", "Ubuntu 10.10 Server Edition Linux 64bit Preinstalled System") ImmutableMap.builder().put("name", "Ubuntu 10.10 Server Edition Linux 64bit Preinstalled System")
.put("size", "8589934592").put("claim:type", "shared") .put("size", "8589934592").put("claim:type", "shared")
.put("readers", "ffffffff-ffff-ffff-ffff-ffffffffffff").put("tags", "tag1 tag2") .put("readers", "ffffffff-ffff-ffff-ffff-ffffffffffff").put("tags", "tag1 tag2")
.put("user:foo", "bar").put("user:baz", "raz").put("encryption:cipher", "aes-xts-plain").build() .put("user:foo", "bar").put("user:baz", "raz").build()
); );

View File

@ -5,5 +5,5 @@ readers ffffffff-ffff-ffff-ffff-ffffffffffff
tags tag1 tag2 tags tag1 tag2
user:foo bar user:foo bar
user:baz raz user:baz raz
encryption:cipher aes-xts-plain avoid avoid1
avoid avoid1 encryption:cipher aes-xts-plain