parsav  Diff

Differences From Artifact [b092edff32]:

To Artifact [6be667433b]:


     8      8   	pol_sec: secmode.t
     9      9   	pol_reg: bool
    10     10   	credmgd: bool
    11     11   	maxupsz: intptr
    12     12   	instance: lib.mem.ptr(int8)
    13     13   	overlord: &srv
    14     14   	ui_hue: uint16
           15  +	nranks: uint16
           16  +	maxinvites: uint16
    15     17   }
    16     18   local struct srv {
    17     19   	sources: lib.mem.ptr(lib.store.source)
    18     20   	webmgr: lib.net.mg_mgr
    19     21   	webcon: &lib.net.mg_connection
    20     22   	cfg: cfgcache
    21     23   	id: rawstring
................................................................................
   644    646   		   self.sources(i).backend.actor_auth_pw ~= nil then
   645    647   			var aid,uid,newhnd = self.sources(i):actor_auth_pw(ip,user,pw)
   646    648   			if aid ~= 0 then
   647    649   				if uid == 0 then
   648    650   					lib.dbg('new user just logged in, creating account entry')
   649    651   					var kbuf: uint8[lib.crypt.const.maxdersz]
   650    652   					var na = lib.store.actor.mk(&kbuf[0])
          653  +					na.handle = newhnd.ptr
   651    654   					var newuid: uint64
   652    655   					if self.sources(i).backend.actor_create ~= nil then
   653    656   						newuid = self.sources(i):actor_create(&na)
   654    657   					else newuid = self:actor_create(&na) end
   655    658   
   656    659   					if self.sources(i).backend.actor_auth_register_uid ~= nil then
   657    660   						self.sources(i):actor_auth_register_uid(aid,newuid)
................................................................................
   723    726   	lib.net.mg_mgr_free(&self.webmgr)
   724    727   	for i=0,self.sources.ct do var src = self.sources.ptr + i
   725    728   		lib.report('closing data source ', src.id.ptr, '(', src.backend.id, ')')
   726    729   		src:close()
   727    730   	end
   728    731   	self.sources:free()
   729    732   end
          733  +
          734  +terra cfgcache:cfint(name: rawstring, default: intptr)
          735  +	var str = self.overlord:conf_get(name)
          736  +	if str.ptr ~= nil then
          737  +		var i,ok = lib.math.decparse(str)
          738  +		if ok then default = i else
          739  +			lib.warn('invalid configuration setting ',name,'="',{str.ptr,str.ct},'", expected integer; using default value instead')
          740  +		end
          741  +		str:free()
          742  +	end
          743  +	return default
          744  +end
          745  +
          746  +terra cfgcache:cfbool(name: rawstring, default: bool)
          747  +	var str = self.overlord:conf_get(name)
          748  +	if str.ptr ~= nil then
          749  +		if str:cmp(lib.str.plit 'true') or str:cmp(lib.str.plit 'on') or
          750  +		   str:cmp(lib.str.plit 'yes')  or str:cmp(lib.str.plit '1') then
          751  +			default = true
          752  +		elseif str:cmp(lib.str.plit 'false') or str:cmp(lib.str.plit 'off') or
          753  +		       str:cmp(lib.str.plit 'no')    or str:cmp(lib.str.plit '0') then
          754  +			default = false
          755  +		else
          756  +			lib.warn('invalid configuration setting ',name,'="',{str.ptr,str.ct},'", expected boolean; using default value instead')
          757  +		end
          758  +		str:free()
          759  +	end
          760  +	return default
          761  +end
   730    762   
   731    763   terra cfgcache:load()
   732    764   	self.instance = self.overlord:conf_get('instance-name')
   733    765   	self.secret = self.overlord:conf_get('server-secret')
   734    766   
   735         -	do self.pol_reg = false
   736         -	var sreg = self.overlord:conf_get('policy-self-register')
   737         -	if sreg:ref() then
   738         -		if lib.str.cmp(sreg.ptr, 'on') == 0
   739         -			then self.pol_reg = true
   740         -			else self.pol_reg = false
   741         -		end
   742         -		sreg:free()
   743         -	end end
          767  +	self.pol_reg = self:cfbool('policy-self-register', false)
   744    768   
   745    769   	do self.credmgd = false
   746    770   	var sreg = self.overlord:conf_get('credential-store')
   747    771   	if sreg:ref() then
   748    772   		if lib.str.cmp(sreg.ptr, 'managed') == 0
   749    773   			then self.credmgd = true
   750    774   			else self.credmgd = false
................................................................................
   773    797   			self.pol_sec = secmode.lockdown
   774    798   		elseif lib.str.cmp(smode.ptr, 'isolate') == 0 then
   775    799   			self.pol_sec = secmode.isolate
   776    800   		end
   777    801   		smode:free()
   778    802   	end
   779    803   
   780         -	self.ui_hue = config.default_ui_accent
   781         -	var shue = self.overlord:conf_get('ui-accent')
   782         -	if shue.ptr ~= nil then
   783         -		var hue,ok = lib.math.decparse(shue)
   784         -		if ok then self.ui_hue = hue end
   785         -		shue:free()
   786         -	end
          804  +	self.ui_hue = self:cfint('ui-accent',config.default_ui_accent)
          805  +	self.nranks = self:cfint('user-ranks',10)
          806  +	self.maxinvites = self:cfint('max-invites',64)
   787    807   end
   788    808   
   789    809   return {
   790    810   	overlord = srv;
   791    811   	convo = convo;
   792    812   	route = route;
   793    813   	secmode = secmode;
   794    814   }