parsav  Diff

Differences From Artifact [c8974a3f52]:

To Artifact [557555fd0b]:


     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')