Browse Source
Add \OCP\Account public API
Add \OCP\Account public API
Signed-off-by: Julius Härtl <jus@bitgrid.net>pull/11740/head
No known key found for this signature in database
GPG Key ID: 4C614C6ED2CDE6DF
7 changed files with 546 additions and 20 deletions
-
81lib/private/Accounts/Account.php
-
35lib/private/Accounts/AccountManager.php
-
140lib/private/Accounts/AccountProperty.php
-
92lib/public/Accounts/IAccount.php
-
69lib/public/Accounts/IAccountManager.php
-
105lib/public/Accounts/IAccountProperty.php
-
44lib/public/Accounts/PropertyDoesNotExistException.php
@ -0,0 +1,81 @@ |
|||
<?php |
|||
|
|||
declare(strict_types=1); |
|||
|
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OC\Accounts; |
|||
|
|||
use OCP\Accounts\IAccount; |
|||
use OCP\Accounts\IAccountProperty; |
|||
use OCP\Accounts\PropertyDoesNotExistException; |
|||
use OCP\IUser; |
|||
|
|||
class Account implements IAccount { |
|||
|
|||
/** @var IAccountProperty[] */ |
|||
private $properties = []; |
|||
|
|||
/** @var IUser */ |
|||
private $user; |
|||
|
|||
public function __construct(IUser $user) { |
|||
$this->user = $user; |
|||
} |
|||
|
|||
public function setProperty(string $property, string $value, string $scope, string $verified): IAccount { |
|||
$this->properties[$property] = new AccountProperty($property, $value, $scope, $verified); |
|||
return $this; |
|||
} |
|||
|
|||
public function getProperty(string $property): IAccountProperty { |
|||
if (!array_key_exists($property, $this->properties)) { |
|||
throw new PropertyDoesNotExistException($property); |
|||
} |
|||
return $this->properties[$property]; |
|||
} |
|||
|
|||
public function getProperties(): array { |
|||
return $this->properties; |
|||
} |
|||
|
|||
public function getFilteredProperties(string $scope = null, string $verified = null): array { |
|||
return \array_filter($this->properties, function(IAccountProperty $obj) use ($scope, $verified){ |
|||
if ($scope !== null && $scope !== $obj->getScope()) { |
|||
return false; |
|||
} |
|||
if ($verified !== null && $verified !== $obj->getVerified()) { |
|||
return false; |
|||
} |
|||
return true; |
|||
}); |
|||
} |
|||
|
|||
public function jsonSerialize() { |
|||
return $this->properties; |
|||
} |
|||
|
|||
public function getUser(): IUser { |
|||
return $this->user; |
|||
} |
|||
} |
|||
@ -0,0 +1,140 @@ |
|||
<?php |
|||
|
|||
declare(strict_types=1); |
|||
|
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OC\Accounts; |
|||
|
|||
use OCP\Accounts\IAccountProperty; |
|||
|
|||
class AccountProperty implements IAccountProperty { |
|||
|
|||
/** @var string */ |
|||
private $name; |
|||
/** @var string */ |
|||
private $value; |
|||
/** @var string */ |
|||
private $scope; |
|||
/** @var string */ |
|||
private $verified; |
|||
|
|||
public function __construct(string $name, string $value, string $scope, string $verified) { |
|||
$this->name = $name; |
|||
$this->value = $value; |
|||
$this->scope = $scope; |
|||
$this->verified = $verified; |
|||
} |
|||
|
|||
public function jsonSerialize() { |
|||
return [ |
|||
'name' => $this->getName(), |
|||
'value' => $this->getValue(), |
|||
'scope' => $this->getScope(), |
|||
'verified' => $this->getVerified() |
|||
]; |
|||
} |
|||
|
|||
/** |
|||
* Set the value of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $value |
|||
* @return IAccountProperty |
|||
*/ |
|||
public function setValue(string $value): IAccountProperty { |
|||
$this->value = $value; |
|||
return $this; |
|||
} |
|||
|
|||
/** |
|||
* Set the scope of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $scope |
|||
* @return IAccountProperty |
|||
*/ |
|||
public function setScope(string $scope): IAccountProperty { |
|||
$this->scope = $scope; |
|||
return $this; |
|||
} |
|||
|
|||
/** |
|||
* Set the verification status of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $verified |
|||
* @return IAccountProperty |
|||
*/ |
|||
public function setVerified(string $verified): IAccountProperty { |
|||
$this->verified = $verified; |
|||
return $this; |
|||
} |
|||
|
|||
/** |
|||
* Get the name of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getName(): string { |
|||
return $this->name; |
|||
} |
|||
|
|||
/** |
|||
* Get the value of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getValue(): string { |
|||
return $this->value; |
|||
} |
|||
|
|||
/** |
|||
* Get the scope of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getScope(): string { |
|||
return $this->scope; |
|||
} |
|||
|
|||
/** |
|||
* Get the verification status of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getVerified(): string { |
|||
return $this->verified; |
|||
} |
|||
} |
|||
@ -0,0 +1,92 @@ |
|||
<?php |
|||
|
|||
declare(strict_types=1); |
|||
|
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OCP\Accounts; |
|||
|
|||
use OCP\IUser; |
|||
|
|||
/** |
|||
* Interface IAccount |
|||
* |
|||
* @since 15.0.0 |
|||
* @package OCP\Accounts |
|||
*/ |
|||
interface IAccount extends \JsonSerializable { |
|||
|
|||
/** |
|||
* Set a property with data |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $property Must be one of the PROPERTY_ prefixed constants of \OCP\Accounts\IAccountManager |
|||
* @param string $value |
|||
* @param string $scope Must be one of the VISIBILITY_ prefixed constants of \OCP\Accounts\IAccountManager |
|||
* @param string $verified \OCP\Accounts\IAccountManager::NOT_VERIFIED | \OCP\Accounts\IAccountManager::VERIFICATION_IN_PROGRESS | \OCP\Accounts\IAccountManager::VERIFIED |
|||
* @return IAccount |
|||
*/ |
|||
public function setProperty(string $property, string $value, string $scope, string $verified): IAccount; |
|||
|
|||
/** |
|||
* Get a property by its key |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $property Must be one of the PROPERTY_ prefixed constants of \OCP\Accounts\IAccountManager |
|||
* @return IAccountProperty |
|||
* @throws PropertyDoesNotExistException |
|||
*/ |
|||
public function getProperty(string $property): IAccountProperty; |
|||
|
|||
/** |
|||
* Get all properties of an account |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return IAccountProperty[] |
|||
*/ |
|||
public function getProperties(): array; |
|||
|
|||
/** |
|||
* Get all properties that match the provided filters for scope and verification status |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $scope Must be one of the VISIBILITY_ prefixed constants of \OCP\Accounts\IAccountManager |
|||
* @param string $verified \OCP\Accounts\IAccountManager::NOT_VERIFIED | \OCP\Accounts\IAccountManager::VERIFICATION_IN_PROGRESS | \OCP\Accounts\IAccountManager::VERIFIED |
|||
* @return IAccountProperty[] |
|||
*/ |
|||
public function getFilteredProperties(string $scope, string $verified): array; |
|||
|
|||
/** |
|||
* Get the related user for the account data |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return IUser |
|||
*/ |
|||
public function getUser(): IUser; |
|||
|
|||
} |
|||
@ -0,0 +1,69 @@ |
|||
<?php |
|||
|
|||
declare(strict_types=1); |
|||
|
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OCP\Accounts; |
|||
|
|||
use OCP\IUser; |
|||
|
|||
/** |
|||
* Access user profile information |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @package OCP\Accounts |
|||
*/ |
|||
interface IAccountManager { |
|||
|
|||
/** nobody can see my account details */ |
|||
const VISIBILITY_PRIVATE = 'private'; |
|||
/** only contacts, especially trusted servers can see my contact details */ |
|||
const VISIBILITY_CONTACTS_ONLY = 'contacts'; |
|||
/** every body ca see my contact detail, will be published to the lookup server */ |
|||
const VISIBILITY_PUBLIC = 'public'; |
|||
|
|||
const PROPERTY_AVATAR = 'avatar'; |
|||
const PROPERTY_DISPLAYNAME = 'displayname'; |
|||
const PROPERTY_PHONE = 'phone'; |
|||
const PROPERTY_EMAIL = 'email'; |
|||
const PROPERTY_WEBSITE = 'website'; |
|||
const PROPERTY_ADDRESS = 'address'; |
|||
const PROPERTY_TWITTER = 'twitter'; |
|||
|
|||
const NOT_VERIFIED = '0'; |
|||
const VERIFICATION_IN_PROGRESS = '1'; |
|||
const VERIFIED = '2'; |
|||
|
|||
/** |
|||
* Get the account data for a given user |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param IUser $user |
|||
* @return IAccount |
|||
*/ |
|||
public function getAccount(IUser $user): IAccount; |
|||
|
|||
} |
|||
@ -0,0 +1,105 @@ |
|||
<?php |
|||
|
|||
declare(strict_types=1); |
|||
|
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OCP\Accounts; |
|||
|
|||
/** |
|||
* Interface IAccountProperty |
|||
* |
|||
* @package OCP\Account |
|||
* @since 15.0.0 |
|||
*/ |
|||
interface IAccountProperty extends \JsonSerializable { |
|||
|
|||
/** |
|||
* Set the value of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $value |
|||
* @return IAccountProperty |
|||
*/ |
|||
public function setValue(string $value): IAccountProperty; |
|||
|
|||
/** |
|||
* Set the scope of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $scope |
|||
* @return IAccountProperty |
|||
*/ |
|||
public function setScope(string $scope): IAccountProperty; |
|||
|
|||
/** |
|||
* Set the verification status of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @param string $verified |
|||
* @return IAccountProperty |
|||
*/ |
|||
public function setVerified(string $verified): IAccountProperty; |
|||
|
|||
/** |
|||
* Get the name of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getName(): string; |
|||
|
|||
/** |
|||
* Get the value of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getValue(): string; |
|||
|
|||
/** |
|||
* Get the scope of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getScope(): string; |
|||
|
|||
/** |
|||
* Get the verification status of a property |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getVerified(): string; |
|||
|
|||
} |
|||
|
|||
|
|||
@ -0,0 +1,44 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OCP\Accounts; |
|||
|
|||
/** |
|||
* Class PropertyDoesNotExistException |
|||
* |
|||
* @since 15.0.0 |
|||
* |
|||
* @package OCP\Accounts |
|||
*/ |
|||
class PropertyDoesNotExistException extends \Exception { |
|||
|
|||
/** |
|||
* Constructor |
|||
* @param string $msg the error message |
|||
* @since 15.0.0 |
|||
*/ |
|||
public function __construct($property){ |
|||
parent::__construct('Property ' . $property . ' does not exist.'); |
|||
} |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue