mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-20 10:48:40 +01:00
Summary: Ref T7153. I am not sure if this is 100% correct because sometimes you have to POST vs GET and I don't know if the redirect response will / can do the right thing? I think options to fix this would be to 1) restrict this functionality to JUST the Phabricator OAuth provider type or 2) something really fancy with an HTTP(S) future. The other rub right now is when you logout you get half auto-logged in again... Thoughts on that? Test Plan: setup my local instance to JUST have phabricator oauth available to login. was presented with the dialog automagically...! Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin, epriestley Maniphest Tasks: T7153 Differential Revision: https://secure.phabricator.com/D11701
137 lines
3.5 KiB
PHP
137 lines
3.5 KiB
PHP
<?php
|
|
|
|
final class PhabricatorAuthProviderConfig
|
|
extends PhabricatorAuthDAO
|
|
implements
|
|
PhabricatorApplicationTransactionInterface,
|
|
PhabricatorPolicyInterface {
|
|
|
|
protected $providerClass;
|
|
protected $providerType;
|
|
protected $providerDomain;
|
|
|
|
protected $isEnabled;
|
|
protected $shouldAllowLogin = 0;
|
|
protected $shouldAllowRegistration = 0;
|
|
protected $shouldAllowLink = 0;
|
|
protected $shouldAllowUnlink = 0;
|
|
protected $shouldTrustEmails = 0;
|
|
protected $shouldAutoLogin = 0;
|
|
|
|
protected $properties = array();
|
|
|
|
private $provider;
|
|
|
|
public function generatePHID() {
|
|
return PhabricatorPHID::generateNewPHID(
|
|
PhabricatorAuthAuthProviderPHIDType::TYPECONST);
|
|
}
|
|
|
|
protected function getConfiguration() {
|
|
return array(
|
|
self::CONFIG_AUX_PHID => true,
|
|
self::CONFIG_SERIALIZATION => array(
|
|
'properties' => self::SERIALIZATION_JSON,
|
|
),
|
|
self::CONFIG_COLUMN_SCHEMA => array(
|
|
'isEnabled' => 'bool',
|
|
'providerClass' => 'text128',
|
|
'providerType' => 'text32',
|
|
'providerDomain' => 'text128',
|
|
'shouldAllowLogin' => 'bool',
|
|
'shouldAllowRegistration' => 'bool',
|
|
'shouldAllowLink' => 'bool',
|
|
'shouldAllowUnlink' => 'bool',
|
|
'shouldTrustEmails' => 'bool',
|
|
'shouldAutoLogin' => 'bool',
|
|
),
|
|
self::CONFIG_KEY_SCHEMA => array(
|
|
'key_provider' => array(
|
|
'columns' => array('providerType', 'providerDomain'),
|
|
'unique' => true,
|
|
),
|
|
'key_class' => array(
|
|
'columns' => array('providerClass'),
|
|
),
|
|
),
|
|
) + parent::getConfiguration();
|
|
}
|
|
|
|
public function getProperty($key, $default = null) {
|
|
return idx($this->properties, $key, $default);
|
|
}
|
|
|
|
public function setProperty($key, $value) {
|
|
$this->properties[$key] = $value;
|
|
return $this;
|
|
}
|
|
|
|
public function getProvider() {
|
|
if (!$this->provider) {
|
|
$base = PhabricatorAuthProvider::getAllBaseProviders();
|
|
$found = null;
|
|
foreach ($base as $provider) {
|
|
if (get_class($provider) == $this->providerClass) {
|
|
$found = $provider;
|
|
break;
|
|
}
|
|
}
|
|
if ($found) {
|
|
$this->provider = id(clone $found)->attachProviderConfig($this);
|
|
}
|
|
}
|
|
return $this->provider;
|
|
}
|
|
|
|
|
|
/* -( PhabricatorApplicationTransactionInterface )------------------------- */
|
|
|
|
|
|
public function getApplicationTransactionEditor() {
|
|
return new PhabricatorAuthProviderConfigEditor();
|
|
}
|
|
|
|
public function getApplicationTransactionObject() {
|
|
return $this;
|
|
}
|
|
|
|
public function getApplicationTransactionTemplate() {
|
|
return new PhabricatorAuthProviderConfigTransaction();
|
|
}
|
|
|
|
public function willRenderTimeline(
|
|
PhabricatorApplicationTransactionView $timeline,
|
|
AphrontRequest $request) {
|
|
|
|
return $timeline;
|
|
}
|
|
|
|
|
|
/* -( PhabricatorPolicyInterface )----------------------------------------- */
|
|
|
|
|
|
public function getCapabilities() {
|
|
return array(
|
|
PhabricatorPolicyCapability::CAN_VIEW,
|
|
PhabricatorPolicyCapability::CAN_EDIT,
|
|
);
|
|
}
|
|
|
|
public function getPolicy($capability) {
|
|
switch ($capability) {
|
|
case PhabricatorPolicyCapability::CAN_VIEW:
|
|
return PhabricatorPolicies::POLICY_USER;
|
|
case PhabricatorPolicyCapability::CAN_EDIT:
|
|
return PhabricatorPolicies::POLICY_ADMIN;
|
|
}
|
|
}
|
|
|
|
public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
|
|
return false;
|
|
}
|
|
|
|
public function describeAutomaticCapability($capability) {
|
|
return null;
|
|
}
|
|
|
|
}
|