Skip to content

Commit

Permalink
Merge pull request #23223 from owncloud/backport-23091-case-insensiti…
Browse files Browse the repository at this point in the history
…ve-group-sharing

[9.0] Case insensitive group sharing
  • Loading branch information
DeepDiver1975 committed Mar 14, 2016
2 parents 3380a3a + a9ed808 commit efa6731
Show file tree
Hide file tree
Showing 3 changed files with 206 additions and 7 deletions.
14 changes: 7 additions & 7 deletions apps/files_sharing/api/sharees.php
Expand Up @@ -147,8 +147,8 @@ protected function getUsers($search) {

$foundUserById = false;
foreach ($users as $uid => $userDisplayName) {
if (strtolower($uid) === $search || strtolower($userDisplayName) === $search) {
if (strtolower($uid) === $search) {
if (strtolower($uid) === strtolower($search) || strtolower($userDisplayName) === strtolower($search)) {
if (strtolower($uid) === strtolower($search)) {
$foundUserById = true;
}
$this->result['exact']['users'][] = [
Expand Down Expand Up @@ -221,12 +221,12 @@ protected function getGroups($search) {
}

foreach ($groups as $gid) {
if (strtolower($gid) === $search) {
if (strtolower($gid) === strtolower($search)) {
$this->result['exact']['groups'][] = [
'label' => $search,
'label' => $gid,
'value' => [
'shareType' => Share::SHARE_TYPE_GROUP,
'shareWith' => $search,
'shareWith' => $gid,
],
];
} else {
Expand Down Expand Up @@ -282,8 +282,8 @@ protected function getRemote($search) {
}
foreach ($cloudIds as $cloudId) {
list(, $serverUrl) = $this->splitUserRemote($cloudId);
if (strtolower($contact['FN']) === $search || strtolower($cloudId) === $search) {
if (strtolower($cloudId) === $search) {
if (strtolower($contact['FN']) === strtolower($search) || strtolower($cloudId) === strtolower($search)) {
if (strtolower($cloudId) === strtolower($search)) {
$foundRemoteById = true;
}
$this->result['exact']['remotes'][] = [
Expand Down
51 changes: 51 additions & 0 deletions build/integration/features/bootstrap/Sharing.php
Expand Up @@ -442,5 +442,56 @@ public function shareIdsShouldMatch()
throw new \Excetion('Expected the same link share to be returned');
}
}

/**
* @When /^getting sharees for$/
* @param \Behat\Gherkin\Node\TableNode $body
*/
public function whenGettingShareesFor($body) {
$url = '/apps/files_sharing/api/v1/sharees';
if ($body instanceof \Behat\Gherkin\Node\TableNode) {
$parameters = [];
foreach ($body->getRowsHash() as $key => $value) {
$parameters[] = $key . '=' . $value;
}
if (!empty($parameters)) {
$url .= '?' . implode('&', $parameters);
}
}

$this->sendingTo('GET', $url);
}

/**
* @Then /^"([^"]*)" sharees returned (are|is empty)$/
* @param string $shareeType
* @param string $isEmpty
* @param \Behat\Gherkin\Node\TableNode|null $shareesList
*/
public function thenListOfSharees($shareeType, $isEmpty, $shareesList = null) {
if ($isEmpty !== 'is empty') {
$sharees = $shareesList->getRows();
$respondedArray = $this->getArrayOfShareesResponded($this->response, $shareeType);
PHPUnit_Framework_Assert::assertEquals($sharees, $respondedArray);
} else {
$respondedArray = $this->getArrayOfShareesResponded($this->response, $shareeType);
PHPUnit_Framework_Assert::assertEmpty($respondedArray);
}
}

public function getArrayOfShareesResponded(ResponseInterface $response, $shareeType) {
$elements = $response->xml()->data;
$elements = json_decode(json_encode($elements), 1);
if (strpos($shareeType, 'exact ') === 0) {
$elements = $elements['exact'];
$shareeType = substr($shareeType, 6);
}

$sharees = [];
foreach ($elements[$shareeType] as $element) {
$sharees[] = [$element['label'], $element['value']['shareType'], $element['value']['shareWith']];
}
return $sharees;
}
}

148 changes: 148 additions & 0 deletions build/integration/features/sharees.feature
@@ -0,0 +1,148 @@
Feature: sharees
Background:
Given using api version "1"

Scenario: Search without exact match
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | Sharee |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And "exact users" sharees returned is empty
And "users" sharees returned are
| Sharee1 | 0 | Sharee1 |
And "exact groups" sharees returned is empty
And "groups" sharees returned are
| ShareeGroup | 1 | ShareeGroup |
And "exact remotes" sharees returned is empty
And "remotes" sharees returned is empty

Scenario: Search without exact match not-exact casing
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | sharee |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And "exact users" sharees returned is empty
And "users" sharees returned are
| Sharee1 | 0 | Sharee1 |
And "exact groups" sharees returned is empty
And "groups" sharees returned are
| ShareeGroup | 1 | ShareeGroup |
And "exact remotes" sharees returned is empty
And "remotes" sharees returned is empty

Scenario: Search with exact match
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | Sharee1 |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned are
| Sharee1 | 0 | Sharee1 |
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty

Scenario: Search with exact match not-exact casing
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | sharee1 |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned are
| Sharee1 | 0 | Sharee1 |
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty

Scenario: Search with exact match not-exact casing group
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | shareegroup |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned is empty
Then "users" sharees returned is empty
Then "exact groups" sharees returned are
| ShareeGroup | 1 | ShareeGroup |
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty

Scenario: Search with "self"
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "Sharee1"
When getting sharees for
| search | Sharee1 |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned are
| Sharee1 | 0 | Sharee1 |
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty

Scenario: Remote sharee for files
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | test@localhost |
| itemType | file |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned is empty
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned are
| test@localhost | 6 | test@localhost |
Then "remotes" sharees returned is empty

Scenario: Remote sharee for calendars not allowed
Given user "test" exists
And user "Sharee1" exists
And group "ShareeGroup" exists
And As an "test"
When getting sharees for
| search | test@localhost |
| itemType | calendar |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Then "exact users" sharees returned is empty
Then "users" sharees returned is empty
Then "exact groups" sharees returned is empty
Then "groups" sharees returned is empty
Then "exact remotes" sharees returned is empty
Then "remotes" sharees returned is empty

0 comments on commit efa6731

Please sign in to comment.