openstackid/app/services/openid/UserService.php
Sebastian Marcet 2a65750477 Migration of resource server
* removed resource server code
* removed marketplace api
* removed marketplace api test
* made tests agnostic of realm
* added missing http headers
* fix on db schemes ( added default values on some tables).
Change-Id: I857bc2c795107bb63c03652397c406b97ba8c86a
2015-06-17 13:21:55 -03:00

235 lines
6.1 KiB
PHP

<?php
namespace services\openid;
use auth\IUserRepository;
use openid\model\IOpenIdUser;
use Exception;
use openid\services\IUserService;
use utils\services\ILogService;
use utils\db\ITransactionService;
/**
* Class UserService
* @package services\openid
*/
class UserService implements IUserService
{
private $repository;
private $log_service;
private $tx_service;
/**
* @param IUserRepository $repository
* @param ITransactionService $tx_service
* @param ILogService $log_service
*/
public function __construct(IUserRepository $repository, ITransactionService $tx_service, ILogService $log_service){
$this->repository = $repository;
$this->log_service = $log_service;
$this->tx_service = $tx_service;
}
/**
* Associate openid url with given user
* @param IOpenIdUser $user
* @param $proposed_username
* @return bool|IOpenIdUser
* @throws \Exception
*/
public function associateUser(IOpenIdUser &$user, $proposed_username)
{
try {
$repository = $this->repository;
if (!is_null($user) && strval($user->identifier) === strval($user->external_identifier)) {
$this->tx_service->transaction(function () use ($proposed_username,&$user,&$repository) {
$done = false;
$fragment_nbr = 1;
$aux_proposed_username = $proposed_username;
do {
$old_user = $repository->getOneByCriteria(array(
array('name' => 'identifier','op' => '=','value' => $aux_proposed_username),
array('name' => 'id','op' => '<>','value' => $user->id) ));
if (is_null($old_user)) {
$user->identifier = $aux_proposed_username;
$done = $repository->update($user);
} else {
$aux_proposed_username = $proposed_username . "." . $fragment_nbr;
$fragment_nbr++;
}
} while (!$done);
return $user;
});
}
} catch (Exception $ex) {
$this->log_service->error($ex);
throw $ex;
}
return false;
}
/**
* @param $identifier
* @return mixed|void
* @throws \Exception
*/
public function updateLastLoginDate($identifier)
{
try {
$user = $this->repository->get($identifier);
if (!is_null($user)) {
$user->last_login_date = gmdate("Y-m-d H:i:s", time());
$this->repository->update($user);
}
} catch (Exception $ex) {
$this->log_service->error($ex);
throw $ex;
}
}
/**
* @param $identifier
* @return mixed|void
* @throws \Exception
*/
public function updateFailedLoginAttempts($identifier)
{
try {
$user = $this->repository->get($identifier);
if (!is_null($user)) {
$user->login_failed_attempt+=1;
$this->repository->update($user);
}
} catch (Exception $ex) {
$this->log_service->error($ex);
throw $ex;
}
}
/**
* @param $identifier
* @return mixed|void
* @throws \Exception
*/
public function lockUser($identifier)
{
try {
$user = $this->repository->get($identifier);
if (!is_null($user)) {
$user->lock = true;
$this->repository->update($user);
Log::warning(sprintf("User %d locked ", $identifier));
}
} catch (Exception $ex) {
$this->log_service->error($ex);
throw $ex;
}
}
/**
* @param $identifier
* @return mixed|void
* @throws \Exception
*/
public function unlockUser($identifier)
{
try {
$user = $this->repository->get($identifier);
if (!is_null($user)) {
$user->lock = false;
$this->repository->update($user);
Log::warning(sprintf("User %d unlocked ", $identifier));
}
} catch (Exception $ex) {
$this->log_service->error($ex);
throw $ex;
}
}
/**
* @param $identifier
* @return mixed|void
* @throws \Exception
*/
public function activateUser($identifier)
{
try {
$user = $this->repository->get($identifier);
if (!is_null($user)) {
$user->active = true;
$this->repository->update($user);
}
} catch (Exception $ex) {
$this->log_service->error($ex);
throw $ex;
}
}
/**
* @param $identifier
* @return mixed|void
* @throws \Exception
*/
public function deActivateUser($identifier)
{
try {
$user = $this->repository->get($identifier);
if (!is_null($user)) {
$user->active = false;
$this->repository->update($user);
}
} catch (Exception $ex) {
$this->log_service->error($ex);
throw $ex;
}
}
/**
* @param $identifier
* @param $show_pic
* @param $show_full_name
* @param $show_email
* @return bool
* @throws \Exception
*/
public function saveProfileInfo($identifier, $show_pic, $show_full_name, $show_email)
{
try {
$user = $this->repository->get($identifier);
if (!is_null($user)) {
$user->public_profile_show_photo = $show_pic;
$user->public_profile_show_fullname = $show_full_name;
$user->public_profile_show_email = $show_email;
return $this->repository->update($user);
}
} catch (Exception $ex) {
$this->log_service->error($ex);
throw $ex;
}
return false;
}
public function get($id){
return $this->repository->get($id);
}
/**
* @param int $page_nbr
* @param int $page_size
* @param array $filters
* @param array $fields
* @return mixed
*/
public function getAll($page_nbr = 1, $page_size = 10, array $filters = array(), array $fields = array('*'))
{
return $this->repository->getByPage($page_nbr, $page_size, $filters,$fields);
}
}