euid: Result<Uid, ConnectionEuidDiscoverError>,
desc: &'d str,
account: Option<AccountSpecified>,
- superuser: Option<AuthorisationSuperuser>,
+ authstate: AuthState,
+}
+
+#[derive(Debug)]
+enum AuthState {
+ None,
+ Superuser(AuthorisationSuperuser),
}
#[derive(Debug,Clone)]
MC::SetSuperuser(enable) => {
if !enable {
- cs.superuser = None;
+ cs.authstate = AuthState::None;
} else {
let auth = authorise_scope_direct(cs, &AccountScope::Server)?;
- cs.superuser = Some(auth.therefore_ok());
+ cs.authstate = AuthState::Superuser(auth.therefore_ok());
}
Fine
},
MC::ListAccounts { all } => {
let ag = AccountsGuard::lock();
let names = if all == Some(true) {
- let auth = cs.superuser.ok_or(ME::AuthorisationError)?;
+ let auth = cs.superuser().ok_or(ME::AuthorisationError)?;
ag.list_accounts_all(auth.into())
} else {
let AccountSpecified { notional_account, auth, .. } =
let names = Instance::list_names(
None, Authorisation::authorise_any());
let auth_all = if all == Some(true) {
- let auth =cs.superuser.ok_or(ME::AuthorisationError)?.into();
+ let auth = cs.superuser().ok_or(ME::AuthorisationError)?.into();
Some(auth)
} else {
None
}
MC::LoadFakeRng(ents) => {
- let superuser = cs.superuser
+ let superuser = cs.superuser()
.ok_or(ME::SuperuserAuthorisationRequired)?;
config().game_rng.set_fake(ents, superuser)?;
Fine
f: F,
) -> ExecuteGameInsnResults<'igr, 'ig>
{
- let superuser = cs.superuser.ok_or(ME::SuperuserAuthorisationRequired)?;
+ let superuser = cs.superuser().ok_or(ME::SuperuserAuthorisationRequired)?;
let ig = ig.by_mut(superuser.into());
let gpl = ig.gs.players.byid(player)?;
let resp = f(&gpl.idmap);
}
MGI::SynchLog => {
- let superuser = cs.superuser.ok_or(ME::SuperuserAuthorisationRequired)?;
+ let superuser = cs.superuser()
+ .ok_or(ME::SuperuserAuthorisationRequired)?;
let ig = ig.by_mut(superuser.into());
let (gen, mgr) = some_synch_core(ig)?;
let log = LogEntry { html: synch_logentry(gen) };
let d = CommandStreamData {
account: None, desc: &desc,
euid: euid.map(Uid::from_raw),
- superuser: None,
+ authstate: AuthState::None,
};
let cs = CommandStream { chan, d };
cs.mainloop()?;
}
impl CommandStreamData<'_> {
+ pub fn superuser(&self) -> Option<AuthorisationSuperuser> {
+ match self.authstate {
+ AuthState::Superuser(auth) => Some(auth),
+ _ => None
+ }
+ }
pub fn is_superuser<T:Serialize>(&self) -> Option<Authorisation<T>> {
- self.superuser.map(Into::into)
+ self.superuser().map(Into::into)
}
#[throws(MgmtError)]
p: PermSet<TablePermission>)
-> Authorisation<InstanceName>
{
- if let Some(superuser) = cs.superuser {
+ if let Some(superuser) = cs.superuser() {
return superuser.into();
}
fn accountrecord_from_spec(&self, spec: Option<Box<dyn PlayerAccessSpec>>)
-> Option<AccessRecord> {
spec
- .map(|spec| AccessRecord::from_spec(spec, self.superuser))
+ .map(|spec| AccessRecord::from_spec(spec, self.superuser()))
.transpose()?
}
}