Skip to content

Commit

Permalink
Merge pull request #40660 from nextcloud/bugfix/noid/fix-missing-user…
Browse files Browse the repository at this point in the history
…-status-on-autocomplete-api

fix(autocomplete): Fix missing user status on autocomplete endpoint
  • Loading branch information
nickvergessen committed Oct 4, 2023
2 parents 4756807 + a7018bc commit c88b02a
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 8 deletions.
9 changes: 5 additions & 4 deletions build/integration/collaboration_features/autocomplete.feature
Expand Up @@ -15,12 +15,13 @@ Feature: autocomplete
| auto | users |
| autocomplete | users |
| autocomplete2 | users |
And user "autocomplete" has status "dnd"
When parameter "shareapi_restrict_user_enumeration_full_match" of app "core" is set to "no"
Then get autocomplete for "auto"
| id | source |
| auto | users |
| autocomplete | users |
| autocomplete2 | users |
| id | source | status |
| auto | users | "" |
| autocomplete | users | {"status":"dnd","message":null,"icon":null,"clearAt":null} |
| autocomplete2 | users | "" |


Scenario: getting autocomplete without enumeration
Expand Down
4 changes: 4 additions & 0 deletions build/integration/config/behat.yml
@@ -1,6 +1,10 @@
default:
autoload:
'': "%paths.base%/../features/bootstrap"
formatters:
pretty:
output_styles:
comment: [ 'bright-blue' ]
suites:
default:
paths:
Expand Down
3 changes: 3 additions & 0 deletions build/integration/features/bootstrap/CollaborationContext.php
Expand Up @@ -73,6 +73,9 @@ private function getAutocompleteWithType(int $type, string $search, TableNode $f
if (isset($expected['source'])) {
$data['source'] = $suggestion['source'];
}
if (isset($expected['status'])) {
$data['status'] = json_encode($suggestion['status']);
}
return $data;
}, $suggestions, $formData->getHash()));
}
Expand Down
4 changes: 2 additions & 2 deletions core/Controller/AutoCompleteController.php
Expand Up @@ -123,8 +123,8 @@ protected function prepareResultArray(array $results): array {
/** @var ?string $subline */
$subline = array_key_exists('subline', $result) ? $result['subline'] : null;

/** @var ?string $status */
$status = array_key_exists('status', $result) && is_string($result['status']) ? $result['status'] : null;
/** @var ?array{status: string, message: ?string, icon: ?string, clearAt: ?int} $status */
$status = array_key_exists('status', $result) && is_array($result['status']) && !empty($result['status']) ? $result['status'] : null;

/** @var ?string $shareWithDisplayNameUnique */
$shareWithDisplayNameUnique = array_key_exists('shareWithDisplayNameUnique', $result) ? $result['shareWithDisplayNameUnique'] : null;
Expand Down
7 changes: 6 additions & 1 deletion core/ResponseDefinitions.php
Expand Up @@ -124,7 +124,12 @@
* label: string,
* icon: string,
* source: string,
* status: string,
* status: array{
* status: string,
* message: ?string,
* icon: ?string,
* clearAt: ?int,
* }|string,
* subline: string,
* shareWithDisplayNameUnique: string,
* }
Expand Down
33 changes: 32 additions & 1 deletion core/openapi.json
Expand Up @@ -45,7 +45,38 @@
"type": "string"
},
"status": {
"type": "string"
"oneOf": [
{
"type": "object",
"required": [
"status",
"message",
"icon",
"clearAt"
],
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string",
"nullable": true
},
"icon": {
"type": "string",
"nullable": true
},
"clearAt": {
"type": "integer",
"format": "int64",
"nullable": true
}
}
},
{
"type": "string"
}
]
},
"subline": {
"type": "string"
Expand Down

0 comments on commit c88b02a

Please sign in to comment.