Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F93021127
PhabricatorPhabricatorAuthProvider.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Nov 25, 15:15
Size
6 KB
Mime Type
text/x-php
Expires
Wed, Nov 27, 15:15 (1 d, 21 h)
Engine
blob
Format
Raw Data
Handle
22559760
Attached To
rPH Phabricator
PhabricatorPhabricatorAuthProvider.php
View Options
<?php
final
class
PhabricatorPhabricatorAuthProvider
extends
PhabricatorOAuth2AuthProvider
{
const
PROPERTY_PHABRICATOR_NAME
=
'oauth2:phabricator:name'
;
const
PROPERTY_PHABRICATOR_URI
=
'oauth2:phabricator:uri'
;
public
function
getProviderName
()
{
return
pht
(
'Phabricator'
);
}
public
function
getConfigurationHelp
()
{
if
(
$this
->
isCreate
())
{
return
pht
(
"**Step 1 of 2 - Name Phabricator OAuth Instance**
\n\n
"
.
'Choose a permanent name for the OAuth server instance of '
.
'Phabricator. //This// instance of Phabricator uses this name '
.
'internally to keep track of the OAuth server instance of '
.
'Phabricator, in case the URL changes later.'
);
}
return
parent
::
getConfigurationHelp
();
}
protected
function
getProviderConfigurationHelp
()
{
$config
=
$this
->
getProviderConfig
();
$base_uri
=
rtrim
(
$config
->
getProperty
(
self
::
PROPERTY_PHABRICATOR_URI
),
'/'
);
$login_uri
=
PhabricatorEnv
::
getURI
(
$this
->
getLoginURI
());
return
pht
(
"**Step 2 of 2 - Configure Phabricator OAuth Instance**
\n\n
"
.
"To configure Phabricator OAuth, create a new application here:"
.
"
\n\n
"
.
"%s/oauthserver/client/create/"
.
"
\n\n
"
.
"When creating your application, use these settings:"
.
"
\n\n
"
.
" - **Redirect URI:** Set this to: `%s`"
.
"
\n\n
"
.
"After completing configuration, copy the **Client ID** and "
.
"**Client Secret** to the fields above. (You may need to generate the "
.
"client secret by clicking 'New Secret' first.)"
,
$base_uri
,
$login_uri
);
}
protected
function
newOAuthAdapter
()
{
$config
=
$this
->
getProviderConfig
();
return
id
(
new
PhutilPhabricatorAuthAdapter
())
->
setAdapterDomain
(
$config
->
getProviderDomain
())
->
setPhabricatorBaseURI
(
$config
->
getProperty
(
self
::
PROPERTY_PHABRICATOR_URI
));
}
protected
function
getLoginIcon
()
{
return
'Phabricator'
;
}
private
function
isCreate
()
{
return
!
$this
->
getProviderConfig
()->
getID
();
}
public
function
readFormValuesFromProvider
()
{
$config
=
$this
->
getProviderConfig
();
$uri
=
$config
->
getProperty
(
self
::
PROPERTY_PHABRICATOR_URI
);
return
parent
::
readFormValuesFromProvider
()
+
array
(
self
::
PROPERTY_PHABRICATOR_NAME
=>
$this
->
getProviderDomain
(),
self
::
PROPERTY_PHABRICATOR_URI
=>
$uri
,
);
}
public
function
readFormValuesFromRequest
(
AphrontRequest
$request
)
{
$is_setup
=
$this
->
isCreate
();
if
(
$is_setup
)
{
$parent_values
=
array
();
$name
=
$request
->
getStr
(
self
::
PROPERTY_PHABRICATOR_NAME
);
}
else
{
$parent_values
=
parent
::
readFormValuesFromRequest
(
$request
);
$name
=
$this
->
getProviderDomain
();
}
return
$parent_values
+
array
(
self
::
PROPERTY_PHABRICATOR_NAME
=>
$name
,
self
::
PROPERTY_PHABRICATOR_URI
=>
$request
->
getStr
(
self
::
PROPERTY_PHABRICATOR_URI
),
);
}
public
function
processEditForm
(
AphrontRequest
$request
,
array
$values
)
{
$is_setup
=
$this
->
isCreate
();
if
(!
$is_setup
)
{
list
(
$errors
,
$issues
,
$values
)
=
parent
::
processEditForm
(
$request
,
$values
);
}
else
{
$errors
=
array
();
$issues
=
array
();
}
$key_name
=
self
::
PROPERTY_PHABRICATOR_NAME
;
$key_uri
=
self
::
PROPERTY_PHABRICATOR_URI
;
if
(!
strlen
(
$values
[
$key_name
]))
{
$errors
[]
=
pht
(
'Phabricator instance name is required.'
);
$issues
[
$key_name
]
=
pht
(
'Required'
);
}
else
if
(!
preg_match
(
'/^[a-z0-9.]+
\z
/'
,
$values
[
$key_name
]))
{
$errors
[]
=
pht
(
'Phabricator instance name must contain only lowercase letters, '
.
'digits, and periods.'
);
$issues
[
$key_name
]
=
pht
(
'Invalid'
);
}
if
(!
strlen
(
$values
[
$key_uri
]))
{
$errors
[]
=
pht
(
'Phabricator base URI is required.'
);
$issues
[
$key_uri
]
=
pht
(
'Required'
);
}
else
{
$uri
=
new
PhutilURI
(
$values
[
$key_uri
]);
if
(!
$uri
->
getProtocol
())
{
$errors
[]
=
pht
(
'Phabricator base URI should include protocol (like "%s").'
,
'https://'
);
$issues
[
$key_uri
]
=
pht
(
'Invalid'
);
}
}
if
(!
$errors
&&
$is_setup
)
{
$config
=
$this
->
getProviderConfig
();
$config
->
setProviderDomain
(
$values
[
$key_name
]);
}
return
array
(
$errors
,
$issues
,
$values
);
}
public
function
extendEditForm
(
AphrontRequest
$request
,
AphrontFormView
$form
,
array
$values
,
array
$issues
)
{
$is_setup
=
$this
->
isCreate
();
$e_required
=
$request
->
isFormPost
()
?
null
:
true
;
$v_name
=
$values
[
self
::
PROPERTY_PHABRICATOR_NAME
];
if
(
$is_setup
)
{
$e_name
=
idx
(
$issues
,
self
::
PROPERTY_PHABRICATOR_NAME
,
$e_required
);
}
else
{
$e_name
=
null
;
}
$v_uri
=
$values
[
self
::
PROPERTY_PHABRICATOR_URI
];
$e_uri
=
idx
(
$issues
,
self
::
PROPERTY_PHABRICATOR_URI
,
$e_required
);
if
(
$is_setup
)
{
$form
->
appendChild
(
id
(
new
AphrontFormTextControl
())
->
setLabel
(
pht
(
'Phabricator Instance Name'
))
->
setValue
(
$v_name
)
->
setName
(
self
::
PROPERTY_PHABRICATOR_NAME
)
->
setError
(
$e_name
)
->
setCaption
(
pht
(
'Use lowercase letters, digits, and periods. For example: %s'
,
phutil_tag
(
'tt'
,
array
(),
'`phabricator.oauthserver`'
))));
}
else
{
$form
->
appendChild
(
id
(
new
AphrontFormStaticControl
())
->
setLabel
(
pht
(
'Phabricator Instance Name'
))
->
setValue
(
$v_name
));
}
$form
->
appendChild
(
id
(
new
AphrontFormTextControl
())
->
setLabel
(
pht
(
'Phabricator Base URI'
))
->
setValue
(
$v_uri
)
->
setName
(
self
::
PROPERTY_PHABRICATOR_URI
)
->
setCaption
(
pht
(
'The URI where the OAuth server instance of Phabricator is '
.
'installed. For example: %s'
,
phutil_tag
(
'tt'
,
array
(),
'https://phabricator.mycompany.com/'
)))
->
setError
(
$e_uri
));
if
(!
$is_setup
)
{
parent
::
extendEditForm
(
$request
,
$form
,
$values
,
$issues
);
}
}
public
function
hasSetupStep
()
{
return
true
;
}
}
Event Timeline
Log In to Comment