mirror of
https://github.com/YunoHost-Apps/kanboard_ynh.git
synced 2024-09-03 19:36:17 +02:00
92 lines
2.4 KiB
PHP
92 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace Model;
|
|
|
|
/**
|
|
* LastLogin model
|
|
*
|
|
* @package model
|
|
* @author Frederic Guillot
|
|
*/
|
|
class LastLogin extends Base
|
|
{
|
|
/**
|
|
* SQL table name
|
|
*
|
|
* @var string
|
|
*/
|
|
const TABLE = 'last_logins';
|
|
|
|
/**
|
|
* Number of connections to keep for history
|
|
*
|
|
* @var integer
|
|
*/
|
|
const NB_LOGINS = 10;
|
|
|
|
/**
|
|
* Authentication methods
|
|
*
|
|
* @var string
|
|
*/
|
|
const AUTH_DATABASE = 'database';
|
|
const AUTH_REMEMBER_ME = 'remember_me';
|
|
const AUTH_LDAP = 'ldap';
|
|
const AUTH_GOOGLE = 'google';
|
|
const AUTH_GITHUB = 'github';
|
|
|
|
/**
|
|
* Create a new record
|
|
*
|
|
* @access public
|
|
* @param string $auth_type Authentication method
|
|
* @param integer $user_id User id
|
|
* @param string $ip IP Address
|
|
* @param string $user_agent User Agent
|
|
* @return array
|
|
*/
|
|
public function create($auth_type, $user_id, $ip, $user_agent)
|
|
{
|
|
// Cleanup old sessions if necessary
|
|
$connections = $this->db
|
|
->table(self::TABLE)
|
|
->eq('user_id', $user_id)
|
|
->desc('date_creation')
|
|
->findAllByColumn('id');
|
|
|
|
if (count($connections) >= self::NB_LOGINS) {
|
|
|
|
$this->db->table(self::TABLE)
|
|
->eq('user_id', $user_id)
|
|
->notin('id', array_slice($connections, 0, self::NB_LOGINS - 1))
|
|
->remove();
|
|
}
|
|
|
|
return $this->db
|
|
->table(self::TABLE)
|
|
->insert(array(
|
|
'auth_type' => $auth_type,
|
|
'user_id' => $user_id,
|
|
'ip' => $ip,
|
|
'user_agent' => $user_agent,
|
|
'date_creation' => time(),
|
|
));
|
|
}
|
|
|
|
/**
|
|
* Get the last connections for a given user
|
|
*
|
|
* @access public
|
|
* @param integer $user_id User id
|
|
* @return array
|
|
*/
|
|
public function getAll($user_id)
|
|
{
|
|
return $this->db
|
|
->table(self::TABLE)
|
|
->eq('user_id', $user_id)
|
|
->desc('date_creation')
|
|
->columns('id', 'auth_type', 'ip', 'user_agent', 'date_creation')
|
|
->findAll();
|
|
}
|
|
}
|