Add main.d
This commit is contained in:
commit
d0a1e21776
57
main.d
Normal file
57
main.d
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import std.stdio, std.json, std.getopt;
|
||||||
|
import std.net.curl, std.conv: to;
|
||||||
|
import core.stdc.stdlib: exit;
|
||||||
|
|
||||||
|
void main(string[] args) {
|
||||||
|
string serverName;
|
||||||
|
try getopt(args, config.required, "server|s", "Matrix server domain", &serverName);
|
||||||
|
catch (GetOptException e) {
|
||||||
|
writeln(e.msg);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK:
|
||||||
|
serverName = "https://"~serverName;
|
||||||
|
auto resp = Request(serverName~"/_matrix/federation/v1/version");
|
||||||
|
|
||||||
|
if (resp.status == 200) {
|
||||||
|
JSONValue srv = parseJSON(resp.content)["server"];
|
||||||
|
writefln("%s: %s", srv["name"].str(), srv["version"].str());
|
||||||
|
} else {
|
||||||
|
resp = Request(serverName~"/.well-known/matrix/server");
|
||||||
|
if (resp.status != 200) {
|
||||||
|
writeln("Coudn't find matrix server on this domain.");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
serverName = parseJSON(resp.content)["m.server"].str();
|
||||||
|
goto CHECK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Request {
|
||||||
|
this(string url) {
|
||||||
|
this.perform(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
string content;
|
||||||
|
string[string] headers;
|
||||||
|
ushort status;
|
||||||
|
|
||||||
|
void perform(string url) {
|
||||||
|
auto request = HTTP(url);
|
||||||
|
try {
|
||||||
|
request.onReceive = (ubyte[] data) {
|
||||||
|
foreach (s; data)
|
||||||
|
Request.content ~= to!char(s);
|
||||||
|
return data.length;
|
||||||
|
};
|
||||||
|
request.perform();
|
||||||
|
Request.headers = request.responseHeaders();
|
||||||
|
Request.status = request.statusLine().code;
|
||||||
|
} catch (CurlException e) {
|
||||||
|
writeln(e.msg);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user