Skip to content

Commit 855e085

Browse files
author
epriestley
committed
Uninstall Conduit calls when uninstalling applications
Summary: Fixes T2698. When applications are installed, their Conduit calls should drop out. This will also let us land Releeph without exposing Conduit calls. Test Plan: - Viewed Conduit console; uninstalled some applications and verified their calls dropped out. - Tried to make an uninstalled call; got an appropriate error. Reviewers: edward, btrahan Reviewed By: edward CC: aran Maniphest Tasks: T2698 Differential Revision: https://secure.phabricator.com/D5302
1 parent 1341c8a commit 855e085

File tree

38 files changed

+216
-44
lines changed

38 files changed

+216
-44
lines changed

src/__phutil_library_map__.php

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,15 @@
143143
'ConduitAPI_differential_setdiffproperty_Method' => 'applications/differential/conduit/ConduitAPI_differential_setdiffproperty_Method.php',
144144
'ConduitAPI_differential_updaterevision_Method' => 'applications/differential/conduit/ConduitAPI_differential_updaterevision_Method.php',
145145
'ConduitAPI_differential_updateunitresults_Method' => 'applications/differential/conduit/ConduitAPI_differential_updateunitresults_Method.php',
146+
'ConduitAPI_diffusion_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_Method.php',
146147
'ConduitAPI_diffusion_findsymbols_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_findsymbols_Method.php',
147148
'ConduitAPI_diffusion_getcommits_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getcommits_Method.php',
148149
'ConduitAPI_diffusion_getlintmessages_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getlintmessages_Method.php',
149150
'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getrecentcommitsbypath_Method.php',
151+
'ConduitAPI_feed_Method' => 'applications/feed/conduit/ConduitAPI_feed_Method.php',
150152
'ConduitAPI_feed_publish_Method' => 'applications/feed/conduit/ConduitAPI_feed_publish_Method.php',
151153
'ConduitAPI_feed_query_Method' => 'applications/feed/conduit/ConduitAPI_feed_query_Method.php',
154+
'ConduitAPI_file_Method' => 'applications/files/conduit/ConduitAPI_file_Method.php',
152155
'ConduitAPI_file_download_Method' => 'applications/files/conduit/ConduitAPI_file_download_Method.php',
153156
'ConduitAPI_file_info_Method' => 'applications/files/conduit/ConduitAPI_file_info_Method.php',
154157
'ConduitAPI_file_upload_Method' => 'applications/files/conduit/ConduitAPI_file_upload_Method.php',
@@ -166,6 +169,7 @@
166169
'ConduitAPI_maniphest_info_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_info_Method.php',
167170
'ConduitAPI_maniphest_query_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_query_Method.php',
168171
'ConduitAPI_maniphest_update_Method' => 'applications/maniphest/conduit/ConduitAPI_maniphest_update_Method.php',
172+
'ConduitAPI_owners_Method' => 'applications/owners/conduit/ConduitAPI_owners_Method.php',
169173
'ConduitAPI_owners_query_Method' => 'applications/owners/conduit/ConduitAPI_owners_query_Method.php',
170174
'ConduitAPI_paste_Method' => 'applications/paste/conduit/ConduitAPI_paste_Method.php',
171175
'ConduitAPI_paste_create_Method' => 'applications/paste/conduit/ConduitAPI_paste_create_Method.php',
@@ -175,6 +179,7 @@
175179
'ConduitAPI_phid_info_Method' => 'applications/phid/conduit/ConduitAPI_phid_info_Method.php',
176180
'ConduitAPI_phid_lookup_Method' => 'applications/phid/conduit/ConduitAPI_phid_lookup_Method.php',
177181
'ConduitAPI_phid_query_Method' => 'applications/phid/conduit/ConduitAPI_phid_query_Method.php',
182+
'ConduitAPI_phpast_Method' => 'applications/phpast/conduit/ConduitAPI_phpast_Method.php',
178183
'ConduitAPI_phpast_getast_Method' => 'applications/phpast/conduit/ConduitAPI_phpast_getast_Method.php',
179184
'ConduitAPI_phpast_version_Method' => 'applications/phpast/conduit/ConduitAPI_phpast_version_Method.php',
180185
'ConduitAPI_phriction_Method' => 'applications/phriction/conduit/ConduitAPI_phriction_Method.php',
@@ -187,6 +192,7 @@
187192
'ConduitAPI_repository_Method' => 'applications/repository/conduit/ConduitAPI_repository_Method.php',
188193
'ConduitAPI_repository_create_Method' => 'applications/repository/conduit/ConduitAPI_repository_create_Method.php',
189194
'ConduitAPI_repository_query_Method' => 'applications/repository/conduit/ConduitAPI_repository_query_Method.php',
195+
'ConduitAPI_slowvote_Method' => 'applications/slowvote/conduit/ConduitAPI_slowvote_Method.php',
190196
'ConduitAPI_slowvote_info_Method' => 'applications/slowvote/conduit/ConduitAPI_slowvote_info_Method.php',
191197
'ConduitAPI_token_Method' => 'applications/tokens/conduit/ConduitAPI_token_Method.php',
192198
'ConduitAPI_token_give_Method' => 'applications/tokens/conduit/ConduitAPI_token_give_Method.php',
@@ -1709,16 +1715,19 @@
17091715
'ConduitAPI_differential_setdiffproperty_Method' => 'ConduitAPIMethod',
17101716
'ConduitAPI_differential_updaterevision_Method' => 'ConduitAPIMethod',
17111717
'ConduitAPI_differential_updateunitresults_Method' => 'ConduitAPIMethod',
1712-
'ConduitAPI_diffusion_findsymbols_Method' => 'ConduitAPIMethod',
1713-
'ConduitAPI_diffusion_getcommits_Method' => 'ConduitAPIMethod',
1714-
'ConduitAPI_diffusion_getlintmessages_Method' => 'ConduitAPIMethod',
1715-
'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'ConduitAPIMethod',
1716-
'ConduitAPI_feed_publish_Method' => 'ConduitAPIMethod',
1717-
'ConduitAPI_feed_query_Method' => 'ConduitAPIMethod',
1718-
'ConduitAPI_file_download_Method' => 'ConduitAPIMethod',
1719-
'ConduitAPI_file_info_Method' => 'ConduitAPIMethod',
1720-
'ConduitAPI_file_upload_Method' => 'ConduitAPIMethod',
1721-
'ConduitAPI_file_uploadhash_Method' => 'ConduitAPIMethod',
1718+
'ConduitAPI_diffusion_Method' => 'ConduitAPIMethod',
1719+
'ConduitAPI_diffusion_findsymbols_Method' => 'ConduitAPI_diffusion_Method',
1720+
'ConduitAPI_diffusion_getcommits_Method' => 'ConduitAPI_diffusion_Method',
1721+
'ConduitAPI_diffusion_getlintmessages_Method' => 'ConduitAPI_diffusion_Method',
1722+
'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'ConduitAPI_diffusion_Method',
1723+
'ConduitAPI_feed_Method' => 'ConduitAPIMethod',
1724+
'ConduitAPI_feed_publish_Method' => 'ConduitAPI_feed_Method',
1725+
'ConduitAPI_feed_query_Method' => 'ConduitAPI_feed_Method',
1726+
'ConduitAPI_file_Method' => 'ConduitAPIMethod',
1727+
'ConduitAPI_file_download_Method' => 'ConduitAPI_file_Method',
1728+
'ConduitAPI_file_info_Method' => 'ConduitAPI_file_Method',
1729+
'ConduitAPI_file_upload_Method' => 'ConduitAPI_file_Method',
1730+
'ConduitAPI_file_uploadhash_Method' => 'ConduitAPI_file_Method',
17221731
'ConduitAPI_flag_Method' => 'ConduitAPIMethod',
17231732
'ConduitAPI_flag_delete_Method' => 'ConduitAPI_flag_Method',
17241733
'ConduitAPI_flag_edit_Method' => 'ConduitAPI_flag_Method',
@@ -1732,7 +1741,8 @@
17321741
'ConduitAPI_maniphest_info_Method' => 'ConduitAPI_maniphest_Method',
17331742
'ConduitAPI_maniphest_query_Method' => 'ConduitAPI_maniphest_Method',
17341743
'ConduitAPI_maniphest_update_Method' => 'ConduitAPI_maniphest_Method',
1735-
'ConduitAPI_owners_query_Method' => 'ConduitAPIMethod',
1744+
'ConduitAPI_owners_Method' => 'ConduitAPIMethod',
1745+
'ConduitAPI_owners_query_Method' => 'ConduitAPI_owners_Method',
17361746
'ConduitAPI_paste_Method' => 'ConduitAPIMethod',
17371747
'ConduitAPI_paste_create_Method' => 'ConduitAPI_paste_Method',
17381748
'ConduitAPI_paste_info_Method' => 'ConduitAPI_paste_Method',
@@ -1741,6 +1751,7 @@
17411751
'ConduitAPI_phid_info_Method' => 'ConduitAPI_phid_Method',
17421752
'ConduitAPI_phid_lookup_Method' => 'ConduitAPI_phid_Method',
17431753
'ConduitAPI_phid_query_Method' => 'ConduitAPI_phid_Method',
1754+
'ConduitAPI_phpast_Method' => 'ConduitAPIMethod',
17441755
'ConduitAPI_phpast_getast_Method' => 'ConduitAPIMethod',
17451756
'ConduitAPI_phpast_version_Method' => 'ConduitAPIMethod',
17461757
'ConduitAPI_phriction_Method' => 'ConduitAPIMethod',
@@ -1753,7 +1764,8 @@
17531764
'ConduitAPI_repository_Method' => 'ConduitAPIMethod',
17541765
'ConduitAPI_repository_create_Method' => 'ConduitAPI_repository_Method',
17551766
'ConduitAPI_repository_query_Method' => 'ConduitAPI_repository_Method',
1756-
'ConduitAPI_slowvote_info_Method' => 'ConduitAPIMethod',
1767+
'ConduitAPI_slowvote_Method' => 'ConduitAPIMethod',
1768+
'ConduitAPI_slowvote_info_Method' => 'ConduitAPI_slowvote_Method',
17571769
'ConduitAPI_token_Method' => 'ConduitAPIMethod',
17581770
'ConduitAPI_token_give_Method' => 'ConduitAPI_token_Method',
17591771
'ConduitAPI_token_given_Method' => 'ConduitAPI_token_Method',

