IpLoginController.php in IP Login 4.x
File
src/IpLoginController.php
View source
<?php
namespace Drupal\ip_login;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\HttpFoundation\Request;
use Drupal\user\Entity\User;
use Drupal\Core\Url;
class IpLoginController extends ControllerBase {
public function loginProcess(Request $request) {
$uid = $this
->checkIpLoginExists($request);
if (empty($uid)) {
\Drupal::logger('ip_login')
->warning('IP login processing accessed without any matches from @ip.', [
'@ip' => $request
->getClientIp(),
]);
}
else {
static::doUserLogin($uid, $request);
}
$destination = Url::fromUserInput(\Drupal::destination()
->get());
if ($destination
->isRouted()) {
return $this
->redirect($destination
->getRouteName(), $destination
->getRouteParameters());
}
else {
return $this
->redirect('<front>');
}
}
public static function doUserLogin($uid, Request $request) {
$user = User::load($uid);
user_login_finalize($user);
\Drupal::logger('ip_login')
->notice('Logging in user @uid through IP login from @ip.', [
'@uid' => $uid,
'@ip' => $request
->getClientIp(),
]);
\Drupal::messenger()
->addMessage(t('You have been logged in automatically using IP login.'));
}
public static function checkIpLoginExists(Request $request) {
$ip = inet_pton($request
->getClientIp());
$entity_type = \Drupal::entityTypeManager()
->getDefinition('user');
if (is_subclass_of($entity_type
->getStorageClass(), SqlContentEntityStorage::class)) {
$result = \Drupal::database()
->select('users_field_data', 'ufd')
->fields('ufd', [
'uid',
])
->condition('ip_login__ip_start', $ip, '<=')
->condition('ip_login__ip_end', $ip, '>=')
->condition('status', 1)
->orderBy('uid', 'DESC')
->range(0, 1)
->execute()
->fetchCol();
$uid = reset($result);
}
else {
$query = \Drupal::entityQuery('user')
->condition('ip_login.ip_start', $ip, '<=')
->condition('ip_login.ip_end', $ip, '>=')
->condition('status', 1);
$uids = $query
->execute();
$uid = reset($uids);
}
return $uid;
}
public static function canLoginAsAnotherUser(AccountInterface $user) {
if ($user
->hasPermission('administer ip login')) {
return TRUE;
}
if (!self::checkIpLoginExists(\Drupal::request())) {
return TRUE;
}
return $user
->hasPermission('can log in as another user');
}
}