2011-02-06 07:36:21 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Copyright 2011 Facebook, Inc.
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
class PhabricatorUserSettingsController extends PhabricatorPeopleController {
|
|
|
|
|
|
|
|
private $page;
|
2011-07-18 17:02:00 +02:00
|
|
|
private $pages;
|
2011-02-06 07:36:21 +01:00
|
|
|
|
|
|
|
public function willProcessRequest(array $data) {
|
|
|
|
$this->page = idx($data, 'page');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function processRequest() {
|
|
|
|
|
|
|
|
$request = $this->getRequest();
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
$this->pages = array(
|
2011-02-20 01:46:14 +01:00
|
|
|
'account' => 'Account',
|
2011-07-25 00:03:59 +02:00
|
|
|
'profile' => 'Profile',
|
2011-02-20 01:46:14 +01:00
|
|
|
'email' => 'Email',
|
Add change password settings panel
Summary:
In password-based auth environments, there is now a user settings
panel to allow them to change their password.
Test Plan:
Click settings, choose password from the left:
* enter current password, new password (twice), log out, and log in with
new password
* enter current password, non-matching passwords, and get error
* enter invalid old password, and get error
* use firebug to change csrf token and verify that it does not save with
and invalid token
Changed config to disable password auth, loaded settings panel and saw
that password was no longer visible. Tried loading the panel anyway and
got redirected.
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, epriestley
Differential Revision: 890
2011-09-04 10:53:58 +02:00
|
|
|
'password' => 'Password',
|
2011-07-24 20:02:08 +02:00
|
|
|
'preferences' => 'Preferences',
|
2011-07-18 17:02:00 +02:00
|
|
|
'conduit' => 'Conduit Certificate',
|
2011-02-06 07:36:21 +01:00
|
|
|
);
|
|
|
|
|
Add change password settings panel
Summary:
In password-based auth environments, there is now a user settings
panel to allow them to change their password.
Test Plan:
Click settings, choose password from the left:
* enter current password, new password (twice), log out, and log in with
new password
* enter current password, non-matching passwords, and get error
* enter invalid old password, and get error
* use firebug to change csrf token and verify that it does not save with
and invalid token
Changed config to disable password auth, loaded settings panel and saw
that password was no longer visible. Tried loading the panel anyway and
got redirected.
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, epriestley
Differential Revision: 890
2011-09-04 10:53:58 +02:00
|
|
|
if (!PhabricatorEnv::getEnvConfig('account.editable') ||
|
|
|
|
!PhabricatorEnv::getEnvConfig('auth.password-auth-enabled')) {
|
|
|
|
unset($this->pages['password']);
|
|
|
|
}
|
|
|
|
|
2011-07-24 20:02:08 +02:00
|
|
|
if (PhabricatorUserSSHKeysSettingsPanelController::isEnabled()) {
|
|
|
|
$this->pages['sshkeys'] = 'SSH Public Keys';
|
|
|
|
}
|
|
|
|
|
2011-02-22 07:51:34 +01:00
|
|
|
$oauth_providers = PhabricatorOAuthProvider::getAllProviders();
|
|
|
|
foreach ($oauth_providers as $provider) {
|
|
|
|
if (!$provider->isProviderEnabled()) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$key = $provider->getProviderKey();
|
|
|
|
$name = $provider->getProviderName();
|
2011-07-18 17:02:00 +02:00
|
|
|
$this->pages[$key] = $name.' Account';
|
2011-02-22 07:51:34 +01:00
|
|
|
}
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
if (empty($this->pages[$this->page])) {
|
|
|
|
$this->page = key($this->pages);
|
2011-02-06 07:36:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
switch ($this->page) {
|
2011-02-06 08:56:06 +01:00
|
|
|
case 'account':
|
2011-07-18 17:02:00 +02:00
|
|
|
$delegate = new PhabricatorUserAccountSettingsPanelController($request);
|
2011-02-06 08:56:06 +01:00
|
|
|
break;
|
2011-07-25 00:03:59 +02:00
|
|
|
case 'profile':
|
|
|
|
$delegate = new PhabricatorUserProfileSettingsPanelController($request);
|
|
|
|
break;
|
2011-02-20 01:46:14 +01:00
|
|
|
case 'email':
|
2011-07-18 17:02:00 +02:00
|
|
|
$delegate = new PhabricatorUserEmailSettingsPanelController($request);
|
|
|
|
break;
|
Add change password settings panel
Summary:
In password-based auth environments, there is now a user settings
panel to allow them to change their password.
Test Plan:
Click settings, choose password from the left:
* enter current password, new password (twice), log out, and log in with
new password
* enter current password, non-matching passwords, and get error
* enter invalid old password, and get error
* use firebug to change csrf token and verify that it does not save with
and invalid token
Changed config to disable password auth, loaded settings panel and saw
that password was no longer visible. Tried loading the panel anyway and
got redirected.
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, epriestley
Differential Revision: 890
2011-09-04 10:53:58 +02:00
|
|
|
case 'password':
|
|
|
|
$delegate = new PhabricatorUserPasswordSettingsPanelController(
|
|
|
|
$request);
|
|
|
|
break;
|
2011-07-18 17:02:00 +02:00
|
|
|
case 'conduit':
|
|
|
|
$delegate = new PhabricatorUserConduitSettingsPanelController($request);
|
2011-02-20 01:46:14 +01:00
|
|
|
break;
|
2011-07-22 19:17:57 +02:00
|
|
|
case 'sshkeys':
|
|
|
|
$delegate = new PhabricatorUserSSHKeysSettingsPanelController($request);
|
|
|
|
break;
|
2011-07-24 20:02:08 +02:00
|
|
|
case 'preferences':
|
|
|
|
$delegate = new PhabricatorUserPreferenceSettingsPanelController(
|
|
|
|
$request);
|
|
|
|
break;
|
2011-02-06 07:36:21 +01:00
|
|
|
default:
|
2011-07-18 17:02:00 +02:00
|
|
|
if (empty($this->pages[$this->page])) {
|
2011-02-22 07:51:34 +01:00
|
|
|
return new Aphront404Response();
|
|
|
|
}
|
2011-07-18 17:02:00 +02:00
|
|
|
$delegate = new PhabricatorUserOAuthSettingsPanelController($request);
|
|
|
|
$delegate->setOAuthProvider($oauth_providers[$this->page]);
|
2011-02-06 07:36:21 +01:00
|
|
|
}
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
$response = $this->delegateToController($delegate);
|
2011-02-06 07:36:21 +01:00
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
if ($response instanceof AphrontView) {
|
|
|
|
$sidenav = $this->renderSideNav();
|
|
|
|
$sidenav->appendChild($response);
|
|
|
|
return $this->buildStandardPageResponse(
|
|
|
|
$sidenav,
|
|
|
|
array(
|
|
|
|
'title' => 'Account Settings',
|
|
|
|
));
|
|
|
|
} else {
|
|
|
|
return $response;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private function renderSideNav() {
|
2011-02-06 07:36:21 +01:00
|
|
|
$sidenav = new AphrontSideNavView();
|
2011-07-18 17:02:00 +02:00
|
|
|
foreach ($this->pages as $page => $name) {
|
2011-02-06 07:36:21 +01:00
|
|
|
$sidenav->addNavItem(
|
|
|
|
phutil_render_tag(
|
|
|
|
'a',
|
|
|
|
array(
|
|
|
|
'href' => '/settings/page/'.$page.'/',
|
|
|
|
'class' => ($page == $this->page)
|
|
|
|
? 'aphront-side-nav-selected'
|
|
|
|
: null,
|
|
|
|
),
|
|
|
|
phutil_escape_html($name)));
|
|
|
|
}
|
2011-07-18 17:02:00 +02:00
|
|
|
return $sidenav;
|
2011-02-22 07:51:34 +01:00
|
|
|
}
|
2011-06-18 22:07:02 +02:00
|
|
|
}
|