Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions policy/diamond/policy/blueapi/blueapi.rego
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package diamond.policy.blueapi

import data.diamond.policy.admin
import data.diamond.policy.session
import data.diamond.policy.token

import rego.v1

default tiled_service_account_for_beamline := false
Expand All @@ -10,3 +13,15 @@ tiled_service_account_for_beamline if {
"tiled-writer" in token.claims.aud
not token.claims.fedid
}

default write_to_beamline_visit := false

write_to_beamline_visit if {
session.write_to_beamline_visit
}

# Service account check
write_to_beamline_visit if {
input.beamline == token.claims.beamline
input.beamline == session.beamline
}
89 changes: 89 additions & 0 deletions policy/diamond/policy/blueapi/blueapi_test.rego
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,75 @@ package diamond.policy.blueapi_test
import data.diamond.policy.blueapi
import rego.v1

diamond_data := {
"subjects": {
"alice": {
"permissions": [],
Comment thread
Alexj9837 marked this conversation as resolved.
"proposals": [1],
"sessions": [],
},
"bob": {
"permissions": ["b07_admin"],
"proposals": [],
"sessions": [11],
},
"carol": {
"permissions": ["super_admin"],
"proposals": [],
"sessions": [],
},
"desmond": {
"permissions": [],
"proposals": [2],
"sessions": [13],
},
"edna": {
"permissions": [],
"proposals": [2],
"sessions": [13, 14],
},
"oscar": {
"permissions": [],
"proposals": [],
"sessions": [],
},
},
"sessions": {
"11": {
"beamline": "i03",
"proposal_number": 1,
"visit_number": 1,
},
"12": {
"beamline": "b07",
"proposal_number": 1,
"visit_number": 2,
},
"13": {
"beamline": "b07",
"proposal_number": 2,
"visit_number": 1,
},
"14": {
"beamline": "b07",
"proposal_number": 2,
"visit_number": 2,
},
},
"proposals": {
"1": {"sessions": {
"1": 11,
"2": 12,
}},
"2": {"sessions": {
"1": 13,
"2": 14,
}},
},
Comment thread
Alexj9837 marked this conversation as resolved.
"beamlines": {"i03": {"sessions": [11]}, "b07": {"sessions": [12, 13, 14]}},
"admin": {"b07_admin": ["b07"]},
}

test_service_account_if_beamline_matches if {
blueapi.tiled_service_account_for_beamline with input as {"beamline": "i22"}
with data.diamond.policy.token.claims as {"beamline": "i22", "aud": ["tiled-writer"]}
Expand All @@ -22,3 +91,23 @@ test_not_service_account_if_fedid_present if {
not blueapi.tiled_service_account_for_beamline with input as {"beamline": "i22"}
with data.diamond.policy.token.claims as {"beamline": "i22", "aud": ["tiled-writer"], "fedid": "abc12345"}
}

# service account UDC path

test_write_to_beamline_visit_service_account if {
blueapi.write_to_beamline_visit with data.diamond.data as diamond_data
with input as {"beamline": "i03", "proposal": 1, "visit": 1}
with data.diamond.policy.token.claims as {"beamline": "i03"}
}

test_write_to_beamline_visit_service_account_wrong_beamline if {
not blueapi.write_to_beamline_visit with data.diamond.data as diamond_data
with input as {"beamline": "i03", "proposal": 1, "visit": 1}
with data.diamond.policy.token.claims as {"beamline": "b07"}
}

test_write_to_beamline_visit_service_account_nonexistent_beamline if {
not blueapi.write_to_beamline_visit with data.diamond.data as diamond_data
with input as {"beamline": "i03", "proposal": 1, "visit": 1}
with data.diamond.policy.token.claims as {"beamline": "i99"}
}
Loading