Only return use interface if machine is currently free or reserved by me

This commit is contained in:
Nadja Reitzenstein 2022-03-16 15:04:32 +01:00
parent 4feb21e7fc
commit 069819bb9a

View File

@ -216,9 +216,18 @@ async fn fill_machine_builder(
builder.set_urn(&format!("urn:fabaccess:resource:{}", id.as_ref())); builder.set_urn(&format!("urn:fabaccess:resource:{}", id.as_ref()));
let machineapi = Machine::new(user.clone(), perms, machine.clone()); let machineapi = Machine::new(user.clone(), perms, machine.clone());
if perms.write { let state = machine.get_status().await;
// Only set `use` interf if machine could be used by the user.
if perms.write && match &state {
Status::Free => true,
Status::Reserved(reserver) if reserver == user => true,
_ => false,
}
{
builder.set_use(capnp_rpc::new_client(machineapi.clone())); builder.set_use(capnp_rpc::new_client(machineapi.clone()));
} }
if perms.manage { if perms.manage {
//builder.set_transfer(capnp_rpc::new_client(machineapi.clone())); //builder.set_transfer(capnp_rpc::new_client(machineapi.clone()));
//builder.set_check(capnp_rpc::new_client(machineapi.clone())); //builder.set_check(capnp_rpc::new_client(machineapi.clone()));
@ -228,12 +237,11 @@ async fn fill_machine_builder(
builder.set_admin(capnp_rpc::new_client(machineapi.clone())); builder.set_admin(capnp_rpc::new_client(machineapi.clone()));
} }
let s = match state {
let s = match machine.get_status().await {
Status::Free => MachineState::Free, Status::Free => MachineState::Free,
Status::Disabled => MachineState::Disabled, Status::Disabled => MachineState::Disabled,
Status::Blocked(_) => MachineState::Blocked, Status::Blocked(_) => MachineState::Blocked,
Status::InUse(u) => { Status::InUse(ref u) => {
if let Some(owner) = u.as_ref() { if let Some(owner) = u.as_ref() {
if owner == user { if owner == user {
builder.set_inuse(capnp_rpc::new_client(machineapi.clone())); builder.set_inuse(capnp_rpc::new_client(machineapi.clone()));