Differences From
Artifact [c8974a3f52]:
8 8 pol_sec: secmode.t
9 9 pol_reg: bool
10 10 pol_autoherald: bool
11 11 credmgd: bool
12 12 maxupsz: intptr
13 13 poolinitsz: intptr
14 14 instance: pstring
15 + domain: pstring
15 16 overlord: &srv
16 17 ui_cue_staff: pstring
17 18 ui_cue_founder: pstring
18 19 ui_hue: uint16
19 20 nranks: uint16
20 21 maxinvites: uint16
21 22 master: uint64
................................................................................
28 29 webmgr: lib.net.mg_mgr
29 30 webcon: &lib.net.mg_connection
30 31 cfg: cfgcache
31 32 id: rawstring
32 33 pool: lib.mem.pool
33 34 }
34 35
35 -terra cfgcache:free() -- :/
36 +terra cfgcache:free() -- :/ TODO replace with pool
36 37 self.secret:free()
37 38 self.instance:free()
39 + self.domain:free()
38 40 self.ui_cue_staff:free()
39 41 self.ui_cue_founder:free()
40 42 self.usrdef_pol_follow:free()
41 43 self.usrdef_pol_follow_req:free()
42 44 end
43 45
44 46 terra srv:post_enum_author_uid(uid: uint64, r: lib.store.range): lib.mem.vec(lib.mem.ptr(lib.store.post))
................................................................................
507 509
508 510 local route = {} -- these are defined in route.t, as they need access to renderers
509 511 terra route.dispatch_http :: {&convo, lib.mem.ptr(int8), lib.http.method.t} -> {}
510 512
511 513 local mimetypes = {
512 514 {'html', 'text/html'};
513 515 {'json', 'application/json'};
516 + {'json', 'application/ld+json'};
517 + {'json', 'application/activity+json'};
514 518 {'mkdown', 'text/markdown'};
515 519 {'text', 'text/plain'};
516 520 {'ansi', 'text/x-ansi'};
517 521 }
518 522
519 523 local mimevar = symbol(lib.mem.ref(int8))
520 524 local mimeneg = `lib.http.mime.none
................................................................................
529 533 in ret end
530 534 end
531 535
532 536 local handle = {
533 537 http = terra(con: &lib.net.mg_connection, event_kind: int, event: &opaque, userdata: &opaque)
534 538 var server = [&srv](userdata)
535 539 var mgpeer = getpeer(con)
536 - var peer = lib.store.inet { port = mgpeer.port; }
537 - if mgpeer.is_ip6 then peer.pv = 6 else peer.pv = 4 end
538 - if peer.pv == 6 then
539 - for i = 0, 16 do peer.v6[i] = mgpeer.ip6[i] end
540 - else -- v4
541 - @[&uint32](&peer.v4) = mgpeer.ip
542 - end
540 + -- var pbuf: int8[128]
541 +
543 542 -- the peer property is currently broken and there is precious
544 543 -- little i can do about this -- it always reports a peer v4 IP
545 - -- of 0.0.0.0, altho the port seems to come through correctly.
546 - -- for now i'm leaving it as is, but note that netmask restrictions
547 - -- WILL NOT WORK until upstream gets its shit together. FIXME
544 + -- of 0.0.0.0 for v6 connections, altho the port seems to come
545 + -- through correctly. -- for now i'm leaving it as is, but note
546 + -- that netmask restrictions WILL NOT WORK until upstream gets
547 + -- its shit together. FIXME
548 548
549 549 -- needs to check for an X-Forwarded-For header from nginx and
550 550 -- use that instead of the peer iff peer is ::1/127.1 FIXME
551 551 -- maybe also haproxy support?
552 552
553 553 switch event_kind do
554 554 case lib.net.MG_EV_HTTP_MSG then
555 + -- lib.net.mg_ntoa(&mgpeer,&pbuf[0],127)
556 + -- lib.dbg('got connection from client ',&pbuf[0])
557 + var peer = lib.store.inet { port = mgpeer.port; }
558 + if mgpeer.is_ip6 then peer.pv = 6 else peer.pv = 4 end
559 + if peer.pv == 6 then
560 + for i = 0, 16 do peer.v6[i] = mgpeer.ip6[i] end
561 + else -- v4
562 + @[&uint32](&peer.v4) = mgpeer.ip
563 + end
564 +
555 565 lib.dbg('routing HTTP request')
556 566 var msg = [&lib.net.mg_http_message](event)
557 567 var co = convo {
558 568 con = con, srv = server, msg = msg;
559 569 aid = 0, aid_issue = 0, who = nil;
560 570 reqtype = lib.http.mime.none;
561 571 peer = peer, live_last = 0;
................................................................................
1110 1120 str:free()
1111 1121 end
1112 1122 return default
1113 1123 end
1114 1124
1115 1125 terra cfgcache:load()
1116 1126 self.instance = self.overlord:conf_get('instance-name')
1127 + self.domain = self.overlord:conf_get('domain')
1117 1128 self.secret = self.overlord:conf_get('server-secret')
1118 1129
1119 1130 self.pol_reg = self:cfbool('policy-self-register', false)
1120 1131 self.pol_autoherald = self:cfbool('policy-self-herald', true)
1121 1132
1122 1133 do self.credmgd = false
1123 1134 var sreg = self.overlord:conf_get('credential-store')