src/applications/audit/conduit/ConduitAPI_audit_Method.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,8 @@
55
*/
66
abstract class ConduitAPI_audit_Method extends ConduitAPIMethod {
77

8+
public function getApplication() {
9+
return PhabricatorApplication::getByClass('PhabricatorApplicationAudit');
10+
}
811

912
}

src/applications/base/PhabricatorApplication.php

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,14 @@ public function isEnabled() {
6363
}
6464

6565
public function isInstalled() {
66-
$uninstalled =
67-
PhabricatorEnv::getEnvConfig('phabricator.uninstalled-applications');
68-
69-
if (!$this->canUninstall()) {
70-
return true;
71-
} else if (isset($uninstalled[get_class($this)])) {
72-
return false;
73-
} else {
74-
return true;
75-
}
66+
$uninstalled = PhabricatorEnv::getEnvConfig(
67+
'phabricator.uninstalled-applications');
68+
69+
if (!$this->canUninstall()) {
70+
return true;
71+
}
72+
73+
return empty($uninstalled[get_class($this)]);
7674
}
7775

7876
public function isBeta() {
@@ -234,7 +232,6 @@ public function getQuickCreateURI() {
234232
/* -( Application Management )--------------------------------------------- */
235233

236234
public static function getByClass($class_name) {
237-
238235
$selected = null;
239236
$applications = PhabricatorApplication::getAllApplications();
240237

@@ -273,12 +270,11 @@ public static function getAllApplications() {
273270
public static function getAllInstalledApplications() {
274271
static $applications;
275272

276-
$show_beta =
277-
PhabricatorEnv::getEnvConfig('phabricator.show-beta-applications');
278-
279-
$uninstalled =
280-
PhabricatorEnv::getEnvConfig('phabricator.uninstalled-applications');
273+
$show_beta = PhabricatorEnv::getEnvConfig(
274+
'phabricator.show-beta-applications');
281275

276+
$uninstalled = PhabricatorEnv::getEnvConfig(
277+
'phabricator.uninstalled-applications');
282278

283279
if (empty($applications)) {
284280
$all_applications = self::getAllApplications();

src/applications/chatlog/conduit/ConduitAPI_chatlog_Method.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@
55
*/
66
abstract class ConduitAPI_chatlog_Method extends ConduitAPIMethod {
77

8+
public function getApplication() {
9+
return PhabricatorApplication::getByClass('PhabricatorApplicationChatlog');
10+
}
11+
812
}

src/applications/conduit/call/ConduitCall.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,18 @@ protected function buildMethodHandler($method) {
9393

9494
if (!($method instanceof ConduitAPIMethod)) {
9595
throw new ConduitException(
96-
"Method '{$method}' is not valid; the implementation must be ".
96+
"Method '{$method_class}' is not valid; the implementation must be ".
9797
"a subclass of ConduitAPIMethod.");
9898
}
9999

100+
$application = $method->getApplication();
101+
if ($application && !$application->isInstalled()) {
102+
$app_name = $application->getName();
103+
throw new ConduitException(
104+
"Method '{$method_class}' belongs to application '{$app_name}', ".
105+
"which is not installed.");
106+
}
107+
100108
return $method;
101109
}
102110

src/applications/conduit/controller/PhabricatorConduitController.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ protected function getMethodFilters() {
8686
$group_name = head(explode('.', $method_name));
8787

8888
$method_object = newv($method_class, array());
89+
90+
$application = $method_object->getApplication();
91+
if ($application && !$application->isInstalled()) {
92+
continue;
93+
}
94+
8995
$status = $method_object->getMethodStatus();
9096

9197
$key = sprintf(

src/applications/conduit/method/ConduitAPIMethod.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ public function shouldAllowUnguardedWrites() {
7575
return false;
7676
}
7777

78+
79+
/**
80+
* Optionally, return a @{class:PhabricatorApplication} which this call is
81+
* part of. The call will be disabled when the application is uninstalled.
82+
*
83+
* @return PhabricatorApplication|null Related application.
84+
*/
85+
public function getApplication() {
86+
return null;
87+
}
88+
7889
public static function getAPIMethodNameFromClassName($class_name) {
7990
$match = null;
8091
$is_valid = preg_match(

src/applications/differential/conduit/ConduitAPI_differential_Method.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
*/
66
abstract class ConduitAPI_differential_Method extends ConduitAPIMethod {
77

8+
public function getApplication() {
9+
return PhabricatorApplication::getByClass(
10+
'PhabricatorApplicationDifferential');
11+
}
12+
813
protected function buildDiffInfoDictionary(DifferentialDiff $diff) {
914
$uri = '/differential/diff/'.$diff->getID().'/';
1015
$uri = PhabricatorEnv::getProductionURI($uri);
@@ -15,7 +20,6 @@ protected function buildDiffInfoDictionary(DifferentialDiff $diff) {
1520
);
1621
}
1722

18-
1923
protected function buildInlineInfoDictionary(
2024
DifferentialInlineComment $inline,
2125
DifferentialChangeset $changeset = null) {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
/**
4+
* @group conduit
5+
*/
6+
abstract class ConduitAPI_diffusion_Method
7+
extends ConduitAPIMethod {
8+
9+
public function getApplication() {
10+
return PhabricatorApplication::getByClass(
11+
'PhabricatorApplicationDiffusion');
12+
}
13+
14+
}

src/applications/diffusion/conduit/ConduitAPI_diffusion_findsymbols_Method.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @group conduit
55
*/
66
final class ConduitAPI_diffusion_findsymbols_Method
7-
extends ConduitAPIMethod {
7+
extends ConduitAPI_diffusion_Method {
88

99
public function getMethodDescription() {
1010
return "Retrieve Diffusion symbol information.";

0 commit comments

Comments
 (0)