2013-01-01 23:09:17 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class PhabricatorSetupCheckExtraConfig extends PhabricatorSetupCheck {
|
|
|
|
|
|
|
|
protected function executeChecks() {
|
2013-06-26 20:01:19 +02:00
|
|
|
$ancient_config = self::getAncientConfig();
|
|
|
|
|
2013-01-01 23:09:17 +01:00
|
|
|
$all_keys = PhabricatorEnv::getAllConfigKeys();
|
|
|
|
$all_keys = array_keys($all_keys);
|
|
|
|
sort($all_keys);
|
|
|
|
|
|
|
|
$defined_keys = PhabricatorApplicationConfigOptions::loadAllOptions();
|
|
|
|
|
|
|
|
foreach ($all_keys as $key) {
|
|
|
|
if (isset($defined_keys[$key])) {
|
|
|
|
continue;
|
|
|
|
}
|
2013-06-26 20:01:19 +02:00
|
|
|
|
|
|
|
if (isset($ancient_config[$key])) {
|
|
|
|
$summary = pht(
|
|
|
|
'This option has been removed. You may delete it at your '.
|
|
|
|
'convenience.');
|
|
|
|
$message = pht(
|
|
|
|
"The configuration option '%s' has been removed. You may delete ".
|
|
|
|
"it at your convenience.".
|
|
|
|
"\n\n%s",
|
|
|
|
$key,
|
|
|
|
$ancient_config[$key]);
|
|
|
|
$short = pht('Obsolete Config');
|
|
|
|
$name = pht('Obsolete Configuration Option "%s"', $key);
|
|
|
|
} else {
|
|
|
|
$summary = pht("This option is not recognized. It may be misspelled.");
|
|
|
|
$message = pht(
|
|
|
|
"The configuration option '%s' is not recognized. It may be ".
|
|
|
|
"misspelled, or it might have existed in an older version of ".
|
|
|
|
"Phabricator. It has no effect, and should be corrected or deleted.",
|
|
|
|
$key);
|
|
|
|
$short = pht('Unknown Config');
|
|
|
|
$name = pht('Unknown Configuration Option "%s"', $key);
|
|
|
|
}
|
|
|
|
|
|
|
|
$issue = $this->newIssue('config.unknown.'.$key)
|
|
|
|
->setShortName($short)
|
|
|
|
->setName($name)
|
|
|
|
->setSummary($summary);
|
|
|
|
|
|
|
|
$stack = PhabricatorEnv::getConfigSourceStack();
|
|
|
|
$stack = $stack->getStack();
|
|
|
|
|
|
|
|
$found = array();
|
|
|
|
$found_local = false;
|
|
|
|
$found_database = false;
|
|
|
|
|
|
|
|
foreach ($stack as $source_key => $source) {
|
|
|
|
$value = $source->getKeys(array($key));
|
|
|
|
if ($value) {
|
|
|
|
$found[] = $source->getName();
|
|
|
|
if ($source instanceof PhabricatorConfigDatabaseSource) {
|
|
|
|
$found_database = true;
|
|
|
|
}
|
|
|
|
if ($source instanceof PhabricatorConfigLocalSource) {
|
|
|
|
$found_local = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$message = $message."\n\n".pht(
|
2013-06-28 18:40:40 +02:00
|
|
|
"This configuration value is defined in these %d ".
|
2013-06-26 20:01:19 +02:00
|
|
|
"configuration source(s): %s.",
|
|
|
|
count($found),
|
|
|
|
implode(', ', $found));
|
|
|
|
$issue->setMessage($message);
|
|
|
|
|
|
|
|
if ($found_local) {
|
|
|
|
$command = csprintf('phabricator/ $ ./bin/config delete %s', $key);
|
|
|
|
$issue->addCommand($command);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found_database) {
|
|
|
|
$issue->addPhabricatorConfig($key);
|
|
|
|
}
|
2013-01-01 23:09:17 +01:00
|
|
|
}
|
|
|
|
}
|
2013-06-26 20:01:19 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return a map of deleted config options. Keys are option keys; values are
|
|
|
|
* explanations of what happened to the option.
|
|
|
|
*/
|
|
|
|
public static function getAncientConfig() {
|
|
|
|
$reason_auth = pht(
|
|
|
|
'This option has been migrated to the "Auth" application. Your old '.
|
|
|
|
'configuration is still in effect, but now stored in "Auth" instead of '.
|
|
|
|
'configuration. Going forward, you can manage authentication from '.
|
|
|
|
'the web UI.');
|
|
|
|
|
|
|
|
$auth_config = array(
|
|
|
|
'controller.oauth-registration',
|
|
|
|
'auth.password-auth-enabled',
|
|
|
|
'facebook.auth-enabled',
|
|
|
|
'facebook.registration-enabled',
|
|
|
|
'facebook.auth-permanent',
|
|
|
|
'facebook.application-id',
|
|
|
|
'facebook.application-secret',
|
|
|
|
'facebook.require-https-auth',
|
|
|
|
'github.auth-enabled',
|
|
|
|
'github.registration-enabled',
|
|
|
|
'github.auth-permanent',
|
|
|
|
'github.application-id',
|
|
|
|
'github.application-secret',
|
|
|
|
'google.auth-enabled',
|
|
|
|
'google.registration-enabled',
|
|
|
|
'google.auth-permanent',
|
|
|
|
'google.application-id',
|
|
|
|
'google.application-secret',
|
|
|
|
'ldap.auth-enabled',
|
|
|
|
'ldap.hostname',
|
|
|
|
'ldap.port',
|
|
|
|
'ldap.base_dn',
|
|
|
|
'ldap.search_attribute',
|
|
|
|
'ldap.search-first',
|
|
|
|
'ldap.username-attribute',
|
|
|
|
'ldap.real_name_attributes',
|
|
|
|
'ldap.activedirectory_domain',
|
|
|
|
'ldap.version',
|
|
|
|
'ldap.referrals',
|
|
|
|
'ldap.anonymous-user-name',
|
|
|
|
'ldap.anonymous-user-password',
|
|
|
|
'ldap.start-tls',
|
|
|
|
'disqus.auth-enabled',
|
|
|
|
'disqus.registration-enabled',
|
|
|
|
'disqus.auth-permanent',
|
|
|
|
'disqus.application-id',
|
|
|
|
'disqus.application-secret',
|
|
|
|
'phabricator.oauth-uri',
|
|
|
|
'phabricator.auth-enabled',
|
|
|
|
'phabricator.registration-enabled',
|
|
|
|
'phabricator.auth-permanent',
|
|
|
|
'phabricator.application-id',
|
|
|
|
'phabricator.application-secret',
|
|
|
|
);
|
|
|
|
|
|
|
|
$ancient_config = array_fill_keys($auth_config, $reason_auth);
|
|
|
|
|
2013-10-25 02:26:07 +02:00
|
|
|
$markup_reason = pht(
|
|
|
|
'Custom remarkup rules are now added by subclassing '.
|
|
|
|
'PhabricatorRemarkupCustomInlineRule or '.
|
|
|
|
'PhabricatorRemarkupCustomBlockRule.');
|
|
|
|
|
2013-07-21 15:34:21 +02:00
|
|
|
$ancient_config += array(
|
|
|
|
'phid.external-loaders' =>
|
|
|
|
pht(
|
|
|
|
'External loaders have been replaced. Extend `PhabricatorPHIDType` '.
|
|
|
|
'to implement new PHID and handle types.'),
|
2013-09-17 00:58:35 +02:00
|
|
|
'maniphest.custom-task-extensions-class' =>
|
|
|
|
pht(
|
|
|
|
'Maniphest fields are now loaded automatically. You can configure '.
|
|
|
|
'them with `maniphest.fields`.'),
|
2013-09-19 20:56:15 +02:00
|
|
|
'maniphest.custom-fields' =>
|
|
|
|
pht(
|
|
|
|
'Maniphest fields are now defined in '.
|
|
|
|
'`maniphest.custom-field-definitions`. Existing definitions have '.
|
|
|
|
'been migrated.'),
|
2013-10-25 02:26:07 +02:00
|
|
|
'differential.custom-remarkup-rules' => $markup_reason,
|
|
|
|
'differential.custom-remarkup-block-rules' => $markup_reason,
|
2013-10-26 23:32:47 +02:00
|
|
|
'auth.sshkeys.enabled' => pht(
|
|
|
|
'SSH keys are now actually useful, so they are always enabled.'),
|
2013-07-21 15:34:21 +02:00
|
|
|
);
|
|
|
|
|
2013-06-26 20:01:19 +02:00
|
|
|
return $ancient_config;
|
|
|
|
}
|
2013-01-01 23:09:17 +01:00
|
|
|
}
|