@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhabricatorAuthSSHKeySearchEngine
4 extends PhabricatorApplicationSearchEngine {
5
6 private $sshKeyObject;
7
8 public function setSSHKeyObject(PhabricatorSSHPublicKeyInterface $object) {
9 $this->sshKeyObject = $object;
10 return $this;
11 }
12
13 public function getSSHKeyObject() {
14 return $this->sshKeyObject;
15 }
16
17 public function canUseInPanelContext() {
18 return false;
19 }
20
21 public function getResultTypeDescription() {
22 return pht('SSH Keys');
23 }
24
25 public function getApplicationClassName() {
26 return PhabricatorAuthApplication::class;
27 }
28
29 public function newQuery() {
30 $object = $this->getSSHKeyObject();
31 $object_phid = $object->getPHID();
32
33 return id(new PhabricatorAuthSSHKeyQuery())
34 ->withObjectPHIDs(array($object_phid));
35 }
36
37 protected function buildQueryFromParameters(array $map) {
38 $query = $this->newQuery();
39
40 return $query;
41 }
42
43
44 protected function buildCustomSearchFields() {
45 return array();
46 }
47
48 protected function getURI($path) {
49 $object = $this->getSSHKeyObject();
50 $object_phid = $object->getPHID();
51
52 return "/auth/sshkey/for/{$object_phid}/{$path}";
53 }
54
55 protected function getBuiltinQueryNames() {
56 $names = array(
57 'all' => pht('All Keys'),
58 );
59
60 return $names;
61 }
62
63 public function buildSavedQueryFromBuiltin($query_key) {
64
65 $query = $this->newSavedQuery();
66 $query->setQueryKey($query_key);
67
68 switch ($query_key) {
69 case 'all':
70 return $query;
71 }
72
73 return parent::buildSavedQueryFromBuiltin($query_key);
74 }
75
76 /**
77 * @param array<PhabricatorAuthSSHKey> $keys
78 * @param PhabricatorSavedQuery $query
79 * @param array<PhabricatorObjectHandle> $handles
80 */
81 protected function renderResultList(
82 array $keys,
83 PhabricatorSavedQuery $query,
84 array $handles) {
85 assert_instances_of($keys, PhabricatorAuthSSHKey::class);
86
87 $viewer = $this->requireViewer();
88
89 $list = new PHUIObjectItemListView();
90 $list->setUser($viewer);
91 foreach ($keys as $key) {
92 $item = id(new PHUIObjectItemView())
93 ->setObjectName(pht('SSH Key %d', $key->getID()))
94 ->setHeader($key->getName())
95 ->setHref($key->getURI());
96
97 if (!$key->getIsActive()) {
98 $item->setDisabled(true);
99 }
100
101 $list->addItem($item);
102 }
103
104 $result = new PhabricatorApplicationSearchResultView();
105 $result->setObjectList($list);
106 $result->setNoDataString(pht('No matching SSH keys.'));
107
108 return $result;
109 }
110}