parsav  Diff

Differences From Artifact [baac561cfe]:

To Artifact [2ff93305a1]:


   237    237   terra convo:stdpage(pg: convo.page) self:statpage(200, pg) end
   238    238   
   239    239   terra convo:bytestream(mime: pstring, data: lib.mem.ptr(uint8))
   240    240   	-- TODO this is not a satisfactory solution; it's a bandaid on a gaping
   241    241   	-- chest wound. ultimately we need to compile a whitelist of safe mime
   242    242   	-- types as part of mimelib, but that is no small task. for now, this
   243    243   	-- will keep the patient from immediately bleeding out
   244         -	if mime:cmp(lib.str.plit'text/html') or
   245         -		mime:cmp(lib.str.plit'text/xml') or
   246         -		mime:cmp(lib.str.plit'application/xhtml+xml') or
   247         -		mime:cmp(lib.str.plit'application/vnd.wap.xhtml+xml')
          244  +	if mime:cmp('text/html') or
          245  +		mime:cmp('text/xml') or
          246  +		mime:cmp('application/xhtml+xml') or
          247  +		mime:cmp('application/vnd.wap.xhtml+xml')
   248    248   	then -- danger will robinson
   249         -		mime = lib.str.plit'text/plain'
   250         -	elseif mime:cmp(lib.str.plit'application/x-shockwave-flash') then
   251         -		mime = lib.str.plit'application/octet-stream'
          249  +		mime = 'text/plain'
          250  +	elseif mime:cmp('application/x-shockwave-flash') then
          251  +		mime = 'application/octet-stream'
   252    252   	end
   253    253   	lib.net.mg_printf(self.con, "HTTP/1.1 200 OK\r\nContent-Type: %.*s\r\nContent-Length: %llu\r\nContent-Security-Policy: sandbox; default-src 'none'; form-action 'none'; navigate-to 'none';\r\nX-Content-Options: nosniff\r\n\r\n", mime.ct, mime.ptr, data.ct + 2)
   254    254   	lib.net.mg_send(self.con, data.ptr, data.ct)
   255    255   	lib.net.mg_send(self.con, '\r\n', 2)
   256    256   end
   257    257   
   258    258   terra convo:reroute_cookie(dest: rawstring, cookie: rawstring)
................................................................................
   293    293   	if msg == nil then msg = "i'm sorry, dave. i can't let you do that" end
   294    294   
   295    295   	var ti: lib.str.acc ti:compose('error :: ', title)
   296    296   	var bo: lib.str.acc bo:compose('<div class="message"><img class="icon" src="/s/warn.svg"><h1>',title,'</h1><p>',msg,'</p></div>')
   297    297   	var body = [convo.page] {
   298    298   		title = ti:finalize();
   299    299   		body = bo:finalize();
   300         -		class = lib.str.plit 'error';
          300  +		class = 'error';
   301    301   		cache = false;
   302    302   	}
   303    303   
   304    304   	self:statpage(code, body)
   305    305   
   306    306   	body.title:free()
   307    307   	body.body:free()
................................................................................
   313    313   		query = msg;
   314    314   		cancel = cancel;
   315    315   	}
   316    316   	var ti: lib.str.acc ti:pcompose(&self.srv.pool,'confirm :: ', title)
   317    317   	var body = conf:poolstr(&self.srv.pool) -- defer body:free()
   318    318   	var cf = [convo.page] {
   319    319   		title = ti:finalize();
   320         -		class = lib.str.plit 'query';
          320  +		class = 'query';
   321    321   		body = body; cache = false;
   322    322   	}
   323    323   	self:stdpage(cf)
   324    324   	--cf.title:free()
   325    325   end
   326    326   
   327    327   terra convo:stra(sz: intptr) -- convenience function
