mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-26 00:32:42 +01:00
Add Disqus, Facebook, Google, GitHub auth config; AWS config
Summary: Also improve behavior for the "unknown config" warning. Test Plan: Looked at configs, went through unknown config workflow. Reviewers: btrahan, codeblock Reviewed By: btrahan CC: aran Maniphest Tasks: T2255 Differential Revision: https://secure.phabricator.com/D4310
This commit is contained in:
parent
a3bff35b2b
commit
8a52a6d585
11 changed files with 348 additions and 34 deletions
|
@ -569,6 +569,7 @@ phutil_register_library_map(array(
|
|||
'PackageMail' => 'applications/owners/mail/PackageMail.php',
|
||||
'PackageModifyMail' => 'applications/owners/mail/PackageModifyMail.php',
|
||||
'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php',
|
||||
'PhabricatorAWSConfigOptions' => 'applications/config/option/PhabricatorAWSConfigOptions.php',
|
||||
'PhabricatorAccessLog' => 'infrastructure/PhabricatorAccessLog.php',
|
||||
'PhabricatorAccessLogConfigOptions' => 'applications/config/option/PhabricatorAccessLogConfigOptions.php',
|
||||
'PhabricatorActionListExample' => 'applications/uiexample/examples/PhabricatorActionListExample.php',
|
||||
|
@ -734,6 +735,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDirectoryController' => 'applications/directory/controller/PhabricatorDirectoryController.php',
|
||||
'PhabricatorDirectoryMainController' => 'applications/directory/controller/PhabricatorDirectoryMainController.php',
|
||||
'PhabricatorDisabledUserController' => 'applications/auth/controller/PhabricatorDisabledUserController.php',
|
||||
'PhabricatorDisqusConfigOptions' => 'applications/config/option/PhabricatorDisqusConfigOptions.php',
|
||||
'PhabricatorDraft' => 'applications/draft/storage/PhabricatorDraft.php',
|
||||
'PhabricatorDraftDAO' => 'applications/draft/storage/PhabricatorDraftDAO.php',
|
||||
'PhabricatorEdgeConfig' => 'infrastructure/edges/constants/PhabricatorEdgeConfig.php',
|
||||
|
@ -755,6 +757,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorEventEngine' => 'infrastructure/events/PhabricatorEventEngine.php',
|
||||
'PhabricatorEventType' => 'infrastructure/events/constant/PhabricatorEventType.php',
|
||||
'PhabricatorExampleEventListener' => 'infrastructure/events/PhabricatorExampleEventListener.php',
|
||||
'PhabricatorFacebookConfigOptions' => 'applications/config/option/PhabricatorFacebookConfigOptions.php',
|
||||
'PhabricatorFactAggregate' => 'applications/fact/storage/PhabricatorFactAggregate.php',
|
||||
'PhabricatorFactChartController' => 'applications/fact/controller/PhabricatorFactChartController.php',
|
||||
'PhabricatorFactController' => 'applications/fact/controller/PhabricatorFactController.php',
|
||||
|
@ -836,8 +839,10 @@ phutil_register_library_map(array(
|
|||
'PhabricatorFormExample' => 'applications/uiexample/examples/PhabricatorFormExample.php',
|
||||
'PhabricatorGarbageCollectorDaemon' => 'infrastructure/daemon/PhabricatorGarbageCollectorDaemon.php',
|
||||
'PhabricatorGitGraphStream' => 'applications/repository/daemon/PhabricatorGitGraphStream.php',
|
||||
'PhabricatorGitHubConfigOptions' => 'applications/config/option/PhabricatorGitHubConfigOptions.php',
|
||||
'PhabricatorGlobalLock' => 'infrastructure/util/PhabricatorGlobalLock.php',
|
||||
'PhabricatorGlobalUploadTargetView' => 'applications/files/view/PhabricatorGlobalUploadTargetView.php',
|
||||
'PhabricatorGoogleConfigOptions' => 'applications/config/option/PhabricatorGoogleConfigOptions.php',
|
||||
'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/PhabricatorHandleObjectSelectorDataView.php',
|
||||
'PhabricatorHash' => 'infrastructure/util/PhabricatorHash.php',
|
||||
'PhabricatorHashTestCase' => 'infrastructure/util/__tests__/PhabricatorHashTestCase.php',
|
||||
|
@ -1887,6 +1892,7 @@ phutil_register_library_map(array(
|
|||
'PackageDeleteMail' => 'PackageMail',
|
||||
'PackageModifyMail' => 'PackageMail',
|
||||
'Phabricator404Controller' => 'PhabricatorController',
|
||||
'PhabricatorAWSConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
||||
'PhabricatorAccessLogConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
||||
'PhabricatorActionListExample' => 'PhabricatorUIExample',
|
||||
'PhabricatorActionListView' => 'AphrontView',
|
||||
|
@ -2025,7 +2031,11 @@ phutil_register_library_map(array(
|
|||
'PhabricatorConfigLocalSource' => 'PhabricatorConfigProxySource',
|
||||
'PhabricatorConfigManagementSetWorkflow' => 'PhabricatorConfigManagementWorkflow',
|
||||
'PhabricatorConfigManagementWorkflow' => 'PhutilArgumentWorkflow',
|
||||
'PhabricatorConfigOption' => 'Phobject',
|
||||
'PhabricatorConfigOption' =>
|
||||
array(
|
||||
0 => 'Phobject',
|
||||
1 => 'PhabricatorMarkupInterface',
|
||||
),
|
||||
'PhabricatorConfigProxySource' => 'PhabricatorConfigSource',
|
||||
'PhabricatorConfigStackSource' => 'PhabricatorConfigSource',
|
||||
'PhabricatorContentSourceView' => 'AphrontView',
|
||||
|
@ -2059,6 +2069,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDirectoryController' => 'PhabricatorController',
|
||||
'PhabricatorDirectoryMainController' => 'PhabricatorDirectoryController',
|
||||
'PhabricatorDisabledUserController' => 'PhabricatorAuthController',
|
||||
'PhabricatorDisqusConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
||||
'PhabricatorDraft' => 'PhabricatorDraftDAO',
|
||||
'PhabricatorDraftDAO' => 'PhabricatorLiskDAO',
|
||||
'PhabricatorEdgeConfig' => 'PhabricatorEdgeConstants',
|
||||
|
@ -2077,6 +2088,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorEvent' => 'PhutilEvent',
|
||||
'PhabricatorEventType' => 'PhutilEventType',
|
||||
'PhabricatorExampleEventListener' => 'PhutilEventListener',
|
||||
'PhabricatorFacebookConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
||||
'PhabricatorFactAggregate' => 'PhabricatorFactDAO',
|
||||
'PhabricatorFactChartController' => 'PhabricatorFactController',
|
||||
'PhabricatorFactController' => 'PhabricatorController',
|
||||
|
@ -2156,8 +2168,10 @@ phutil_register_library_map(array(
|
|||
'PhabricatorFlagsUIEventListener' => 'PhutilEventListener',
|
||||
'PhabricatorFormExample' => 'PhabricatorUIExample',
|
||||
'PhabricatorGarbageCollectorDaemon' => 'PhabricatorDaemon',
|
||||
'PhabricatorGitHubConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
||||
'PhabricatorGlobalLock' => 'PhutilLock',
|
||||
'PhabricatorGlobalUploadTargetView' => 'AphrontView',
|
||||
'PhabricatorGoogleConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
||||
'PhabricatorHashTestCase' => 'PhabricatorTestCase',
|
||||
'PhabricatorHeaderView' => 'AphrontView',
|
||||
'PhabricatorHelpController' => 'PhabricatorController',
|
||||
|
|
|
@ -15,9 +15,10 @@ final class PhabricatorSetupCheckExtraConfig extends PhabricatorSetupCheck {
|
|||
}
|
||||
$summary = pht("This option is not recognized. It may be misspelled.");
|
||||
$message = pht(
|
||||
"This configuration option 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.");
|
||||
"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);
|
||||
|
||||
$this
|
||||
->newIssue('config.unknown.'.$key)
|
||||
|
|
|
@ -16,11 +16,24 @@ final class PhabricatorConfigEditController
|
|||
|
||||
$options = PhabricatorApplicationConfigOptions::loadAllOptions();
|
||||
if (empty($options[$this->key])) {
|
||||
return new Aphront404Response();
|
||||
// This may be a dead config entry, which existed in the past but no
|
||||
// longer exists. Allow it to be edited so it can be reviewed and
|
||||
// deleted.
|
||||
$option = id(new PhabricatorConfigOption())
|
||||
->setKey($this->key)
|
||||
->setType('wild')
|
||||
->setDefault(null)
|
||||
->setDescription(
|
||||
pht(
|
||||
"This configuration option is unknown. It may be misspelled, ".
|
||||
"or have existed in a previous version of Phabricator."));
|
||||
$group = null;
|
||||
$group_uri = $this->getApplicationURI();
|
||||
} else {
|
||||
$option = $options[$this->key];
|
||||
$group = $option->getGroup();
|
||||
$group_uri = $this->getApplicationURI('group/'.$group->getKey().'/');
|
||||
}
|
||||
$option = $options[$this->key];
|
||||
$group = $option->getGroup();
|
||||
$group_uri = $this->getApplicationURI('group/'.$group->getKey().'/');
|
||||
|
||||
$issue = $request->getStr('issue');
|
||||
if ($issue) {
|
||||
|
@ -127,19 +140,22 @@ final class PhabricatorConfigEditController
|
|||
$short = pht('Edit');
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs
|
||||
->addCrumb(
|
||||
id(new PhabricatorCrumbView())
|
||||
->setName(pht('Config'))
|
||||
->setHref($this->getApplicationURI()))
|
||||
->addCrumb(
|
||||
$crumbs->addCrumb(
|
||||
id(new PhabricatorCrumbView())
|
||||
->setName(pht('Config'))
|
||||
->setHref($this->getApplicationURI()));
|
||||
|
||||
if ($group) {
|
||||
$crumbs->addCrumb(
|
||||
id(new PhabricatorCrumbView())
|
||||
->setName($group->getName())
|
||||
->setHref($group_uri))
|
||||
->addCrumb(
|
||||
id(new PhabricatorCrumbView())
|
||||
->setName($this->key)
|
||||
->setHref('/config/edit/'.$this->key));
|
||||
->setHref($group_uri));
|
||||
}
|
||||
|
||||
$crumbs->addCrumb(
|
||||
id(new PhabricatorCrumbView())
|
||||
->setName($this->key)
|
||||
->setHref('/config/edit/'.$this->key));
|
||||
|
||||
return $this->buildApplicationPage(
|
||||
array(
|
||||
|
|
|
@ -13,8 +13,6 @@ final class PhabricatorConfigIssueViewController
|
|||
$request = $this->getRequest();
|
||||
$user = $request->getUser();
|
||||
|
||||
$nav = $this->buildSideNavView();
|
||||
|
||||
$issues = PhabricatorSetupCheck::runAllChecks();
|
||||
PhabricatorSetupCheck::setOpenSetupIssueCount(count($issues));
|
||||
|
||||
|
@ -37,10 +35,8 @@ final class PhabricatorConfigIssueViewController
|
|||
$title = $issue->getShortName();
|
||||
}
|
||||
|
||||
$nav->appendChild($content);
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs($nav)
|
||||
->buildApplicationCrumbs()
|
||||
->addCrumb(
|
||||
id(new PhabricatorCrumbView())
|
||||
->setName(pht('Setup Issues'))
|
||||
|
@ -50,10 +46,11 @@ final class PhabricatorConfigIssueViewController
|
|||
->setName($title)
|
||||
->setHref($request->getRequestURI()));
|
||||
|
||||
$nav->setCrumbs($crumbs);
|
||||
|
||||
return $this->buildApplicationPage(
|
||||
$nav,
|
||||
array(
|
||||
$crumbs,
|
||||
$content,
|
||||
),
|
||||
array(
|
||||
'title' => $title,
|
||||
'device' => true,
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorAWSConfigOptions
|
||||
extends PhabricatorApplicationConfigOptions {
|
||||
|
||||
public function getName() {
|
||||
return pht("Amazon Web Services");
|
||||
}
|
||||
|
||||
public function getDescription() {
|
||||
return pht("Configure integration with AWS (EC2, SES, S3, etc).");
|
||||
}
|
||||
|
||||
public function getOptions() {
|
||||
return array(
|
||||
$this->newOption('amazon-ses.access-key', 'string', null)
|
||||
->setDescription(pht('Access key for Amazon SES.')),
|
||||
$this->newOption('amazon-ses.secret-key', 'string', null)
|
||||
->setDescription(pht('Secret key for Amazon SES.')),
|
||||
$this->newOption('amazon-s3.access-key', 'string', null)
|
||||
->setDescription(pht('Access key for Amazon S3.')),
|
||||
$this->newOption('amazon-s3.secret-key', 'string', null)
|
||||
->setDescription(pht('Secret key for Amazon S3.')),
|
||||
$this->newOption('amazon-s3.endpoint', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'Explicit S3 endpoint to use. Leave empty to have Phabricator '.
|
||||
'select and endpoint. Normally, you do not need to set this.'))
|
||||
->addExample(null, 'Use default endpoint')
|
||||
->addExample('s3.amazon.com', 'Use specific endpoint'),
|
||||
$this->newOption('amazon-ec2.access-key', 'string', null)
|
||||
->setDescription(pht('Access key for Amazon EC2.')),
|
||||
$this->newOption('amazon-ec2.secret-key', 'string', null)
|
||||
->setDescription(pht('Secret key for Amazon EC2.')),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -64,6 +64,9 @@ final class PhabricatorConfigOption
|
|||
}
|
||||
|
||||
public function getSummary() {
|
||||
if (empty($this->summary)) {
|
||||
return $this->getDescription();
|
||||
}
|
||||
return $this->summary;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDisqusConfigOptions
|
||||
extends PhabricatorApplicationConfigOptions {
|
||||
|
||||
public function getName() {
|
||||
return pht("Integration with Disqus");
|
||||
}
|
||||
|
||||
public function getDescription() {
|
||||
return pht("Disqus authentication and integration options.");
|
||||
}
|
||||
|
||||
public function getOptions() {
|
||||
return array(
|
||||
$this->newOption('disqus.auth-enabled', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Disable Disqus Authentication"),
|
||||
pht("Enable Disqus Authentication"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Allow users to login to Phabricator using Disqus credentials.')),
|
||||
$this->newOption('disqus.registration-enabled', 'bool', true)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Disable Disqus Registration"),
|
||||
pht("Enable Disqus Registration"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Allow users to create new Phabricator accounts using Disqus '.
|
||||
'credentials.')),
|
||||
$this->newOption('disqus.auth-permanent', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Allow Disqus Account Unlinking"),
|
||||
pht("Permanently Bind Disqus Accounts"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Are Phabricator accounts permanently bound to Disqus '.
|
||||
'accounts?')),
|
||||
$this->newOption('disqus.application-id', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'Disqus "Client ID" to use for Disqus API access.')),
|
||||
$this->newOption('disqus.application-secret', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'Disqus "Secret" to use for Diqsus API access.')),
|
||||
$this->newOption('disqus.shortname', 'string', null)
|
||||
->setSummary(pht("Shortname for Disqus comment widget."))
|
||||
->setDescription(
|
||||
pht(
|
||||
"Website shortname to use for Disqus comment widget in Phame. ".
|
||||
"For more information, see:\n\n".
|
||||
"[[http://docs.disqus.com/help/4/ | Disqus Quick Start Guide]]\n".
|
||||
"[[http://docs.disqus.com/help/68/ | Information on Shortnames]]")),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorFacebookConfigOptions
|
||||
extends PhabricatorApplicationConfigOptions {
|
||||
|
||||
public function getName() {
|
||||
return pht("Integration with Facebook");
|
||||
}
|
||||
|
||||
public function getDescription() {
|
||||
return pht("Facebook authentication and integration options.");
|
||||
}
|
||||
|
||||
public function getOptions() {
|
||||
return array(
|
||||
$this->newOption('facebook.auth-enabled', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Disable Facebook Authentication"),
|
||||
pht("Enable Facebook Authentication"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Allow users to login to Phabricator using Facebook credentials.')),
|
||||
$this->newOption('facebook.registration-enabled', 'bool', true)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Disable Facebook Registration"),
|
||||
pht("Enable Facebook Registration"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Allow users to create new Phabricator accounts using Facebook '.
|
||||
'credentials.')),
|
||||
$this->newOption('facebook.auth-permanent', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Allow Facebook Account Unlinking"),
|
||||
pht("Permanently Bind Facebook Accounts"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Are Phabricator accounts permanently bound to Facebook '.
|
||||
'accounts?')),
|
||||
$this->newOption('facebook.application-id', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'Facebook "Application ID" to use for Facebook API access.')),
|
||||
$this->newOption('facebook.application-secret', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'Facebook "Application Secret" to use for Facebook API access.')),
|
||||
$this->newOption('facebook.require-https-auth', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Do Not Require HTTPS"),
|
||||
pht("Require HTTPS"),
|
||||
))
|
||||
->setSummary(
|
||||
pht(
|
||||
'Reject Facebook logins from accounts that do not have Facebook '.
|
||||
'configured in HTTPS-only mode.'))
|
||||
->setDescription(
|
||||
pht(
|
||||
'You can require users logging in via Facebook auth have Facebook '.
|
||||
'set to HTTPS-only, which ensures their Facebook cookies are '.
|
||||
'SSL-only. This makes it more difficult for an attacker to '.
|
||||
'escalate a cookie-sniffing attack which captures Facebook '.
|
||||
'credentials into Phabricator access, but will require users '.
|
||||
'change their Facebook settings if they do not have this mode '.
|
||||
'enabled.')),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorGitHubConfigOptions
|
||||
extends PhabricatorApplicationConfigOptions {
|
||||
|
||||
public function getName() {
|
||||
return pht("Integration with GitHub");
|
||||
}
|
||||
|
||||
public function getDescription() {
|
||||
return pht("GitHub authentication and integration options.");
|
||||
}
|
||||
|
||||
public function getOptions() {
|
||||
return array(
|
||||
$this->newOption('github.auth-enabled', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Disable GitHub Authentication"),
|
||||
pht("Enable GitHub Authentication"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Allow users to login to Phabricator using GitHub credentials.')),
|
||||
$this->newOption('github.registration-enabled', 'bool', true)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Disable GitHub Registration"),
|
||||
pht("Enable GitHub Registration"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Allow users to create new Phabricator accounts using GitHub '.
|
||||
'credentials.')),
|
||||
$this->newOption('github.auth-permanent', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Allow GitHub Account Unlinking"),
|
||||
pht("Permanently Bind GitHub Accounts"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Are Phabricator accounts permanently bound to GitHub '.
|
||||
'accounts?')),
|
||||
$this->newOption('github.application-id', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'GitHub "Client ID" to use for GitHub API access.')),
|
||||
$this->newOption('github.application-secret', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'GitHub "Secret" to use for GitHub API access.')),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorGoogleConfigOptions
|
||||
extends PhabricatorApplicationConfigOptions {
|
||||
|
||||
public function getName() {
|
||||
return pht("Integration with Google");
|
||||
}
|
||||
|
||||
public function getDescription() {
|
||||
return pht("Google authentication and integration options.");
|
||||
}
|
||||
|
||||
public function getOptions() {
|
||||
return array(
|
||||
$this->newOption('google.auth-enabled', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Disable Google Authentication"),
|
||||
pht("Enable Google Authentication"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Allow users to login to Phabricator using Google credentials.')),
|
||||
$this->newOption('google.registration-enabled', 'bool', true)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Disable Google Registration"),
|
||||
pht("Enable Google Registration"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Allow users to create new Phabricator accounts using Google '.
|
||||
'credentials.')),
|
||||
$this->newOption('google.auth-permanent', 'bool', false)
|
||||
->setOptions(
|
||||
array(
|
||||
pht("Allow Google Account Unlinking"),
|
||||
pht("Permanently Bind Google Accounts"),
|
||||
))
|
||||
->setDescription(
|
||||
pht(
|
||||
'Are Phabricator accounts permanently bound to Google '.
|
||||
'accounts?')),
|
||||
$this->newOption('google.application-id', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'Google "Client ID" to use for Google API access.')),
|
||||
$this->newOption('google.application-secret', 'string', null)
|
||||
->setDescription(
|
||||
pht(
|
||||
'Google "Secret" to use for Google API access.')),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -7,13 +7,7 @@ final class PhabricatorConfigEntry extends PhabricatorConfigEntryDAO {
|
|||
protected $namespace;
|
||||
protected $configKey;
|
||||
protected $value;
|
||||
|
||||
// TODO: Remove this default when implementing Transactions.
|
||||
protected $isDeleted = 0;
|
||||
|
||||
public function getURI() {
|
||||
return '/config/edit/'.$this->configKey;
|
||||
}
|
||||
protected $isDeleted;
|
||||
|
||||
public function getConfiguration() {
|
||||
return array(
|
||||
|
|
Loading…
Reference in a new issue