@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Remove the highly suspect "Import from LDAP" workflow

Summary: Depends on D20109. Ref T6703. This flow was contributed in 2012 and I'm not sure it ever worked, or at least ever worked nondestructively. For now, get rid of it. We'll do importing and external sync properly at some point (T3980, T13190).

Test Plan: Grepped for `ldap/`, grepped for controller.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T6703

Differential Revision: https://secure.phabricator.com/D20110

-221
-2
src/__phutil_library_map__.php
··· 3867 3867 'PhabricatorPeopleInviteController' => 'applications/people/controller/PhabricatorPeopleInviteController.php', 3868 3868 'PhabricatorPeopleInviteListController' => 'applications/people/controller/PhabricatorPeopleInviteListController.php', 3869 3869 'PhabricatorPeopleInviteSendController' => 'applications/people/controller/PhabricatorPeopleInviteSendController.php', 3870 - 'PhabricatorPeopleLdapController' => 'applications/people/controller/PhabricatorPeopleLdapController.php', 3871 3870 'PhabricatorPeopleListController' => 'applications/people/controller/PhabricatorPeopleListController.php', 3872 3871 'PhabricatorPeopleLogQuery' => 'applications/people/query/PhabricatorPeopleLogQuery.php', 3873 3872 'PhabricatorPeopleLogSearchEngine' => 'applications/people/query/PhabricatorPeopleLogSearchEngine.php', ··· 9866 9865 'PhabricatorPeopleInviteController' => 'PhabricatorPeopleController', 9867 9866 'PhabricatorPeopleInviteListController' => 'PhabricatorPeopleInviteController', 9868 9867 'PhabricatorPeopleInviteSendController' => 'PhabricatorPeopleInviteController', 9869 - 'PhabricatorPeopleLdapController' => 'PhabricatorPeopleController', 9870 9868 'PhabricatorPeopleListController' => 'PhabricatorPeopleController', 9871 9869 'PhabricatorPeopleLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 9872 9870 'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
-1
src/applications/people/application/PhabricatorPeopleApplication.php
··· 63 63 'welcome/(?P<id>[1-9]\d*)/' => 'PhabricatorPeopleWelcomeController', 64 64 'create/' => 'PhabricatorPeopleCreateController', 65 65 'new/(?P<type>[^/]+)/' => 'PhabricatorPeopleNewController', 66 - 'ldap/' => 'PhabricatorPeopleLdapController', 67 66 'editprofile/(?P<id>[1-9]\d*)/' => 68 67 'PhabricatorPeopleProfileEditController', 69 68 'badges/(?P<id>[1-9]\d*)/' =>
-4
src/applications/people/controller/PhabricatorPeopleController.php
··· 28 28 29 29 if ($viewer->getIsAdmin()) { 30 30 $nav->addLabel(pht('User Administration')); 31 - if (PhabricatorLDAPAuthProvider::getLDAPProvider()) { 32 - $nav->addFilter('ldap', pht('Import from LDAP')); 33 - } 34 - 35 31 $nav->addFilter('logs', pht('Activity Logs')); 36 32 $nav->addFilter('invite', pht('Email Invitations')); 37 33 }
-214
src/applications/people/controller/PhabricatorPeopleLdapController.php
··· 1 - <?php 2 - 3 - final class PhabricatorPeopleLdapController 4 - extends PhabricatorPeopleController { 5 - 6 - public function handleRequest(AphrontRequest $request) { 7 - $this->requireApplicationCapability( 8 - PeopleCreateUsersCapability::CAPABILITY); 9 - $admin = $request->getUser(); 10 - 11 - $content = array(); 12 - 13 - $form = id(new AphrontFormView()) 14 - ->setAction($request->getRequestURI() 15 - ->alter('search', 'true')->alter('import', null)) 16 - ->setUser($admin) 17 - ->appendChild( 18 - id(new AphrontFormTextControl()) 19 - ->setLabel(pht('LDAP username')) 20 - ->setName('username')) 21 - ->appendChild( 22 - id(new AphrontFormPasswordControl()) 23 - ->setDisableAutocomplete(true) 24 - ->setLabel(pht('Password')) 25 - ->setName('password')) 26 - ->appendChild( 27 - id(new AphrontFormTextControl()) 28 - ->setLabel(pht('LDAP query')) 29 - ->setCaption(pht('A filter such as %s.', '(objectClass=*)')) 30 - ->setName('query')) 31 - ->appendChild( 32 - id(new AphrontFormSubmitControl()) 33 - ->setValue(pht('Search'))); 34 - 35 - $panel = id(new PHUIObjectBoxView()) 36 - ->setHeaderText(pht('Import LDAP Users')) 37 - ->setForm($form); 38 - 39 - $crumbs = $this->buildApplicationCrumbs(); 40 - $crumbs->addTextCrumb( 41 - pht('Import LDAP Users'), 42 - $this->getApplicationURI('/ldap/')); 43 - 44 - $nav = $this->buildSideNavView(); 45 - $nav->selectFilter('ldap'); 46 - $nav->appendChild($content); 47 - 48 - if ($request->getStr('import')) { 49 - $nav->appendChild($this->processImportRequest($request)); 50 - } 51 - 52 - $nav->appendChild($panel); 53 - 54 - if ($request->getStr('search')) { 55 - $nav->appendChild($this->processSearchRequest($request)); 56 - } 57 - 58 - return $this->newPage() 59 - ->setTitle(pht('Import LDAP Users')) 60 - ->setCrumbs($crumbs) 61 - ->setNavigation($nav); 62 - } 63 - 64 - private function processImportRequest($request) { 65 - $admin = $request->getUser(); 66 - $usernames = $request->getArr('usernames'); 67 - $emails = $request->getArr('email'); 68 - $names = $request->getArr('name'); 69 - 70 - $notice_view = new PHUIInfoView(); 71 - $notice_view->setSeverity(PHUIInfoView::SEVERITY_NOTICE); 72 - $notice_view->setTitle(pht('Import Successful')); 73 - $notice_view->setErrors(array( 74 - pht('Successfully imported users from LDAP'), 75 - )); 76 - 77 - $list = new PHUIObjectItemListView(); 78 - $list->setNoDataString(pht('No users imported?')); 79 - 80 - foreach ($usernames as $username) { 81 - $user = new PhabricatorUser(); 82 - $user->setUsername($username); 83 - $user->setRealname($names[$username]); 84 - 85 - $email_obj = id(new PhabricatorUserEmail()) 86 - ->setAddress($emails[$username]) 87 - ->setIsVerified(1); 88 - try { 89 - id(new PhabricatorUserEditor()) 90 - ->setActor($admin) 91 - ->createNewUser($user, $email_obj); 92 - 93 - id(new PhabricatorExternalAccount()) 94 - ->setUserPHID($user->getPHID()) 95 - ->setAccountType('ldap') 96 - ->setAccountDomain('self') 97 - ->setAccountID($username) 98 - ->save(); 99 - 100 - $header = pht('Successfully added %s', $username); 101 - $attribute = null; 102 - $color = 'fa-check green'; 103 - } catch (Exception $ex) { 104 - $header = pht('Failed to add %s', $username); 105 - $attribute = $ex->getMessage(); 106 - $color = 'fa-times red'; 107 - } 108 - 109 - $item = id(new PHUIObjectItemView()) 110 - ->setHeader($header) 111 - ->addAttribute($attribute) 112 - ->setStatusIcon($color); 113 - 114 - $list->addItem($item); 115 - } 116 - 117 - return array( 118 - $notice_view, 119 - $list, 120 - ); 121 - 122 - } 123 - 124 - private function processSearchRequest($request) { 125 - $panel = new PHUIBoxView(); 126 - $admin = $request->getUser(); 127 - 128 - $search = $request->getStr('query'); 129 - 130 - $ldap_provider = PhabricatorLDAPAuthProvider::getLDAPProvider(); 131 - if (!$ldap_provider) { 132 - throw new Exception(pht('No LDAP provider enabled!')); 133 - } 134 - 135 - $ldap_adapter = $ldap_provider->getAdapter(); 136 - $ldap_adapter->setLoginUsername($request->getStr('username')); 137 - $ldap_adapter->setLoginPassword( 138 - new PhutilOpaqueEnvelope($request->getStr('password'))); 139 - 140 - // This causes us to connect and bind. 141 - // TODO: Clean up this discard mode stuff. 142 - DarkConsoleErrorLogPluginAPI::enableDiscardMode(); 143 - $ldap_adapter->getAccountID(); 144 - DarkConsoleErrorLogPluginAPI::disableDiscardMode(); 145 - 146 - $results = $ldap_adapter->searchLDAP('%Q', $search); 147 - 148 - foreach ($results as $key => $record) { 149 - $account_id = $ldap_adapter->readLDAPRecordAccountID($record); 150 - if (!$account_id) { 151 - unset($results[$key]); 152 - continue; 153 - } 154 - 155 - $info = array( 156 - $account_id, 157 - $ldap_adapter->readLDAPRecordEmail($record), 158 - $ldap_adapter->readLDAPRecordRealName($record), 159 - ); 160 - $results[$key] = $info; 161 - $results[$key][] = $this->renderUserInputs($info); 162 - } 163 - 164 - $form = id(new AphrontFormView()) 165 - ->setUser($admin); 166 - 167 - $table = new AphrontTableView($results); 168 - $table->setHeaders( 169 - array( 170 - pht('Username'), 171 - pht('Email'), 172 - pht('Real Name'), 173 - pht('Import?'), 174 - )); 175 - $form->appendChild($table); 176 - $form->setAction($request->getRequestURI() 177 - ->alter('import', 'true')->alter('search', null)) 178 - ->appendChild( 179 - id(new AphrontFormSubmitControl()) 180 - ->setValue(pht('Import'))); 181 - 182 - $panel->appendChild($form); 183 - 184 - return $panel; 185 - } 186 - 187 - private function renderUserInputs($user) { 188 - $username = $user[0]; 189 - return hsprintf( 190 - '%s%s%s', 191 - phutil_tag( 192 - 'input', 193 - array( 194 - 'type' => 'checkbox', 195 - 'name' => 'usernames[]', 196 - 'value' => $username, 197 - )), 198 - phutil_tag( 199 - 'input', 200 - array( 201 - 'type' => 'hidden', 202 - 'name' => "email[$username]", 203 - 'value' => $user[1], 204 - )), 205 - phutil_tag( 206 - 'input', 207 - array( 208 - 'type' => 'hidden', 209 - 'name' => "name[$username]", 210 - 'value' => $user[2], 211 - ))); 212 - } 213 - 214 - }