Journalmanager: Add api for the members endpoint.

This API controls the members of a journal, that is, access control.
pull/14/head
Tom Hacohen 7 years ago
parent 11e37dbd1e
commit efe832ddb4

@ -26,6 +26,8 @@ import static com.etesync.syncadapter.journalmanager.Crypto.toHex;
public class JournalManager extends BaseManager {
final static private Type journalType = new TypeToken<List<Journal>>() {
}.getType();
final static private Type memberType = new TypeToken<List<Member>>() {
}.getType();
public JournalManager(OkHttpClient httpClient, HttpUrl remote) {
@ -90,6 +92,43 @@ public class JournalManager extends BaseManager {
newCall(request);
}
private HttpUrl getMemberRemote(Journal journal) {
return this.remote.resolve(journal.getUid() + "/members/");
}
public List<Member> listMembers(Journal journal) throws Exceptions.HttpException, Exceptions.IntegrityException, Exceptions.GenericCryptoException {
Request request = new Request.Builder()
.get()
.url(getMemberRemote(journal))
.build();
Response response = newCall(request);
ResponseBody body = response.body();
return GsonHelper.gson.fromJson(body.charStream(), memberType);
}
public void deleteMember(Journal journal, Member member) throws Exceptions.HttpException {
RequestBody body = RequestBody.create(JSON, member.toJson());
Request request = new Request.Builder()
.delete(body)
.url(getMemberRemote(journal))
.build();
newCall(request);
}
public void addMember(Journal journal, Member member) throws Exceptions.HttpException {
RequestBody body = RequestBody.create(JSON, member.toJson());
Request request = new Request.Builder()
.post(body)
.url(getMemberRemote(journal))
.build();
newCall(request);
}
public static class Journal extends Base {
@Getter
private int version = -1;
@ -140,4 +179,24 @@ public class JournalManager extends BaseManager {
return ret;
}
}
public static class Member {
@Getter
private String user;
@Getter
private byte[] key;
@SuppressWarnings("unused")
private Member() {
}
public Member(String user, byte[] encryptedKey) {
this.user = user;
this.key = encryptedKey;
}
String toJson() {
return GsonHelper.gson.toJson(this, getClass());
}
}
}

@ -31,7 +31,6 @@ import okio.BufferedSink;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@ -232,4 +231,29 @@ public class ServiceTest {
userInfo = manager.get(cryptoManager, Helpers.USER);
assertNull(userInfo);
}
@Test
public void testJournalMember() throws IOException, Exceptions.HttpException, Exceptions.GenericCryptoException, Exceptions.IntegrityException {
JournalManager journalManager = new JournalManager(httpClient, remote);
CollectionInfo info = CollectionInfo.defaultForServiceType(CollectionInfo.Type.ADDRESS_BOOK);
info.uid = JournalManager.Journal.genUid();
info.displayName = "Test";
Crypto.CryptoManager crypto = new Crypto.CryptoManager(info.version, Helpers.keyBase64, info.uid);
JournalManager.Journal journal = new JournalManager.Journal(crypto, info.toJson(), info.uid);
journalManager.putJournal(journal);
assertEquals(journalManager.listMembers(journal).size(), 0);
// Test inviting ourselves
JournalManager.Member member = new JournalManager.Member(Helpers.USER, "test".getBytes(Charsets.UTF_8));
journalManager.addMember(journal, member);
assertEquals(journalManager.listMembers(journal).size(), 1);
// Uninviting ourselves
journalManager.deleteMember(journal, member);
assertEquals(journalManager.listMembers(journal).size(), 0);
}
}

Loading…
Cancel
Save