mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-24 07:16:43 +00:00
Rhizome Java API: insert anonymous bundle
This commit is contained in:
parent
04b2a20e54
commit
a87133d4d3
@ -34,6 +34,7 @@ import java.net.HttpURLConnection;
|
||||
import org.servalproject.codec.Base64;
|
||||
import org.servalproject.servaldna.SubscriberId;
|
||||
import org.servalproject.servaldna.BundleId;
|
||||
import org.servalproject.servaldna.BundleSecret;
|
||||
import org.servalproject.servaldna.ServalDCommand;
|
||||
import org.servalproject.servaldna.ServalDInterfaceException;
|
||||
import org.servalproject.servaldna.rhizome.RhizomeCommon;
|
||||
@ -95,7 +96,7 @@ public class ServalDClient implements ServalDHttpConnectionFactory
|
||||
return RhizomeCommon.rhizomePayload(this, bid);
|
||||
}
|
||||
|
||||
public RhizomeInsertBundle rhizomeInsert(SubscriberId author, RhizomeIncompleteManifest manifest)
|
||||
public RhizomeInsertBundle rhizomeInsert(SubscriberId author, RhizomeIncompleteManifest manifest, BundleSecret secret)
|
||||
throws ServalDInterfaceException,
|
||||
IOException,
|
||||
RhizomeInvalidManifestException,
|
||||
@ -104,10 +105,10 @@ public class ServalDClient implements ServalDHttpConnectionFactory
|
||||
RhizomeReadOnlyException,
|
||||
RhizomeEncryptionException
|
||||
{
|
||||
return RhizomeCommon.rhizomeInsert(this, author, manifest);
|
||||
return RhizomeCommon.rhizomeInsert(this, author, manifest, secret);
|
||||
}
|
||||
|
||||
public RhizomeInsertBundle rhizomeInsert(SubscriberId author, RhizomeIncompleteManifest manifest, InputStream payloadStream, String fileName)
|
||||
public RhizomeInsertBundle rhizomeInsert(SubscriberId author, RhizomeIncompleteManifest manifest, BundleSecret secret, InputStream payloadStream, String fileName)
|
||||
throws ServalDInterfaceException,
|
||||
IOException,
|
||||
RhizomeInvalidManifestException,
|
||||
@ -116,7 +117,7 @@ public class ServalDClient implements ServalDHttpConnectionFactory
|
||||
RhizomeReadOnlyException,
|
||||
RhizomeEncryptionException
|
||||
{
|
||||
return RhizomeCommon.rhizomeInsert(this, author, manifest, payloadStream, fileName);
|
||||
return RhizomeCommon.rhizomeInsert(this, author, manifest, secret, payloadStream, fileName);
|
||||
}
|
||||
|
||||
public MeshMSConversationList meshmsListConversations(SubscriberId sid) throws ServalDInterfaceException, IOException, MeshMSException
|
||||
|
@ -337,7 +337,8 @@ public class RhizomeCommon
|
||||
|
||||
public static RhizomeInsertBundle rhizomeInsert(ServalDHttpConnectionFactory connector,
|
||||
SubscriberId author,
|
||||
RhizomeIncompleteManifest manifest)
|
||||
RhizomeIncompleteManifest manifest,
|
||||
BundleSecret secret)
|
||||
throws ServalDInterfaceException,
|
||||
IOException,
|
||||
RhizomeInvalidManifestException,
|
||||
@ -346,12 +347,13 @@ public class RhizomeCommon
|
||||
RhizomeReadOnlyException,
|
||||
RhizomeEncryptionException
|
||||
{
|
||||
return rhizomeInsert(connector, author, manifest, null, null);
|
||||
return rhizomeInsert(connector, author, manifest, secret, null, null);
|
||||
}
|
||||
|
||||
public static RhizomeInsertBundle rhizomeInsert(ServalDHttpConnectionFactory connector,
|
||||
SubscriberId author,
|
||||
RhizomeIncompleteManifest manifest,
|
||||
BundleSecret secret,
|
||||
InputStream payloadStream,
|
||||
String fileName)
|
||||
throws ServalDInterfaceException,
|
||||
@ -378,6 +380,14 @@ public class RhizomeCommon
|
||||
wr.print("\r\n");
|
||||
wr.print(author.toHex());
|
||||
}
|
||||
if (secret != null) {
|
||||
wr.print("\r\n--" + boundary + "\r\n");
|
||||
wr.print("Content-Disposition: form-data; name=\"bundle-secret\"\r\n");
|
||||
wr.print("Content-Type: rhizome/bundle-secret\r\n");
|
||||
wr.print("Content-Transfer-Encoding: hex\r\n");
|
||||
wr.print("\r\n");
|
||||
wr.print(secret.toHex());
|
||||
}
|
||||
wr.print("\r\n--" + boundary + "\r\n");
|
||||
wr.print("Content-Disposition: form-data; name=\"manifest\"\r\n");
|
||||
wr.print("Content-Type: rhizome/manifest; format=\"text+binarysig\"\r\n");
|
||||
|
@ -30,6 +30,7 @@ import org.servalproject.servaldna.ServalDClient;
|
||||
import org.servalproject.servaldna.ServalDInterfaceException;
|
||||
import org.servalproject.servaldna.ServerControl;
|
||||
import org.servalproject.servaldna.BundleId;
|
||||
import org.servalproject.servaldna.BundleSecret;
|
||||
import org.servalproject.servaldna.SubscriberId;
|
||||
import org.servalproject.servaldna.rhizome.RhizomeManifest;
|
||||
import org.servalproject.servaldna.rhizome.RhizomeIncompleteManifest;
|
||||
@ -183,20 +184,31 @@ public class Rhizome {
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
static void rhizome_insert(String author, String manifestpath, String payloadPath, String manifestoutpath, String payloadName)
|
||||
throws ServalDInterfaceException, IOException, InterruptedException, SubscriberId.InvalidHexException
|
||||
static void rhizome_insert( String author,
|
||||
String manifestPath,
|
||||
String payloadPath,
|
||||
String manifestoutpath,
|
||||
String payloadName,
|
||||
String secretHex)
|
||||
throws ServalDInterfaceException,
|
||||
IOException,
|
||||
InterruptedException,
|
||||
SubscriberId.InvalidHexException
|
||||
{
|
||||
ServalDClient client = new ServerControl().getRestfulClient();
|
||||
try {
|
||||
RhizomeIncompleteManifest manifest = RhizomeIncompleteManifest.fromTextFormat(new FileInputStream(manifestpath));
|
||||
RhizomeIncompleteManifest manifest = new RhizomeIncompleteManifest();
|
||||
if (manifestPath != null && manifestPath.length() != 0)
|
||||
manifest.parseTextFormat(new FileInputStream(manifestPath));
|
||||
RhizomeInsertBundle bundle;
|
||||
SubscriberId authorSid = author == null || author.length() == 0 ? null : new SubscriberId(author);
|
||||
BundleSecret secret = secretHex == null || secretHex.length() == 0 ? null : new BundleSecret(secretHex);
|
||||
if (payloadName == null || payloadName.length() == 0)
|
||||
payloadName = new File(payloadPath).getName();
|
||||
if (payloadPath == null || payloadPath.length() == 0)
|
||||
bundle = client.rhizomeInsert(authorSid, manifest);
|
||||
bundle = client.rhizomeInsert(authorSid, manifest, secret);
|
||||
else
|
||||
bundle = client.rhizomeInsert(authorSid, manifest, new FileInputStream(payloadPath), payloadName);
|
||||
bundle = client.rhizomeInsert(authorSid, manifest, secret, new FileInputStream(payloadPath), payloadName);
|
||||
System.out.println(
|
||||
"_status=" + bundle.status + "\n" +
|
||||
(bundle.rowId == null ? "" : "_rowId=" + bundle.rowId + "\n") +
|
||||
@ -239,7 +251,8 @@ public class Rhizome {
|
||||
args[2], // manifest path
|
||||
args.length > 3 ? args[3] : null, // payload path
|
||||
args.length > 4 ? args[4] : null, // manifest out path
|
||||
args.length > 5 ? args[5] : null // payload name
|
||||
args.length > 5 ? args[5] : null, // payload name
|
||||
args.length > 6 ? args[6] : null // bundle secret
|
||||
);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@ -351,8 +351,7 @@ test_RhizomeInsert() {
|
||||
--author=${author[4]} file4
|
||||
for n in 1 2 3 4; do
|
||||
$SED -e '/^version=/d;/^date=/d;/^filehash=/d;/^filesize=/d;/^[^a-zA-Z]/,$d' xfile$n.manifest >nmanifest$n
|
||||
assertGrep nmanifest$n '^id='
|
||||
tfw_cat -v nmanifest$n
|
||||
assert_manifest_fields nmanifest$n id !version !date !filehash !filesize
|
||||
executeJavaOk org.servalproject.test.Rhizome rhizome-insert '' nmanifest$n nfile$n nfile$n.manifest "nfile$n"
|
||||
tfw_cat --stdout --stderr -v nfile$n.manifest
|
||||
if [ -n "${author[$n]}" ]; then
|
||||
@ -369,4 +368,29 @@ test_RhizomeInsert() {
|
||||
done
|
||||
}
|
||||
|
||||
doc_RhizomeInsertAnon="Java API update anonymous Rhizome bundle"
|
||||
setup_RhizomeInsertAnon() {
|
||||
setup
|
||||
create_file file1 1001
|
||||
executeOk_servald rhizome add file '' file1 file1.manifest
|
||||
extract_stdout_manifestid BID
|
||||
extract_stdout_secret SECRET
|
||||
assert_manifest_fields file1.manifest id !BK
|
||||
$SED -e '/^version=/d;/^date=/d;/^filehash=/d;/^filesize=/d;/^[^a-zA-Z]/,$d' file1.manifest >file2.manifest
|
||||
assert_manifest_fields file2.manifest id !version !date !filehash !filesize
|
||||
create_file file2 1002
|
||||
}
|
||||
test_RhizomeInsertAnon() {
|
||||
executeJavaOk org.servalproject.test.Rhizome rhizome-insert '' file2.manifest file2 ifile2.manifest "file2" "$SECRET"
|
||||
tfw_cat --stdout --stderr -v ifile2.manifest
|
||||
assertStdoutGrep '^_status=NEW$'
|
||||
assertStdoutGrep "^id=$BID\$"
|
||||
assertStderrGrep --matches=1 "^bundle_status_code=NEW$CR\$"
|
||||
assertStderrGrep --matches=1 --ignore-case "^bundle_status_message=.*bundle new to store.*$CR\$"
|
||||
assertStderrGrep --matches=1 "^payload_status_code=NEW$CR\$"
|
||||
assertStderrGrep --matches=1 --ignore-case "^payload_status_message=.*payload new to store.*$CR\$"
|
||||
executeOk_servald rhizome list
|
||||
assert_rhizome_list --fromhere=0 --manifest=ifile2.manifest file2
|
||||
}
|
||||
|
||||
runTests "$@"
|
||||
|
Loading…
Reference in New Issue
Block a user