Add sender & recipient filters to rhizome restful api

This commit is contained in:
Jeremy Lakeman 2017-05-08 11:38:20 +09:30
parent a997fdf020
commit 6c4e7de574
2 changed files with 42 additions and 14 deletions

View File

@ -37,6 +37,8 @@ public class RhizomeBundleList extends AbstractJsonList<RhizomeListBundle, IOExc
private String sinceToken;
private String service;
private String name;
private SubscriberId sender;
private SubscriberId recipient;
public RhizomeBundleList(ServalDHttpConnectionFactory connector)
{
@ -49,6 +51,12 @@ public class RhizomeBundleList extends AbstractJsonList<RhizomeListBundle, IOExc
public void setNameFilter(String name){
this.name = name;
}
public void setSenderFilter(SubscriberId sender){
this.sender = sender;
}
public void setRecipientFilter(SubscriberId recipient){
this.recipient = recipient;
}
public RhizomeBundleList(ServalDHttpConnectionFactory connector, String since_token)
{
@ -72,24 +80,30 @@ public class RhizomeBundleList extends AbstractJsonList<RhizomeListBundle, IOExc
@Override
protected String getUrl() {
String url;
StringBuilder sb = new StringBuilder();
if (this.sinceToken == null)
url = "/restful/rhizome/bundlelist.json";
sb.append("/restful/rhizome/bundlelist.json");
else if(this.sinceToken.equals(""))
url = "/restful/rhizome/newsince/bundlelist.json";
sb.append("/restful/rhizome/newsince/bundlelist.json");
else
url = "/restful/rhizome/newsince/" + this.sinceToken + "/bundlelist.json";
String parms="";
if (service != null)
parms += "service="+service;
if (name!=null) {
if (!"".equals(parms))
parms+="&";
parms += "name=" + name;
sb.append("/restful/rhizome/newsince/").append(this.sinceToken).append("/bundlelist.json");
char parmDelim = '?';
if (service != null){
sb.append(parmDelim).append("service=").append(service);
parmDelim='&';
}
if (!"".equals(parms))
url+="?"+parms;
return url;
if (name!=null) {
sb.append(parmDelim).append("name=").append(name);
parmDelim='&';
}
if (sender!=null) {
sb.append(parmDelim).append("sender=").append(sender.toHex());
parmDelim='&';
}
if (recipient!=null)
sb.append(parmDelim).append("recipient=").append(recipient.toHex());
return sb.toString();
}
@Override

View File

@ -206,6 +206,20 @@ static int restful_open_cursor(httpd_request *r)
// TODO fail?
}
const char *sender = http_request_get_query_param(&r->http, "sender");
if (sender && *sender){
if (str_to_sid_t(&r->u.rhlist.cursor.sender, sender) != -1)
r->u.rhlist.cursor.is_sender_set = 1;
// TODO fail?
}
const char *recipient = http_request_get_query_param(&r->http, "recipient");
if (recipient && *recipient){
if (str_to_sid_t(&r->u.rhlist.cursor.recipient, recipient) != -1)
r->u.rhlist.cursor.is_recipient_set = 1;
// TODO fail?
}
int ret = rhizome_list_open(&r->u.rhlist.cursor);
if (ret == -1)
return http_request_rhizome_response(r, 500, "Failed to open list");