| 591 | } |
| 592 | |
| 593 | fn execute(&mut self, op: CatalogOperation) -> CatalogResult<CatalogResponse> { |
| 594 | match op { |
| 595 | CatalogOperation::Create { |
| 596 | entity_type, |
| 597 | name, |
| 598 | params, |
| 599 | } => match entity_type { |
| 600 | EntityType::User => { |
| 601 | let user = User::from_params(name.clone(), ¶ms); |
| 602 | self.add_user(user)?; |
| 603 | Ok(CatalogResponse::Success { |
| 604 | data: Some(json!({ "message": format!("User '{}' created", name) })), |
| 605 | }) |
| 606 | } |
| 607 | EntityType::Role => { |
| 608 | let role = Role::from_params(name.clone(), ¶ms); |
| 609 | self.add_role(role)?; |
| 610 | Ok(CatalogResponse::Success { |
| 611 | data: Some(json!({ "message": format!("Role '{}' created", name) })), |
| 612 | }) |
| 613 | } |
| 614 | EntityType::Ace => { |
| 615 | let ace = Ace::from_params(¶ms)?; |
| 616 | self.add_ace(ace)?; |
| 617 | Ok(CatalogResponse::Success { |
| 618 | data: Some(json!({ "message": "Access control entry created" })), |
| 619 | }) |
| 620 | } |
| 621 | _ => Ok(CatalogResponse::NotSupported), |
| 622 | }, |
| 623 | |
| 624 | CatalogOperation::Drop { |
| 625 | entity_type, |
| 626 | name, |
| 627 | cascade, |
| 628 | } => match entity_type { |
| 629 | EntityType::User => { |
| 630 | let removed = self.remove_user(&name)?; |
| 631 | Ok(CatalogResponse::Success { |
| 632 | data: Some(serde_json::to_value(removed)?), |
| 633 | }) |
| 634 | } |
| 635 | EntityType::Role => { |
| 636 | let removed = self.remove_role(&name, cascade)?; |
| 637 | Ok(CatalogResponse::Success { |
| 638 | data: Some(serde_json::to_value(removed)?), |
| 639 | }) |
| 640 | } |
| 641 | _ => Ok(CatalogResponse::NotSupported), |
| 642 | }, |
| 643 | |
| 644 | CatalogOperation::Query { query_type, params } => { |
| 645 | match query_type { |
| 646 | QueryType::GetUser => { |
| 647 | if let Some(name) = params.get("name").and_then(|v| v.as_str()) { |
| 648 | if let Some(user) = self.get_user(name) { |
| 649 | Ok(CatalogResponse::Query { |
| 650 | results: serde_json::to_value(user)?, |