mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-18 20:57:56 +00:00
Add 'manifest-id' parameter to /restful/rhizome/insert
This commit is contained in:
parent
da22816784
commit
ccf4824605
4
httpd.h
4
httpd.h
@ -111,6 +111,7 @@ typedef struct httpd_request
|
||||
// Which parts have already been received
|
||||
bool_t received_author;
|
||||
bool_t received_secret;
|
||||
bool_t received_bundleid;
|
||||
bool_t received_manifest;
|
||||
bool_t received_payload;
|
||||
// For storing the "bundle-author" hex SID as we receive it
|
||||
@ -121,6 +122,9 @@ typedef struct httpd_request
|
||||
char secret_text[RHIZOME_BUNDLE_SECRET_MAX_STRLEN];
|
||||
size_t secret_text_len;
|
||||
rhizome_bk_t bundle_secret;
|
||||
// For storing the "bundle-id" hex as we receive it
|
||||
char bid_text[RHIZOME_BUNDLE_ID_STRLEN];
|
||||
size_t bid_text_len;
|
||||
// The "force-new" parameter
|
||||
char force_new_text[5]; // enough for "false"
|
||||
size_t force_new_text_len;
|
||||
|
@ -341,6 +341,7 @@ int restful_rhizome_insert(httpd_request *r, const char *remainder)
|
||||
assert(r->u.insert.current_part == NULL);
|
||||
assert(!r->u.insert.received_author);
|
||||
assert(!r->u.insert.received_secret);
|
||||
assert(!r->u.insert.received_bundleid);
|
||||
assert(!r->u.insert.received_manifest);
|
||||
assert(!r->u.insert.received_payload);
|
||||
bzero(&r->u.insert.write, sizeof r->u.insert.write);
|
||||
@ -363,6 +364,7 @@ int restful_rhizome_append(httpd_request *r, const char *remainder)
|
||||
|
||||
static char PART_MANIFEST[] = "manifest";
|
||||
static char PART_PAYLOAD[] = "payload";
|
||||
static char PART_BUNDLEID[] = "bundle-id";
|
||||
static char PART_AUTHOR[] = "bundle-author";
|
||||
static char PART_SECRET[] = "bundle-secret";
|
||||
|
||||
@ -403,7 +405,7 @@ static int insert_make_manifest(httpd_request *r)
|
||||
rhizome_manifest *mout = NULL;
|
||||
char message[150];
|
||||
enum rhizome_add_file_result result = rhizome_manifest_add_file(r->u.insert.appending, r->manifest, &mout,
|
||||
NULL,
|
||||
r->u.insert.received_bundleid ? &r->bid: NULL,
|
||||
r->u.insert.received_secret ? &r->u.insert.bundle_secret : NULL,
|
||||
r->u.insert.received_author ? &r->u.insert.author: NULL,
|
||||
NULL, 0, NULL, strbuf_local(message, sizeof message));
|
||||
@ -458,6 +460,12 @@ static int insert_mime_part_header(struct http_request *hr, const struct mime_pa
|
||||
r->u.insert.current_part = PART_SECRET;
|
||||
assert(r->u.insert.secret_text_len == 0);
|
||||
}
|
||||
else if (strcmp(h->content_disposition.name, PART_BUNDLEID) == 0) {
|
||||
if (r->u.insert.received_bundleid)
|
||||
return http_response_form_part(r, "Duplicate", PART_BUNDLEID, NULL, 0);
|
||||
r->u.insert.current_part = PART_BUNDLEID;
|
||||
assert(r->u.insert.bid_text_len == 0);
|
||||
}
|
||||
else if (strcmp(h->content_disposition.name, PART_MANIFEST) == 0) {
|
||||
// Reject a request if it has a repeated manifest part.
|
||||
if (r->u.insert.received_manifest)
|
||||
@ -534,6 +542,13 @@ static int insert_mime_part_body(struct http_request *hr, char *buf, size_t len)
|
||||
&r->u.insert.secret_text_len,
|
||||
buf, len);
|
||||
}
|
||||
else if (r->u.insert.current_part == PART_BUNDLEID) {
|
||||
accumulate_text(r, PART_BUNDLEID,
|
||||
r->u.insert.bid_text,
|
||||
sizeof r->u.insert.bid_text,
|
||||
&r->u.insert.bid_text_len,
|
||||
buf, len);
|
||||
}
|
||||
else if (r->u.insert.current_part == PART_MANIFEST) {
|
||||
form_buf_malloc_accumulate(r, PART_MANIFEST, &r->u.insert.manifest, buf, len);
|
||||
}
|
||||
@ -574,6 +589,13 @@ static int insert_mime_part_end(struct http_request *hr)
|
||||
if (config.debug.rhizome)
|
||||
DEBUGF("received %s = %s", PART_SECRET, alloca_tohex_rhizome_bk_t(r->u.insert.bundle_secret));
|
||||
}
|
||||
else if (r->u.insert.current_part == PART_BUNDLEID) {
|
||||
if (strn_to_rhizome_bid_t(&r->bid, r->u.insert.bid_text, r->u.insert.bid_text_len) == -1)
|
||||
return http_response_form_part(r, "Invalid", PART_BUNDLEID, r->u.insert.secret_text, r->u.insert.secret_text_len);
|
||||
r->u.insert.received_bundleid = 1;
|
||||
if (config.debug.rhizome)
|
||||
DEBUGF("received %s = %s", PART_BUNDLEID, alloca_tohex_rhizome_bid_t(r->bid));
|
||||
}
|
||||
else if (r->u.insert.current_part == PART_MANIFEST) {
|
||||
r->u.insert.received_manifest = 1;
|
||||
if (config.debug.rhizome)
|
||||
|
Loading…
Reference in New Issue
Block a user