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