| 627 | |
| 628 | |
| 629 | pair<Response, Option<Master::ReadOnlyHandler::PostProcessing>> |
| 630 | Master::ReadOnlyHandler::frameworks( |
| 631 | ContentType outputContentType, |
| 632 | const hashmap<std::string, std::string>& query, |
| 633 | const process::Owned<ObjectApprovers>& approvers) const |
| 634 | { |
| 635 | CHECK_EQ(outputContentType, ContentType::JSON); |
| 636 | |
| 637 | IDAcceptor<FrameworkID> selectFrameworkId( |
| 638 | query.get("framework_id")); |
| 639 | |
| 640 | // This lambda is consumed before the outer lambda |
| 641 | // returns, hence capture by reference is fine here. |
| 642 | const Master* master = this->master; |
| 643 | auto frameworks = [master, &approvers, &selectFrameworkId]( |
| 644 | JSON::ObjectWriter* writer) { |
| 645 | // Model all of the frameworks. |
| 646 | writer->field( |
| 647 | "frameworks", |
| 648 | [master, &approvers, &selectFrameworkId]( |
| 649 | JSON::ArrayWriter* writer) { |
| 650 | foreachvalue ( |
| 651 | Framework* framework, master->frameworks.registered) { |
| 652 | // Skip unauthorized frameworks or frameworks |
| 653 | // without a matching ID. |
| 654 | if (!selectFrameworkId.accept(framework->id()) || |
| 655 | !approvers->approved<VIEW_FRAMEWORK>(framework->info)) { |
| 656 | continue; |
| 657 | } |
| 658 | |
| 659 | writer->element(FullFrameworkWriter(approvers, framework)); |
| 660 | } |
| 661 | }); |
| 662 | |
| 663 | // Model all of the completed frameworks. |
| 664 | writer->field( |
| 665 | "completed_frameworks", |
| 666 | [master, &approvers, &selectFrameworkId]( |
| 667 | JSON::ArrayWriter* writer) { |
| 668 | foreachvalue (const Owned<Framework>& framework, |
| 669 | master->frameworks.completed) { |
| 670 | // Skip unauthorized frameworks or frameworks |
| 671 | // without a matching ID. |
| 672 | if (!selectFrameworkId.accept(framework->id()) || |
| 673 | !approvers->approved<VIEW_FRAMEWORK>(framework->info)) { |
| 674 | continue; |
| 675 | } |
| 676 | |
| 677 | writer->element( |
| 678 | FullFrameworkWriter(approvers, framework.get())); |
| 679 | } |
| 680 | }); |
| 681 | |
| 682 | // Unregistered frameworks are no longer possible. We emit an |
| 683 | // empty array for the sake of backward compatibility. |
| 684 | writer->field("unregistered_frameworks", [](JSON::ArrayWriter*) {}); |
| 685 | }; |
| 686 |
no test coverage detected