Page MenuHomePhorge

D25621.1736533971.diff
No OneTemporary

D25621.1736533971.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -5078,6 +5078,7 @@
'PhabricatorTypeaheadDatasourceTestCase' => 'applications/typeahead/datasource/__tests__/PhabricatorTypeaheadDatasourceTestCase.php',
'PhabricatorTypeaheadFunctionHelpController' => 'applications/typeahead/controller/PhabricatorTypeaheadFunctionHelpController.php',
'PhabricatorTypeaheadInvalidTokenException' => 'applications/typeahead/exception/PhabricatorTypeaheadInvalidTokenException.php',
+ 'PhabricatorTypeaheadLoginRequiredException' => 'applications/typeahead/exception/PhabricatorTypeaheadLoginRequiredException.php',
'PhabricatorTypeaheadModularDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadModularDatasourceController.php',
'PhabricatorTypeaheadMonogramDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadMonogramDatasource.php',
'PhabricatorTypeaheadProxyDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadProxyDatasource.php',
@@ -11819,6 +11820,7 @@
'PhabricatorTypeaheadDatasourceTestCase' => 'PhabricatorTestCase',
'PhabricatorTypeaheadFunctionHelpController' => 'PhabricatorTypeaheadDatasourceController',
'PhabricatorTypeaheadInvalidTokenException' => 'Exception',
+ 'PhabricatorTypeaheadLoginRequiredException' => 'Exception',
'PhabricatorTypeaheadModularDatasourceController' => 'PhabricatorTypeaheadDatasourceController',
'PhabricatorTypeaheadMonogramDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorTypeaheadProxyDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
diff --git a/src/applications/calendar/typeahead/PhabricatorCalendarInviteeViewerFunctionDatasource.php b/src/applications/calendar/typeahead/PhabricatorCalendarInviteeViewerFunctionDatasource.php
--- a/src/applications/calendar/typeahead/PhabricatorCalendarInviteeViewerFunctionDatasource.php
+++ b/src/applications/calendar/typeahead/PhabricatorCalendarInviteeViewerFunctionDatasource.php
@@ -28,8 +28,12 @@
);
}
+ protected function isFunctionWithLoginRequired($function) {
+ return true;
+ }
+
public function loadResults() {
- if ($this->getViewer()->getPHID()) {
+ if ($this->getViewer()->isLoggedIn()) {
$results = array($this->renderViewerFunctionToken());
} else {
$results = array();
@@ -39,7 +43,7 @@
}
protected function canEvaluateFunction($function) {
- if (!$this->getViewer()->getPHID()) {
+ if (!$this->getViewer()->isLoggedIn()) {
return false;
}
diff --git a/src/applications/differential/typeahead/DifferentialResponsibleViewerFunctionDatasource.php b/src/applications/differential/typeahead/DifferentialResponsibleViewerFunctionDatasource.php
--- a/src/applications/differential/typeahead/DifferentialResponsibleViewerFunctionDatasource.php
+++ b/src/applications/differential/typeahead/DifferentialResponsibleViewerFunctionDatasource.php
@@ -28,8 +28,12 @@
);
}
+ protected function isFunctionWithLoginRequired($function) {
+ return true;
+ }
+
public function loadResults() {
- if ($this->getViewer()->getPHID()) {
+ if ($this->getViewer()->isLoggedIn()) {
$results = array($this->renderViewerFunctionToken());
} else {
$results = array();
@@ -39,7 +43,7 @@
}
protected function canEvaluateFunction($function) {
- if (!$this->getViewer()->getPHID()) {
+ if (!$this->getViewer()->isLoggedIn()) {
return false;
}
diff --git a/src/applications/people/typeahead/PhabricatorViewerDatasource.php b/src/applications/people/typeahead/PhabricatorViewerDatasource.php
--- a/src/applications/people/typeahead/PhabricatorViewerDatasource.php
+++ b/src/applications/people/typeahead/PhabricatorViewerDatasource.php
@@ -34,8 +34,12 @@
);
}
+ protected function isFunctionWithLoginRequired($function) {
+ return true;
+ }
+
public function loadResults() {
- if ($this->getViewer()->getPHID()) {
+ if ($this->getViewer()->isLoggedIn()) {
$results = array($this->renderViewerFunctionToken());
} else {
$results = array();
@@ -45,7 +49,7 @@
}
protected function canEvaluateFunction($function) {
- if (!$this->getViewer()->getPHID()) {
+ if (!$this->getViewer()->isLoggedIn()) {
return false;
}
diff --git a/src/applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php b/src/applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php
--- a/src/applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php
+++ b/src/applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php
@@ -35,8 +35,12 @@
);
}
+ protected function isFunctionWithLoginRequired($function) {
+ return true;
+ }
+
public function loadResults() {
- if ($this->getViewer()->getPHID()) {
+ if ($this->getViewer()->isLoggedIn()) {
$results = array($this->renderViewerProjectsFunctionToken());
} else {
$results = array();
@@ -46,7 +50,7 @@
}
protected function canEvaluateFunction($function) {
- if (!$this->getViewer()->getPHID()) {
+ if (!$this->getViewer()->isLoggedIn()) {
return false;
}
diff --git a/src/applications/search/controller/PhabricatorApplicationSearchController.php b/src/applications/search/controller/PhabricatorApplicationSearchController.php
--- a/src/applications/search/controller/PhabricatorApplicationSearchController.php
+++ b/src/applications/search/controller/PhabricatorApplicationSearchController.php
@@ -346,6 +346,15 @@
$body[] = $pager_box;
}
}
+ } catch (PhabricatorTypeaheadLoginRequiredException $ex) {
+
+ // A specific token requires login. Show login page.
+ $auth_class = PhabricatorAuthApplication::class;
+ $auth_application = PhabricatorApplication::getByClass($auth_class);
+ $login_controller = new PhabricatorAuthStartController();
+ $this->setCurrentApplication($auth_application);
+ return $this->delegateToController($login_controller);
+
} catch (PhabricatorTypeaheadInvalidTokenException $ex) {
$exec_errors[] = pht(
'This query specifies an invalid parameter. Review the '.
diff --git a/src/applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php b/src/applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php
--- a/src/applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php
+++ b/src/applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php
@@ -304,6 +304,15 @@
return parent::evaluateFunction($function, $argv);
}
+ protected function isFunctionWithLoginRequired($function) {
+ foreach ($this->getUsableDatasources() as $source) {
+ if ($source->isFunctionWithLoginRequired($function)) {
+ return true;
+ }
+ }
+ return parent::isFunctionWithLoginRequired($function);
+ }
+
public function renderFunctionTokens($function, array $argv_list) {
foreach ($this->getUsableDatasources() as $source) {
if ($source->canEvaluateFunction($function)) {
diff --git a/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php b/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php
--- a/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php
+++ b/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php
@@ -365,6 +365,19 @@
}
+ /**
+ * Check if this datasource requires a logged-in viewer.
+ * @task functions
+ * @param string $function Function name.
+ * @return bool
+ */
+ protected function isFunctionWithLoginRequired($function) {
+ // This is just a default.
+ // Make sure to override this method to require login.
+ return false;
+ }
+
+
/**
* @task functions
*/
@@ -498,6 +511,18 @@
if (!$this->canEvaluateFunction($function)) {
if (!$allow_partial) {
+
+ if ($this->isFunctionWithLoginRequired($function)) {
+ if (!$this->getViewer() || !$this->getViewer()->isLoggedIn()) {
+ throw new PhabricatorTypeaheadLoginRequiredException(
+ pht(
+ 'This datasource ("%s") requires to be logged-in to use the '.
+ 'function "%s(...)".',
+ get_class($this),
+ $function));
+ }
+ }
+
throw new PhabricatorTypeaheadInvalidTokenException(
pht(
'This datasource ("%s") can not evaluate the function "%s(...)".',
diff --git a/src/applications/typeahead/exception/PhabricatorTypeaheadLoginRequiredException.php b/src/applications/typeahead/exception/PhabricatorTypeaheadLoginRequiredException.php
new file mode 100644
--- /dev/null
+++ b/src/applications/typeahead/exception/PhabricatorTypeaheadLoginRequiredException.php
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * Exception thrown when a specific typehead requires login to be used.
+ */
+final class PhabricatorTypeaheadLoginRequiredException extends Exception {}

File Metadata

Mime Type
text/plain
Expires
Fri, Jan 10, 18:32 (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1109261
Default Alt Text
D25621.1736533971.diff (8 KB)

Event Timeline