Differences From
Artifact [854410a8ca]:
3 3 local secmode = lib.enum { 'public', 'private', 'lockdown', 'isolate' }
4 4 local pstring = lib.mem.ptr(int8)
5 5 local struct srv
6 6 local struct cfgcache {
7 7 secret: pstring
8 8 pol_sec: secmode.t
9 9 pol_reg: bool
10 + pol_autoherald: bool
10 11 credmgd: bool
11 12 maxupsz: intptr
12 13 poolinitsz: intptr
13 14 instance: pstring
14 15 overlord: &srv
15 16 ui_cue_staff: pstring
16 17 ui_cue_founder: pstring
................................................................................
324 325 end
325 326
326 327 terra convo:stra(sz: intptr) -- convenience function
327 328 var s: lib.str.acc
328 329 s:pool(&self.srv.pool,sz)
329 330 return s
330 331 end
332 +
333 +convo.methods.qstr = macro(function(self, ...) -- convenience string builder
334 + local exp = {...}
335 + return `lib.str.acc{}:pcompose(&self.srv.pool, [exp]):finalize()
336 +end)
331 337
332 338 convo.methods.assertpow = macro(function(self, pow)
333 339 return quote
334 340 var ok = true
335 341 if self.aid == 0 or self.who.rights.powers.[pow:asvalue()]() == false then
336 342 ok = false
337 343 self:complain(403,'insufficient privileges',['you lack the <strong>'..pow:asvalue()..'</strong> power and cannot perform this action'])
................................................................................
950 956 end
951 957
952 958 terra cfgcache:load()
953 959 self.instance = self.overlord:conf_get('instance-name')
954 960 self.secret = self.overlord:conf_get('server-secret')
955 961
956 962 self.pol_reg = self:cfbool('policy-self-register', false)
963 + self.pol_autoherald = self:cfbool('policy-self-herald', true)
957 964
958 965 do self.credmgd = false
959 966 var sreg = self.overlord:conf_get('credential-store')
960 967 if sreg:ref() then
961 968 if lib.str.cmp(sreg.ptr, 'managed') == 0
962 969 then self.credmgd = true
963 970 else self.credmgd = false