................................................................................
   629    629   								var halt = lib.str.find(@lsent, lsr)
   630    630   								if halt:ref() then
   631    631   									lsent.ct = halt.ptr - lsent.ptr
   632    632   								end
   633    633   								lsr:free() end
   634    634   
   635    635   							for i=0,upmap.ct do
   636         -								var hdrbrk = lib.str.find(upmap(i), lib.str.plit'\r\n\r\n')
          636  +								var hdrbrk = lib.str.find(upmap(i), '\r\n\r\n')
   637    637   								if hdrbrk:ref() then
   638    638   									var hdrtxt = pstring {upmap(i).ptr,upmap(i).ct - hdrbrk.ct}
   639    639   									var hdrs = lib.str.splitmap(hdrtxt, '\r\n',6)
   640    640   									var ctt = pstring.null()
   641    641   									var ctd = pstring.null()
   642    642   									for j=0, hdrs.ct do
   643         -										var brk = lib.str.find(hdrs(j),lib.str.plit':')
          643  +										var brk = lib.str.find(hdrs(j),':')
   644    644   										if brk:ref() then
   645    645   											var hdr = pstring{hdrs(j).ptr,hdrs(j).ct - brk.ct}
   646    646   											var val = pstring{brk.ptr+1, brk.ct-1}:ffw()
   647         -											if hdr:cmp(lib.str.plit'Content-Type') then
          647  +											if hdr:cmp('Content-Type') then
   648    648   												ctt = val
   649         -											elseif hdr:cmp(lib.str.plit'Content-Disposition') then
          649  +											elseif hdr:cmp('Content-Disposition') then
   650    650   												ctd = val
   651    651   											end
   652    652   										end
   653    653   									end
   654    654   									if ctd:ref() then
   655    655   										var ctdvals = lib.str.splitmap(ctd, ';', 4) defer ctdvals:free()
   656         -										if ctdvals(0):cmp(lib.str.plit'form-data') and ctdvals.ct > 1 then
          656  +										if ctdvals(0):cmp('form-data') and ctdvals.ct > 1 then
   657    657   											var fld = pstring.null()
   658    658   											var file = pstring.null()
   659    659   											for j=1, ctdvals.ct do var v = ctdvals(j):ffw()
   660         -												var x = lib.str.find(v,lib.str.plit'=')
          660  +												var x = lib.str.find(v,'=')
   661    661   												if x:ref() then
   662    662   													var key = pstring{v.ptr, v.ct - x.ct}
   663    663   													var val = pstring{x.ptr + 1, x.ct - 1}
   664    664   													var decval, ofs, sp = lib.str.toknext(val,@';',true)
   665         -													if key:cmp(lib.str.plit'name') then
          665  +													if key:cmp('name') then
   666    666   														fld = decval
   667         -													elseif key:cmp(lib.str.plit'filename') then
          667  +													elseif key:cmp('filename') then
   668    668   														file = decval
   669    669   													else decval:free() end
   670    670   												end
   671    671   											end
   672    672   											if fld:ref() then
   673    673   												var nextup = co.uploads:new()
   674    674   												if ctt:ref() then
................................................................................
   937    937   	end
   938    938   	return default
   939    939   end
   940    940   
   941    941   terra cfgcache:cfbool(name: rawstring, default: bool)
   942    942   	var str = self.overlord:conf_get(name)
   943    943   	if str.ptr ~= nil then
   944         -		if str:cmp(lib.str.plit 'true') or str:cmp(lib.str.plit 'on') or
   945         -		   str:cmp(lib.str.plit 'yes')  or str:cmp(lib.str.plit '1') then
          944  +		if str:cmp('true') or str:cmp('on') or
          945  +		   str:cmp('yes')  or str:cmp('1') then
   946    946   			default = true
   947         -		elseif str:cmp(lib.str.plit 'false') or str:cmp(lib.str.plit 'off') or
   948         -		       str:cmp(lib.str.plit 'no')    or str:cmp(lib.str.plit '0') then
          947  +		elseif str:cmp('false') or str:cmp('off') or
          948  +		       str:cmp('no')    or str:cmp('0') then
   949    949   			default = false
   950    950   		else
   951    951   			lib.warn('invalid configuration setting ',name,'="',{str.ptr,str.ct},'", expected boolean; using default value instead')
   952    952   		end
   953    953   		str:free()
   954    954   	end
   955    955   	return default