fix: reject invalid coder principals safely

This commit is contained in:
2026-08-22 23:27:27 +09:00
parent 10c80ae514
commit 703398bd2c
2 changed files with 25 additions and 1 deletions
+20
View File
@@ -15669,6 +15669,26 @@ mod tests {
updated_at: TEST_CREATED_AT.to_string(),
})
.unwrap();
let invalid_coder = scoped_set_ticket_assignment(
State(api.clone()),
AxumPath((
TEST_WORKSPACE_ID.to_string(),
ticket_id.clone(),
"coder".to_string(),
)),
Json(SetTicketRoleAssignmentRequest {
operation_id: "invalid-workspace-agent-coder".to_string(),
principal: TicketAssignmentPrincipal::WorkspaceAgent {
agent_key: "workspace-orchestrator".to_string(),
},
expected_assignment_id: None,
}),
)
.await
.unwrap_err()
.into_response();
assert_eq!(invalid_coder.status(), StatusCode::CONFLICT);
let assignment = TicketCoderAssignmentRecord {
workspace_id: TEST_WORKSPACE_ID.to_string(),
ticket_id: ticket_id.clone(),
+5 -1
View File
@@ -3843,7 +3843,11 @@ impl ControlPlaneStore for SqliteWorkspaceStore {
runtime_id,
worker_id,
} => (None, Some(runtime_id.as_str()), Some(worker_id.as_str())),
TicketAssignmentPrincipal::WorkspaceAgent { .. } => unreachable!(),
TicketAssignmentPrincipal::WorkspaceAgent { .. } => {
return Err(Error::TicketAssignmentConflict(
"Workspace agent principal cannot occupy the Coder role".to_string(),
));
}
};
let principal_json = serde_json::to_string(&record.principal).map_err(|error| {
Error::Store(format!("serialize Ticket assignment principal: {error}"))