You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.2 KiB
141 lines
3.2 KiB
<?php
|
|
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
use Chamilo\UserBundle\Entity\User;
|
|
|
|
/**
|
|
* Base class for Web Services.
|
|
*
|
|
* @author Angel Fernando Quiroz Campos <angel.quiroz@beeznest.com>
|
|
*/
|
|
class WebService
|
|
{
|
|
/**
|
|
* @var User
|
|
*/
|
|
protected $user;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $apiKey;
|
|
|
|
/**
|
|
* Class constructor.
|
|
*
|
|
* @param $username
|
|
* @param $apiKey
|
|
*/
|
|
protected function __construct($username, $apiKey)
|
|
{
|
|
/** @var User user */
|
|
$this->user = UserManager::getManager()->findUserByUsername($username);
|
|
$this->apiKey = $apiKey;
|
|
|
|
$_user = [
|
|
'user_id' => $this->user->getId(),
|
|
'status' => $this->user->getStatus(),
|
|
'uidReset' => true,
|
|
];
|
|
ChamiloSession::write('_user', $_user);
|
|
ChamiloSession::write('is_allowed_in_course', true);
|
|
|
|
Login::init_user($this->user->getId(), true);
|
|
}
|
|
|
|
/**
|
|
* @param string $username
|
|
* @param string $apiKeyToValidate
|
|
*
|
|
* @return WebService
|
|
*/
|
|
public static function validate($username, $apiKeyToValidate)
|
|
{
|
|
return new self($username, $apiKeyToValidate);
|
|
}
|
|
|
|
/**
|
|
* Find the api key for a user. If the api key does not exists is created.
|
|
*
|
|
* @param string $username
|
|
* @param string $serviceName
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function findUserApiKey($username, $serviceName)
|
|
{
|
|
$user = UserManager::getManager()->findUserByUsername($username);
|
|
if ($user) {
|
|
$apiKeys = UserManager::get_api_keys($user->getId(), $serviceName);
|
|
|
|
if (empty($apiKeys)) {
|
|
UserManager::add_api_key($user->getId(), $serviceName);
|
|
}
|
|
|
|
$apiKeys = UserManager::get_api_keys($user->getId(), $serviceName);
|
|
|
|
return current($apiKeys);
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Check whether the username and password are valid.
|
|
*
|
|
* @param string $username
|
|
* @param string $password
|
|
*
|
|
* @throws Exception
|
|
*
|
|
* @return bool Return true if the password belongs to the username. Otherwise return false
|
|
*/
|
|
public static function isValidUser($username, $password)
|
|
{
|
|
if (empty($username) || empty($password)) {
|
|
return false;
|
|
}
|
|
|
|
$user = UserManager::getManager()->findUserByUsername($username);
|
|
|
|
if (!$user) {
|
|
return false;
|
|
}
|
|
|
|
return UserManager::checkPassword(
|
|
$user->getPassword(),
|
|
$password,
|
|
$user->getSalt(),
|
|
$user->getId()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return User
|
|
*/
|
|
public function getUser()
|
|
{
|
|
return $this->user;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
protected static function throwNotAllowedException()
|
|
{
|
|
throw new Exception(get_lang('NotAllowed'));
|
|
}
|
|
|
|
/**
|
|
* Prevent access to this webservice if the user is not a platform admin.
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
protected static function protectAdminEndpoint()
|
|
{
|
|
if (!api_is_platform_admin()) {
|
|
self::throwNotAllowedException();
|
|
}
|
|
}
|
|
}
|
|
|