mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 08:16:43 -04:00
Only wildcard search if enumeration is allowed
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
dffe146fbb
commit
18e665364a
6 changed files with 18 additions and 2 deletions
|
|
@ -107,6 +107,7 @@ class AddressBookImpl implements IAddressBook {
|
|||
* - 'escape_like_param' - If set to false wildcards _ and % are not escaped
|
||||
* - 'limit' - Set a numeric limit for the search results
|
||||
* - 'offset' - Set the offset for the limited search results
|
||||
* - 'wildcard' - Whether the search should use wildcards
|
||||
* @return array an array of contacts which are arrays of key-value-pairs
|
||||
* example result:
|
||||
* [
|
||||
|
|
|
|||
|
|
@ -1004,6 +1004,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
|
|||
* - 'escape_like_param' - If set to false wildcards _ and % are not escaped, otherwise they are
|
||||
* - 'limit' - Set a numeric limit for the search results
|
||||
* - 'offset' - Set the offset for the limited search results
|
||||
* - 'wildcard' - Whether the search should use wildcards
|
||||
* @return array an array of contacts which are arrays of key-value-pairs
|
||||
*/
|
||||
public function search($addressBookId, $pattern, $searchProperties, $options = []): array {
|
||||
|
|
@ -1042,6 +1043,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
|
|||
array $searchProperties,
|
||||
array $options = []): array {
|
||||
$escapePattern = !\array_key_exists('escape_like_param', $options) || $options['escape_like_param'] !== false;
|
||||
$useWildcards = !\array_key_exists('wildcard', $options) || $options['wildcard'] !== false;
|
||||
|
||||
$query2 = $this->db->getQueryBuilder();
|
||||
|
||||
|
|
@ -1083,7 +1085,9 @@ class CardDavBackend implements BackendInterface, SyncSupport {
|
|||
|
||||
// No need for like when the pattern is empty
|
||||
if ('' !== $pattern) {
|
||||
if (!$escapePattern) {
|
||||
if (!$useWildcards) {
|
||||
$query2->andWhere($query2->expr()->eq('cp.value', $query2->createNamedParameter($pattern)));
|
||||
} elseif (!$escapePattern) {
|
||||
$query2->andWhere($query2->expr()->ilike('cp.value', $query2->createNamedParameter($pattern)));
|
||||
} else {
|
||||
$query2->andWhere($query2->expr()->ilike('cp.value', $query2->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%')));
|
||||
|
|
|
|||
|
|
@ -102,7 +102,15 @@ class MailPlugin implements ISearchPlugin {
|
|||
$emailType = new SearchResultType('emails');
|
||||
|
||||
// Search in contacts
|
||||
$addressBookContacts = $this->contactsManager->search($search, ['EMAIL', 'FN'], ['limit' => $limit, 'offset' => $offset]);
|
||||
$addressBookContacts = $this->contactsManager->search(
|
||||
$search,
|
||||
['EMAIL', 'FN'],
|
||||
[
|
||||
'limit' => $limit,
|
||||
'offset' => $offset,
|
||||
'wildcard' => $this->shareeEnumeration,
|
||||
]
|
||||
);
|
||||
$lowerSearch = strtolower($search);
|
||||
foreach ($addressBookContacts as $contact) {
|
||||
if (isset($contact['EMAIL'])) {
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ class ContactsManager implements IManager {
|
|||
* - 'escape_like_param' - If set to false wildcards _ and % are not escaped
|
||||
* - 'limit' - Set a numeric limit for the search results
|
||||
* - 'offset' - Set the offset for the limited search results
|
||||
* - 'wildcard' - Whether the search should use wildcards
|
||||
* @return array an array of contacts which are arrays of key-value-pairs
|
||||
*/
|
||||
public function search($pattern, $searchProperties = [], $options = []) {
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ interface IManager {
|
|||
* - 'escape_like_param' - If set to false wildcards _ and % are not escaped
|
||||
* - 'limit' - Set a numeric limit for the search results
|
||||
* - 'offset' - Set the offset for the limited search results
|
||||
* - 'wildcard' - Whether the search should use wildcards
|
||||
* @return array an array of contacts which are arrays of key-value-pairs
|
||||
* @since 6.0.0
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ namespace OCP {
|
|||
* - 'escape_like_param' - If set to false wildcards _ and % are not escaped
|
||||
* - 'limit' - Set a numeric limit for the search results
|
||||
* - 'offset' - Set the offset for the limited search results
|
||||
* - 'wildcard' - Whether the search should use wildcards
|
||||
* @return array an array of contacts which are arrays of key-value-pairs
|
||||
* example result:
|
||||
* [
|
||||
|
|
|
|||
Loading…
Reference in a new issue