mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-19 12:00:55 +01:00
Add user.info and phid.info Conduit methods
Summary: Allow user and arbitrary object lookup by PHID. Test Plan: Executed user.whoami, user.info, user.find and phid.info via Conduit console. Reviewers: jungejason, tuomaspelkonen, aran, nh Reviewed By: nh CC: skrul, aran, nh, jungejason, epriestley Differential Revision: 870
This commit is contained in:
parent
f7e136ecd2
commit
39ca1e7e39
15 changed files with 299 additions and 13 deletions
|
@ -120,8 +120,12 @@ phutil_register_library_map(array(
|
|||
'ConduitAPI_paste_create_Method' => 'applications/conduit/method/paste/create',
|
||||
'ConduitAPI_paste_info_Method' => 'applications/conduit/method/paste/info',
|
||||
'ConduitAPI_path_getowners_Method' => 'applications/conduit/method/path/getowners',
|
||||
'ConduitAPI_phid_Method' => 'applications/conduit/method/phid/base',
|
||||
'ConduitAPI_phid_info_Method' => 'applications/conduit/method/phid/info',
|
||||
'ConduitAPI_slowvote_info_Method' => 'applications/conduit/method/slowvote/info',
|
||||
'ConduitAPI_user_Method' => 'applications/conduit/method/user/base',
|
||||
'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/find',
|
||||
'ConduitAPI_user_info_Method' => 'applications/conduit/method/user/info',
|
||||
'ConduitAPI_user_whoami_Method' => 'applications/conduit/method/user/whoami',
|
||||
'ConduitException' => 'applications/conduit/protocol/exception',
|
||||
'DarkConsole' => 'aphront/console/api',
|
||||
|
@ -795,9 +799,13 @@ phutil_register_library_map(array(
|
|||
'ConduitAPI_paste_create_Method' => 'ConduitAPI_paste_Method',
|
||||
'ConduitAPI_paste_info_Method' => 'ConduitAPI_paste_Method',
|
||||
'ConduitAPI_path_getowners_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_phid_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_phid_info_Method' => 'ConduitAPI_phid_Method',
|
||||
'ConduitAPI_slowvote_info_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_user_find_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_user_whoami_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_user_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method',
|
||||
'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method',
|
||||
'ConduitAPI_user_whoami_Method' => 'ConduitAPI_user_Method',
|
||||
'DarkConsoleConfigPlugin' => 'DarkConsolePlugin',
|
||||
'DarkConsoleController' => 'PhabricatorController',
|
||||
'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin',
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
<?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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
abstract class ConduitAPI_phid_Method extends ConduitAPIMethod {
|
||||
|
||||
protected function buildHandleInformationDictionary(
|
||||
PhabricatorObjectHandle $handle) {
|
||||
|
||||
return array(
|
||||
'phid' => $handle->getPHID(),
|
||||
'uri' => PhabricatorEnv::getProductionURI($handle->getURI()),
|
||||
|
||||
'typeName' => $handle->getTypeName(),
|
||||
'type' => $handle->getType(),
|
||||
|
||||
'name' => $handle->getName(),
|
||||
'fullName' => $handle->getFullName(),
|
||||
|
||||
'status' => $handle->getStatus(),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
13
src/applications/conduit/method/phid/base/__init__.php
Normal file
13
src/applications/conduit/method/phid/base/__init__.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/base');
|
||||
phutil_require_module('phabricator', 'infrastructure/env');
|
||||
|
||||
|
||||
phutil_require_source('ConduitAPI_phid_Method.php');
|
|
@ -0,0 +1,60 @@
|
|||
<?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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
final class ConduitAPI_phid_info_Method
|
||||
extends ConduitAPI_phid_Method {
|
||||
|
||||
public function getMethodDescription() {
|
||||
return "Retrieve information about an arbitrary PHID.";
|
||||
}
|
||||
|
||||
public function defineParamTypes() {
|
||||
return array(
|
||||
'phid' => 'required phid',
|
||||
);
|
||||
}
|
||||
|
||||
public function defineReturnType() {
|
||||
return 'nonempty dict<string, wild>';
|
||||
}
|
||||
|
||||
public function defineErrorTypes() {
|
||||
return array(
|
||||
'ERR-BAD-PHID' => 'No such object exists.',
|
||||
);
|
||||
}
|
||||
|
||||
protected function execute(ConduitAPIRequest $request) {
|
||||
|
||||
$phid = $request->getValue('phid');
|
||||
|
||||
$handles = id(new PhabricatorObjectHandleData(array($phid)))
|
||||
->loadHandles();
|
||||
|
||||
$handle = $handles[$phid];
|
||||
if (!$handle->isComplete()) {
|
||||
throw new ConduitException('ERR-BAD-PHID');
|
||||
}
|
||||
|
||||
return $this->buildHandleInformationDictionary($handle);
|
||||
}
|
||||
|
||||
}
|
16
src/applications/conduit/method/phid/info/__init__.php
Normal file
16
src/applications/conduit/method/phid/info/__init__.php
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/phid/base');
|
||||
phutil_require_module('phabricator', 'applications/conduit/protocol/exception');
|
||||
phutil_require_module('phabricator', 'applications/phid/handle/data');
|
||||
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
phutil_require_source('ConduitAPI_phid_info_Method.php');
|
|
@ -0,0 +1,32 @@
|
|||
<?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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
abstract class ConduitAPI_user_Method extends ConduitAPIMethod {
|
||||
|
||||
protected function buildUserInformationDictionary(PhabricatorUser $user) {
|
||||
return array(
|
||||
'phid' => $user->getPHID(),
|
||||
'userName' => $user->getUserName(),
|
||||
'realName' => $user->getRealName(),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
12
src/applications/conduit/method/user/base/__init__.php
Normal file
12
src/applications/conduit/method/user/base/__init__.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/base');
|
||||
|
||||
|
||||
phutil_require_source('ConduitAPI_user_Method.php');
|
|
@ -19,7 +19,8 @@
|
|||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
class ConduitAPI_user_find_Method extends ConduitAPIMethod {
|
||||
final class ConduitAPI_user_find_Method
|
||||
extends ConduitAPI_user_Method {
|
||||
|
||||
public function getMethodDescription() {
|
||||
return "Find user PHIDs which correspond to provided user aliases. ".
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/base');
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/user/base');
|
||||
phutil_require_module('phabricator', 'applications/people/storage/user');
|
||||
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
<?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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
final class ConduitAPI_user_info_Method
|
||||
extends ConduitAPI_user_Method {
|
||||
|
||||
public function getMethodDescription() {
|
||||
return "Retrieve information about a user by PHID.";
|
||||
}
|
||||
|
||||
public function defineParamTypes() {
|
||||
return array(
|
||||
'phid' => 'required phid',
|
||||
);
|
||||
}
|
||||
|
||||
public function defineReturnType() {
|
||||
return 'nonempty dict<string, wild>';
|
||||
}
|
||||
|
||||
public function defineErrorTypes() {
|
||||
return array(
|
||||
'ERR-BAD-USER' => 'No such user exists.',
|
||||
);
|
||||
}
|
||||
|
||||
protected function execute(ConduitAPIRequest $request) {
|
||||
|
||||
$user = id(new PhabricatorUser())->loadOneWhere(
|
||||
'phid = %s',
|
||||
$request->getValue('phid'));
|
||||
|
||||
if (!$user) {
|
||||
throw new ConduitException('ERR-BAD-USER');
|
||||
}
|
||||
|
||||
return $this->buildUserInformationDictionary($user);
|
||||
}
|
||||
|
||||
}
|
16
src/applications/conduit/method/user/info/__init__.php
Normal file
16
src/applications/conduit/method/user/info/__init__.php
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/user/base');
|
||||
phutil_require_module('phabricator', 'applications/conduit/protocol/exception');
|
||||
phutil_require_module('phabricator', 'applications/people/storage/user');
|
||||
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
phutil_require_source('ConduitAPI_user_info_Method.php');
|
|
@ -19,7 +19,8 @@
|
|||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
class ConduitAPI_user_whoami_Method extends ConduitAPIMethod {
|
||||
final class ConduitAPI_user_whoami_Method
|
||||
extends ConduitAPI_user_Method {
|
||||
|
||||
public function getMethodDescription() {
|
||||
return "Retrieve information about the logged-in user.";
|
||||
|
@ -40,12 +41,7 @@ class ConduitAPI_user_whoami_Method extends ConduitAPIMethod {
|
|||
}
|
||||
|
||||
protected function execute(ConduitAPIRequest $request) {
|
||||
$user = $request->getUser();
|
||||
return array(
|
||||
'phid' => $user->getPHID(),
|
||||
'userName' => $user->getUserName(),
|
||||
'realName' => $user->getRealName(),
|
||||
);
|
||||
return $this->buildUserInformationDictionary($request->getUser());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/base');
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/user/base');
|
||||
|
||||
|
||||
phutil_require_source('ConduitAPI_user_whoami_Method.php');
|
||||
|
|
|
@ -28,7 +28,7 @@ class PhabricatorObjectHandle {
|
|||
private $timestamp;
|
||||
private $alternateID;
|
||||
private $status = 'open';
|
||||
|
||||
private $complete;
|
||||
|
||||
public function setURI($uri) {
|
||||
$this->uri = $uri;
|
||||
|
@ -135,6 +135,27 @@ class PhabricatorObjectHandle {
|
|||
return idx($map, $this->getType());
|
||||
}
|
||||
|
||||
public function setComplete($complete) {
|
||||
$this->complete = $complete;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the handle represents an object which was completely loaded
|
||||
* (i.e., the underlying object exists) vs an object which could not be
|
||||
* completely loaded (e.g., the type or data for the PHID could not be
|
||||
* identified or located).
|
||||
*
|
||||
* Basically, @{class:PhabricatorObjectHandleData} gives you back a handle for
|
||||
* any PHID you give it, but it gives you a complete handle only for valid
|
||||
* PHIDs.
|
||||
*
|
||||
* @return bool True if the handle represents a complete object.
|
||||
*/
|
||||
public function isComplete() {
|
||||
return $this->complete;
|
||||
}
|
||||
|
||||
public function renderLink() {
|
||||
|
||||
switch ($this->getType()) {
|
||||
|
|
|
@ -115,6 +115,7 @@ class PhabricatorObjectHandleData {
|
|||
case ManiphestTaskOwner::OWNER_UP_FOR_GRABS:
|
||||
$handle->setName('Up For Grabs');
|
||||
$handle->setFullName('upforgrabs (Up For Grabs)');
|
||||
$handle->setComplete(true);
|
||||
break;
|
||||
default:
|
||||
$handle->setName('Foul Magicks');
|
||||
|
@ -145,6 +146,7 @@ class PhabricatorObjectHandleData {
|
|||
$handle->setFullName(
|
||||
$user->getUsername().' ('.$user->getRealName().')');
|
||||
$handle->setAlternateID($user->getID());
|
||||
$handle->setComplete(true);
|
||||
|
||||
$img_phid = $user->getProfileImagePHID();
|
||||
if ($img_phid) {
|
||||
|
@ -176,6 +178,7 @@ class PhabricatorObjectHandleData {
|
|||
$handle->setName($list->getName());
|
||||
$handle->setURI($list->getURI());
|
||||
$handle->setFullName($list->getName());
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
|
@ -199,6 +202,7 @@ class PhabricatorObjectHandleData {
|
|||
$handle->setName($rev->getTitle());
|
||||
$handle->setURI('/D'.$rev->getID());
|
||||
$handle->setFullName('D'.$rev->getID().': '.$rev->getTitle());
|
||||
$handle->setComplete(true);
|
||||
|
||||
$status = $rev->getStatus();
|
||||
if (($status == DifferentialRevisionStatus::COMMITTED) ||
|
||||
|
@ -256,6 +260,7 @@ class PhabricatorObjectHandleData {
|
|||
$handle->setURI('/r'.$callsign.$commit_identifier);
|
||||
$handle->setFullName('r'.$callsign.$commit_identifier);
|
||||
$handle->setTimestamp($commit->getEpoch());
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
|
@ -279,6 +284,7 @@ class PhabricatorObjectHandleData {
|
|||
$handle->setName($task->getTitle());
|
||||
$handle->setURI('/T'.$task->getID());
|
||||
$handle->setFullName('T'.$task->getID().': '.$task->getTitle());
|
||||
$handle->setComplete(true);
|
||||
if ($task->getStatus() != ManiphestTaskStatus::STATUS_OPEN) {
|
||||
$closed = PhabricatorObjectHandleStatus::STATUS_CLOSED;
|
||||
$handle->setStatus($closed);
|
||||
|
@ -305,6 +311,7 @@ class PhabricatorObjectHandleData {
|
|||
$file = $files[$phid];
|
||||
$handle->setName($file->getName());
|
||||
$handle->setURI($file->getViewURI());
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
|
@ -327,6 +334,7 @@ class PhabricatorObjectHandleData {
|
|||
$project = $projects[$phid];
|
||||
$handle->setName($project->getName());
|
||||
$handle->setURI('/project/view/'.$project->getID().'/');
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
|
@ -349,6 +357,7 @@ class PhabricatorObjectHandleData {
|
|||
$repository = $repositories[$phid];
|
||||
$handle->setName($repository->getCallsign());
|
||||
$handle->setURI('/diffusion/'.$repository->getCallsign().'/');
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
|
@ -371,6 +380,7 @@ class PhabricatorObjectHandleData {
|
|||
$package = $packages[$phid];
|
||||
$handle->setName($package->getName());
|
||||
$handle->setURI('/owners/package/'.$package->getID().'/');
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
|
@ -391,6 +401,7 @@ class PhabricatorObjectHandleData {
|
|||
} else {
|
||||
$project = $projects[$phid];
|
||||
$handle->setName($project->getName());
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
|
@ -420,6 +431,7 @@ class PhabricatorObjectHandleData {
|
|||
$info = $documents[$phid];
|
||||
$handle->setName($info['title']);
|
||||
$handle->setURI(PhrictionDocument::getSlugURI($info['slug']));
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue