blob: 31f8a26378be518b231c6fc76d6376a49bde4dd6 [file] [log] [blame]
<?php
/**
* Copyright 2007 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
*/
namespace google\appengine\api\users;
use google\appengine\util\StringUtil;
/**
* A user.
*
* We provide the email address, nickname, and id for a user.
*
* A nickname is a human-readable string which uniquely identifies a Google
* user, akin to a username. It will be an email address for some users, but
* not all.
*
* A user could be a Google Accounts user or a federated login user.
*
* Federated identity and federated provider are only avaliable for
* federated users.
*/
final class User {
private $user_id = null;
private $federated_identity = null;
private $federated_provider = null;
/**
* Constructor.
*
* @param string $email An optional string of the user's email address. It
* defaults to the current user's email address.
* @param string $federated_identity The federated identity of user. It
* defaults to the current user's federated identity.
* @param string $federated_provider The federated provider url of user.
*
* @throws \InvalidArgumentException Thrown if both email and federated
* identity are empty.
*/
public function __construct(
$email = null,
$federated_identity = null,
$federated_provider = null,
$user_id = null) {
$auth_domain = getenv('AUTH_DOMAIN');
assert($auth_domain !== false);
if ($email === null and $federated_identity === null) {
throw new \InvalidArgumentException(
'One of $email or $federated_identity must be set.');
}
$this->email = $email;
$this->federated_identity = $federated_identity;
$this->federated_provider = $federated_provider;
$this->auth_domain = $auth_domain;
$this->user_id = $user_id;
}
/**
* Return this user's nickname.
*
* The nickname will be a unique, human readable identifier for this user
* with respect to this application. It will be an email address for some
* users, part of the email address for some users, and the federated identity
* for federated users who have not asserted an email address.
*
* @return string The user's nickname.
*/
public function getNickname() {
if ($this->email != null && $this->auth_domain != null &&
StringUtil::endsWith($this->email, '@' . $this->auth_domain)) {
$suffixLen = strlen($this->auth_domain) + 1;
return substr($this->email, 0, -$suffixLen);
} else if ($this->federated_identity) {
return $this->federated_identity;
} else {
return $this->email;
}
}
/**
* Return this user's email address.
*
* @return string The user's email address.
*/
public function getEmail() {
return $this->email;
}
/**
* Return either a permanent unique identifying string or null.
*
* If the email address was set explicity, this will return null.
*
* @return string The user's UserId.
*/
public function getUserId() {
return $this->user_id;
}
/**
* Return this user's auth domain.
*
* This method is internal and should not be used by client applications.
*
* @return string The user's authentication domain.
*/
public function getAuthDomain() {
return $this->auth_domain;
}
/**
* Return this user's federated identity, null if not a federated user.
*
* @return string The user's federated identity.
*/
public function getFederatedIdentity() {
return $this->federated_identity;
}
/**
* Return this user's federated provider, null if not a federated user.
*
* @return string The user's federated provider.
*/
public function getFederatedProvider() {
return $this->federated_provider;
}
/**
* Magic method that PHP uses when the object is treated like a string.
*
* @return string The attributes of this user.
*/
public function __toString() {
$res = array();
if ($this->email != null) {
$res[] = sprintf("email='%s'", $this->email);
}
if ($this->federated_identity != null) {
$res[] = sprintf("federated_identity='%s'", $this->federated_identity);
}
if ($this->user_id != null) {
$res[] = sprintf("user_id='%s'", $this->user_id);
}
return sprintf('User(%s)', join(',', $res));
}
} // class User