Initial WebFinger
- Add headers to PRequest
This commit is contained in:
51
source/webfinger.d
Normal file
51
source/webfinger.d
Normal file
@@ -0,0 +1,51 @@
|
||||
module webfinger;
|
||||
|
||||
import std.algorithm;
|
||||
import std.array;
|
||||
import std.format;
|
||||
import std.json;
|
||||
import std.typecons;
|
||||
|
||||
import requests;
|
||||
|
||||
import net.request_pool;
|
||||
import singletons;
|
||||
|
||||
enum AcceptedWebfingerContentType = "application/jrd+json, application/json";
|
||||
|
||||
private bool checkValidWebfingerResponse(Response rs) {
|
||||
|
||||
return AcceptedWebfingerContentType.canFind(rs.responseHeaders()["content-type"].split(";")[0]);
|
||||
}
|
||||
|
||||
PRequest buildRequest(string uri, string[string] params) {
|
||||
PRequest rq = PRequest();
|
||||
|
||||
rq.method = "GET";
|
||||
rq.url = format("http://%s/.well-known/webfinger", uri);
|
||||
rq.headers["Accept"] = AcceptedWebfingerContentType;
|
||||
|
||||
QueryParam[] p;
|
||||
|
||||
foreach (k, v; params)
|
||||
p ~= tuple!("key", "value")(k, v);
|
||||
|
||||
rq.params = p;
|
||||
|
||||
return rq;
|
||||
}
|
||||
|
||||
PRequest buildAcctRequest(string uri, string acct) {
|
||||
string[string] params = ["resource": format("acct:%s@%s", acct, uri)];
|
||||
|
||||
return buildRequest(uri, params);
|
||||
}
|
||||
|
||||
JSONValue requestAcct(string uri, string acct) {
|
||||
Response rs = RP.request(buildAcctRequest(uri, acct), true);
|
||||
|
||||
if (checkValidWebfingerResponse(rs) == false)
|
||||
throw new Exception("Invalid webfinger response");
|
||||
|
||||
return parseJSON(rs.responseBody().toString());
|
||||
}
|
||||
Reference in New Issue
Block a user