1
- import archttp ;
1
+ import handy_httpd ;
2
2
import std.algorithm.searching ;
3
3
import std.array ;
4
4
import std.base64 ;
@@ -7,10 +7,10 @@ import std.path;
7
7
import std.stdio ;
8
8
import provision;
9
9
10
- void main (string [] args) {
11
- auto app = new Archttp;
12
- ADI * adi;
10
+ __gshared static ADI * adi;
11
+ __gshared static ulong rinfo;
13
12
13
+ void main (string [] args) {
14
14
if (args.canFind(" --remember-machine" )) {
15
15
adi = new ADI (expandTilde(" ~/.adi" ));
16
16
} else {
@@ -22,7 +22,6 @@ void main(string[] args) {
22
22
adi = new ADI (expandTilde(" ~/.adi" ), cast (char []) id.toHexString().toLower());
23
23
}
24
24
25
- ulong rinfo;
26
25
if (! adi.isMachineProvisioned()) {
27
26
stderr.write(" Machine requires provisioning... " );
28
27
adi.provisionDevice(rinfo);
@@ -31,36 +30,37 @@ void main(string[] args) {
31
30
adi.getRoutingInformation(rinfo);
32
31
}
33
32
34
- app.get (" /reprovision" , (req, res) {
35
- writefln! " [%s >>] GET /reprovision" (req.ip);
36
- adi.provisionDevice(rinfo);
37
- writefln! " [>> %s] 200 OK" (req.ip);
38
- res.code(HttpStatusCode.OK );
39
- });
40
-
41
- app.get (" /" , (req, res) {
42
- try {
43
- import std.datetime.systime ;
44
- import std.datetime.timezone ;
45
- import core.time ;
46
- auto time = Clock .currTime();
33
+ auto serverConfig = ServerConfig.defaultValues;
34
+ serverConfig.port = 6969 ;
35
+ auto s = new HttpServer(simpleHandler((ref req, ref res) {
36
+ if (req.url == " /reprovision" ) {
37
+ writeln(" [<<] GET /reprovision" );
38
+ adi.provisionDevice(rinfo);
39
+ writeln(" [>>] 200 OK" );
40
+ res.setStatus(200 );
41
+ } else {
42
+ try {
43
+ import std.datetime.systime ;
44
+ import std.datetime.timezone ;
45
+ import core.time ;
46
+ auto time = Clock .currTime();
47
47
48
- writefln! " [%s >> ] GET /" (req.ip );
48
+ writefln( " [<< ] GET /" );
49
49
50
- ubyte [] mid;
51
- ubyte [] otp;
52
- try {
53
- adi.getOneTimePassword(mid, otp);
54
- } catch {
55
- writeln(" Reprovision needed." );
56
- adi.provisionDevice(rinfo);
57
- adi.getOneTimePassword(mid, otp);
58
- }
50
+ ubyte [] mid;
51
+ ubyte [] otp;
52
+ try {
53
+ adi.getOneTimePassword(mid, otp);
54
+ } catch (Throwable) {
55
+ writeln(" Reprovision needed." );
56
+ adi.provisionDevice(rinfo);
57
+ adi.getOneTimePassword(mid, otp);
58
+ }
59
59
60
- import std.conv ;
61
- import std.json ;
60
+ import std.conv ;
61
+ import std.json ;
62
62
63
- JSONValue response = [
63
+ JSONValue response = [
64
64
" X-Apple-I-Client-Time" : time.toISOExtString.split(' .' )[0 ] ~ " Z" ,
65
65
" X-Apple-I-MD" : Base64.encode(otp),
66
66
" X-Apple-I-MD-M" : Base64.encode(mid),
@@ -71,18 +71,36 @@ void main(string[] args) {
71
71
" X-Apple-I-TimeZone" : time.timezone.dstName,
72
72
" X-Apple-Locale" : " en_US" ,
73
73
" X-Mme-Device-Id" : adi.deviceId,
74
- ];
74
+ ];
75
75
76
- writefln! " [>> %s ] 200 OK %s" (req.ip, response);
76
+ writefln! " [>>] 200 OK %s" (response);
77
77
78
- res.code(HttpStatusCode.OK );
79
- res.send(response);
80
- } catch (Throwable t) {
81
- res.code(HttpStatusCode.INTERNAL_SERVER_ERROR );
82
- res.send(t.toString());
78
+ res.setStatus(200 );
79
+ res.writeBody(to! string (response));
80
+ } catch (Throwable t) {
81
+ res.setStatus(500 );
82
+ res.writeBody(t.toString());
83
+ }
83
84
}
84
- });
85
+ }), serverConfig);
86
+ s.start();
87
+
88
+ /+
89
+
90
+
91
+
92
+ with (vib) {
93
+ Get("/reprovision", (req, res) => "Hello World!");
94
+
95
+ Get("", (req, res) {
96
+ });
97
+ }
98
+
99
+ // listenHTTP is called automatically
100
+ runApplication();
85
101
86
- app.listen(6969 );
102
+ scope (exit)
103
+ vib.Stop();
104
+ // +/
87
105
}
88
106
0 commit comments