Differences From
Artifact [baac561cfe]:
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