Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/passphrase/conduit/PassphraseQueryConduitAPIMethod.php
12256 views
1
<?php
2
3
final class PassphraseQueryConduitAPIMethod
4
extends PassphraseConduitAPIMethod {
5
6
public function getAPIMethodName() {
7
return 'passphrase.query';
8
}
9
10
public function getMethodDescription() {
11
return pht('Query credentials.');
12
}
13
14
public function newQueryObject() {
15
return new PassphraseCredentialQuery();
16
}
17
18
protected function defineParamTypes() {
19
return array(
20
'ids' => 'optional list<int>',
21
'phids' => 'optional list<phid>',
22
'needSecrets' => 'optional bool',
23
'needPublicKeys' => 'optional bool',
24
);
25
}
26
27
protected function defineReturnType() {
28
return 'list<dict>';
29
}
30
31
protected function execute(ConduitAPIRequest $request) {
32
$query = $this->newQueryForRequest($request);
33
34
if ($request->getValue('ids')) {
35
$query->withIDs($request->getValue('ids'));
36
}
37
38
if ($request->getValue('phids')) {
39
$query->withPHIDs($request->getValue('phids'));
40
}
41
42
if ($request->getValue('needSecrets')) {
43
$query->needSecrets(true);
44
}
45
46
$pager = $this->newPager($request);
47
$credentials = $query->executeWithCursorPager($pager);
48
49
$results = array();
50
foreach ($credentials as $credential) {
51
$type = PassphraseCredentialType::getTypeByConstant(
52
$credential->getCredentialType());
53
if (!$type) {
54
continue;
55
}
56
57
$public_key = null;
58
if ($request->getValue('needPublicKeys') && $type->hasPublicKey()) {
59
$public_key = $type->getPublicKey(
60
$request->getUser(),
61
$credential);
62
}
63
64
$material = array();
65
66
$is_locked = $credential->getIsLocked();
67
$allow_api = ($credential->getAllowConduit() && !$is_locked);
68
69
$secret = null;
70
if ($request->getValue('needSecrets')) {
71
if ($allow_api) {
72
$secret = $credential->getSecret();
73
if ($secret) {
74
$secret = $secret->openEnvelope();
75
} else {
76
$material['destroyed'] = pht(
77
'The private material for this credential has been '.
78
'destroyed.');
79
}
80
}
81
}
82
83
switch ($credential->getCredentialType()) {
84
case PassphraseSSHPrivateKeyFileCredentialType::CREDENTIAL_TYPE:
85
if ($secret !== null) {
86
$material['file'] = $secret;
87
}
88
if ($public_key) {
89
$material['publicKey'] = $public_key;
90
}
91
break;
92
case PassphraseSSHGeneratedKeyCredentialType::CREDENTIAL_TYPE:
93
case PassphraseSSHPrivateKeyTextCredentialType::CREDENTIAL_TYPE:
94
if ($secret !== null) {
95
$material['privateKey'] = $secret;
96
}
97
if ($public_key) {
98
$material['publicKey'] = $public_key;
99
}
100
break;
101
case PassphrasePasswordCredentialType::CREDENTIAL_TYPE:
102
if ($secret !== null) {
103
$material['password'] = $secret;
104
}
105
break;
106
case PassphraseTokenCredentialType::CREDENTIAL_TYPE:
107
if ($secret !== null) {
108
$material['token'] = $secret;
109
}
110
break;
111
}
112
113
if (!$allow_api) {
114
$material['noAPIAccess'] = pht(
115
'This private material for this credential is not accessible via '.
116
'API calls.');
117
}
118
119
$results[$credential->getPHID()] = array(
120
'id' => $credential->getID(),
121
'phid' => $credential->getPHID(),
122
'type' => $credential->getCredentialType(),
123
'name' => $credential->getName(),
124
'description' => $credential->getDescription(),
125
'uri' =>
126
PhabricatorEnv::getProductionURI('/'.$credential->getMonogram()),
127
'monogram' => $credential->getMonogram(),
128
'username' => $credential->getUsername(),
129
'material' => $material,
130
);
131
}
132
133
$result = array(
134
'data' => $results,
135
);
136
137
return $this->addPagerResults($result, $pager);
138
}
139
140
}
141
142