parsav  Diff

Differences From Artifact [7c5c858095]:

To Artifact [88e528c638]:


     1      1   -- vim: ft=terra
     2      2   local pstr = lib.mem.ptr(int8)
     3      3   local pref = lib.mem.ref(int8)
     4         -local P = lib.str.plit
     5      4   
     6      5   local terra cs(s: rawstring)
     7      6   	return pstr { ptr = s, ct = lib.str.sz(s) }
     8      7   end
     9      8   
    10      9   local terra 
    11     10   regalia(acc: &lib.str.acc, rank: uint16)
................................................................................
    14     13   		case [uint16](2) then acc:lpush('🔱') end
    15     14   		case [uint16](3) then acc:lpush('⚜️') end
    16     15   		case [uint16](4) then acc:lpush('🗡') end
    17     16   		case [uint16](5) then acc:lpush('🗝') end
    18     17   		else acc:lpush('🕴')
    19     18   	end
    20     19   end
           20  +
           21  +local splitwords = macro(function(str)
           22  +	local words = {}
           23  +	for w in str:asvalue():gmatch('(%g+)') do words[#words + 1] = w end
           24  +	return `arrayof(pstr, [words])
           25  +end)
    21     26   
    22     27   local rnd = lib.crypt.random
    23     28   local terra 
    24     29   suggest_handle(a: &lib.str.acc)
    25     30   	var start = a.sz
    26     31   	var puncts = array('.','_','-')
    27     32   	var xXx = rnd(uint8, 0, 9) == 0
    28     33   	var leet = rnd(uint8, 0, 8) == 0
    29         -	var caps = rnd(uint8, 0, 5)
           34  +	var caps = rnd(uint8, 0, 10)
    30     35   	var punct: rawstring = nil
    31     36   	var useadj = rnd(uint8, 0, 4) == 0
    32     37   	if rnd(uint8, 0, 4) == 0 then
    33     38   		punct = puncts[rnd(intptr,0,[puncts.type.N])]
    34     39   	end
    35     40   
    36         -	var nouns = array(
    37         -		'thunder','bride','blaze','doom','squad','gun','lord','blaster',
    38         -		'fuck','hell','hound','piss','shit','killa','terror', 'horror',
    39         -		'fear', 'slaughter','murder','general','commander', 'commissar',
    40         -		'terrorist','infinity','slut','cunt','whore','bitch', 'bastard',
    41         -		'cock','prince','princess','pimp','gay','cop','slayer', 'vampire',
    42         -		'vampyre','blood','pain','brute','wolf','sword','star','sun','moon',
    43         -		'killer','murderer','thief','arson','fire','ice','frost','hack',
    44         -		'hacker','god','master','mistress','slave','rage','freeze','flayer',
    45         -		'pirate','ninja','shadow','fog','mist','misery','glory','bear',
    46         -		'king','queen','empress','emperor','majesty','space','martian',
    47         -		'winter','fall','monk','katana','420','warrior','banana','demon',
    48         -		'devil','ghost','wraith','cuck','legend','hero','heroine','goblin',
    49         -		'gremlin','troll','dragon','evil','overlord','radiance'
    50         -	)
    51         -	var adjs = array(
    52         -		'dark','super','supreme','ultra','ultimate','total','infinite',
    53         -		'omnipotent','crazy','final','deathless','immortal', 'elite',
    54         -		'leet','1337','bloody','fearless','headless','screaming','insane',
    55         -		'brutal','legendary','space','frozen','flaming','burning',
    56         -		'mighty','flayed','hidden','secret','lost','mystery','glorious',
    57         -		'nude','naked','bare','first','radiant','martian','fallen',
    58         -		'wandering','dank','demonic','satanic','invisible','based','woke',
    59         -		'deadly','lethal','heroic','evil','majestic','luminous'
    60         -	)
           41  +	var nouns = splitwords [[
           42  +		thunder bride blaze doom squad gun lord blaster
           43  +		fuck hell hound piss shit killa terror horror
           44  +		fear slaughter murder general commander commissar
           45  +		terrorist infinity slut cunt whore bitch bastard
           46  +		cock prince princess pimp gay cop slayer vampire
           47  +		vampyre blood pain brute wolf sword star sun moon
           48  +		killer murderer thief arson fire ice frost hack
           49  +		hacker god master mistress slave rage freeze flayer
           50  +		pirate ninja shadow fog mist misery glory bear
           51  +		king queen empress emperor majesty space martian
           52  +		winter fall monk katana 420 warrior banana demon
           53  +		devil ghost wraith cuck legend hero heroine goblin
           54  +		gremlin troll dragon evil overlord radiance slop
           55  +		operator rage hog bog roach wizard
           56  +	]]
           57  +	var adjs = splitwords [[
           58  +		dark super supreme ultra ultimate total infinite
           59  +		omnipotent crazy final deathless immortal elite
           60  +		leet 1337 bloody fearless headless screaming insane
           61  +		brutal legendary space frozen flaming burning
           62  +		mighty flayed hidden secret lost mystery glorious
           63  +		nude naked bare first radiant martian fallen bog
           64  +		wandering dank demonic satanic invisible based woke
           65  +		deadly lethal heroic evil majestic luminous ethereal
           66  +	]]
    61     67   
    62     68   	if xXx then a:lpush('xXx_') end
    63     69   
    64     70   	if useadj then
    65     71   		var len = rnd(uint8,1,3) 
    66     72   		for i = 0, len do
    67     73   			var sz = a.sz
    68         -			a:push(adjs[rnd(intptr,0,[adjs.type.N])], 0)
           74  +			a:ppush(adjs[rnd(intptr,0,[adjs.type.N])])
    69     75   			if punct ~= nil then a:push(punct, 1) end
    70     76   			if caps == 1 then
    71     77   				a.buf[sz] = lib.str.cupcase(a.buf[sz])
    72     78   			end
    73     79   		end
    74     80   	end
    75     81   	var nounct = rnd(uint8,1,3) 
    76     82   	for i = 0, nounct do
    77     83   		var sz = a.sz
    78         -		a:push(nouns[rnd(intptr,0,[nouns.type.N])], 0)
           84  +		a:ppush(nouns[rnd(intptr,0,[nouns.type.N])])
    79     85   		if punct ~= nil and i+1 ~= nounct then a:push(punct, 1) end
    80     86   		if caps == 1 then
    81     87   			a.buf[sz] = lib.str.cupcase(a.buf[sz])
    82     88   		end
    83     89   	end
    84     90   
    85         -	if leet or caps == 2 then for i=start, a.sz do
    86         -		if caps == 2 and rnd(uint8,0,5)==0 then
           91  +	if leet or caps == 9 then for i=start, a.sz do
           92  +		if caps == 9 and rnd(uint8,0,5)==0 then
    87     93   			a.buf[i] = lib.str.cupcase(a.buf[i])
    88     94   		end
    89     95   		if leet then 
    90     96   			switch lib.str.cdowncase(a.buf[i]) do
    91     97   				case [uint8]([string.byte('e')]) then a.buf[i] = @'3' end
    92     98   				case [uint8]([string.byte('i')]) then a.buf[i] = @'1' end
    93     99   				case [uint8]([string.byte('l')]) then a.buf[i] = @'1' end
................................................................................
    97    103   				case [uint8]([string.byte('b')]) then a.buf[i] = @'6' end
    98    104   			end
    99    105   		end
   100    106   	end end
   101    107   
   102    108   	if (nounct == 1 and not useadj) or rnd(uint8, 0, 5) == 0 then
   103    109   		if punct ~= nil then a:push(punct, 1) end
   104         -		a:ipush(rnd(uint16,0,65535))
          110  +		a:ipush(rnd(uint32,0,lib.math.pow(10,rnd(uint8,1,4))))
   105    111   	end
   106    112   
   107    113   	if xXx then a:lpush('_xXx') end
   108    114   
   109    115   end
   110    116   
   111    117   local terra 
   112    118   suggest_domain(a: &lib.str.acc)
   113         -	var tlds = array('tld','club','town','space','xxx')
          119  +	var words = splitwords [[
          120  +		flop slop hop wiggle wriggle bug snoot boop jorts horse rad
          121  +		witch witches cum code spank grump grumps slap spoop spoopy
          122  +		spook wobble flip jock nerd dope dork slab drug funk gay
          123  +		hex node snack weed pot slug worm fur fuzz fuzzy game gamer
          124  +		rock smack drank wack wild sexy hot sin cock fuck piss man
          125  +		wank fae weird woke slurp spine skull fail elf elves mom
          126  +		dad dog cat kitten snake troll top bottom chungus dong wang
          127  +		420 hog lover lovers best worst love hate big bigger tiny
          128  +		little teeny spunky jazz wrack rump kink kinky crack meth
          129  +		whore cam live over under turbo pizza rat rats crotch crank
          130  +		chunky funky butt grab grabber grabbers thief steal slave
          131  +		slaves hug hugs hag hags hogs wimp thieves wizard wizards
          132  +		pussy pansy dark doom stank spunk dumb rage
          133  +	]]
          134  +	var tlds = splitwords [[
          135  +		tld club town space xxx house land ranch horse com io online
          136  +		shop site vip ltd win men lgbt cat adult army analytics art
          137  +		associates bar bible biz black blog broker cam camp careers
          138  +		catering church city coop dad date dating direct diy dog
          139  +		duck dot enterprises esq estate expert express fail farm foo
          140  +		forsale fun fund forum foundation gay global golf gop guru
          141  +		group hangout hot industries international info investments
          142  +		jobs land law life limited live lol mom network now party
          143  +		porn productions pub rehab rocks school sex sexy singles
          144  +		social software solutions space spot store sucks supplies
          145  +		systems university vacations ventures wang website work
          146  +		wow wtf world xyz soy live gym park 
          147  +	]]
          148  +	var sub = rnd(uint8,0,10) == 0
          149  +	if sub then a:ppush(words[rnd(intptr,0,[words.type.N])]):lpush('.') end
          150  +	a:ppush(words[rnd(intptr,0,[words.type.N])])
          151  +	if rnd(uint8,0,3) == 0 or not sub then
          152  +		a:ppush(words[rnd(intptr,0,[words.type.N])])
          153  +	end
          154  +	a:lpush('.'):ppush(tlds[rnd(intptr,0,[tlds.type.N])])
   114    155   end
   115    156   
   116    157   local push_num_field = macro(function(acc,name,lbl,min,max,value,disable)
   117    158   	name = name:asvalue()
   118    159   	lbl = lbl:asvalue()
   119    160   	local start = '<div class="elem small">'
   120    161   	local enabled = start .. string.format('<label for="%s">%s</label><input type="number" id="%s" name="%s" min="', name, lbl, name, name)
................................................................................
   290    331   			ctlbox:append(&pg)
   291    332   			--ctlbox.name:free()
   292    333   			--if ctlbox.btns.ct > 0 then ctlbox.btns:free() end
   293    334   
   294    335   			return pg:finalize()
   295    336   		end
   296    337   	else
   297         -		var modes = array(P'local', P'remote', P'staff', P'titled', P'peons', P'all')
          338  +		var modes = arrayof(pstr,'local', 'remote', 'staff', 'titled', 'peons', 'all')
   298    339   		var idbuf: int8[lib.math.shorthand.maxlen]
   299    340   		var ulst = co:stra(256)
   300    341   		var mode: uint8 = mode_local
   301    342   		var modestr = co:pgetv('show')
   302    343   		ulst:lpush('<div style="text-align: right"><em>showing ')
   303    344   		for i=0,[modes.type.N] do
   304    345   			if modestr:ref() and modes[i]:cmp(modestr) then mode = i end
................................................................................
   345    386   		ulst:lpush('</ul>')
   346    387   
   347    388   		if co.who.rights.powers.invite() or co.who.rights.invites > 0 then
   348    389   			ulst:lpush('<details><summary>create new user</summary><form method="post"><div class="elem"><label for="handle">handle</label><input type="text" name="handle" id="handle" placeholder="')
   349    390   			suggest_handle(&ulst)
   350    391   			ulst:lpush('"></div><button name="act" value="create">create</button></form></details>')
   351    392   		end
   352         -		ulst:lpush('<details><summary>instantiate remote actor</summary><form method="post"><div class="elem"><label for="xid">xid</label><input type="text" name="xid" id="xid" placeholder="tweetlord@website.tld"></div><button name="act" value="inst">instantiate</button></form></details>')
          393  +		ulst:lpush('<details><summary>instantiate remote actor</summary><form method="post"><div class="elem"><label for="xid">xid</label><input type="text" name="xid" id="xid" placeholder="')
          394  +		suggest_handle(&ulst) ulst:lpush('@') suggest_domain(&ulst)
          395  +		ulst:lpush('"></div><button name="act" value="inst">instantiate</button></form></details>')
   353    396   
   354    397   		return ulst:finalize()
   355    398   	end
   356    399   	do return pstr.null() end
   357    400   	::e404:: co:complain(404, 'not found', 'there is no user or resource by that identifier on this server') goto quit
   358    401   	::e403:: co:complain(403, 'forbidden', 'you do not have sufficient authority to control that resource')
   359    402   
   360    403   	::quit:: return pstr.null()
   361    404   end
   362    405   
   363    406   return render_conf_users