diff options
author | Frederic Guillot <fred@kanboard.net> | 2016-12-03 15:43:36 -0500 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2016-12-03 15:43:36 -0500 |
commit | b8f7532e5c7e8b8be3ab199fca3dadd0d22be4cd (patch) | |
tree | 435eb1e72df595875547547f939493a6a6b7c512 /app/Auth | |
parent | 23d862aef8891130bc7eaeaa25513a9895b44c95 (diff) |
Add personal API access token
Diffstat (limited to 'app/Auth')
-rw-r--r-- | app/Auth/ApiAccessTokenAuth.php | 119 | ||||
-rw-r--r-- | app/Auth/DatabaseAuth.php | 2 | ||||
-rw-r--r-- | app/Auth/LdapAuth.php | 2 | ||||
-rw-r--r-- | app/Auth/RememberMeAuth.php | 4 | ||||
-rw-r--r-- | app/Auth/ReverseProxyAuth.php | 2 | ||||
-rw-r--r-- | app/Auth/TotpAuth.php | 2 |
6 files changed, 125 insertions, 6 deletions
diff --git a/app/Auth/ApiAccessTokenAuth.php b/app/Auth/ApiAccessTokenAuth.php new file mode 100644 index 00000000..12ab21a7 --- /dev/null +++ b/app/Auth/ApiAccessTokenAuth.php @@ -0,0 +1,119 @@ +<?php + +namespace Kanboard\Auth; + +use Kanboard\Core\Base; +use Kanboard\Core\Security\PasswordAuthenticationProviderInterface; +use Kanboard\Model\UserModel; +use Kanboard\User\DatabaseUserProvider; + +/** + * API Access Token Authentication Provider + * + * @package Kanboard\Auth + * @author Frederic Guillot + */ +class ApiAccessTokenAuth extends Base implements PasswordAuthenticationProviderInterface +{ + /** + * User properties + * + * @access protected + * @var array + */ + protected $userInfo = array(); + + /** + * Username + * + * @access protected + * @var string + */ + protected $username = ''; + + /** + * Password + * + * @access protected + * @var string + */ + protected $password = ''; + + /** + * Get authentication provider name + * + * @access public + * @return string + */ + public function getName() + { + return 'API Access Token'; + } + + /** + * Authenticate the user + * + * @access public + * @return boolean + */ + public function authenticate() + { + if (! isset($this->sessionStorage->scope) || $this->sessionStorage->scope !== 'API') { + $this->logger->debug(__METHOD__.': Authentication provider skipped because invalid scope'); + return false; + } + + $user = $this->db + ->table(UserModel::TABLE) + ->columns('id', 'password') + ->eq('username', $this->username) + ->eq('api_access_token', $this->password) + ->notNull('api_access_token') + ->eq('is_active', 1) + ->findOne(); + + if (! empty($user)) { + $this->userInfo = $user; + return true; + } + + return false; + } + + /** + * Get user object + * + * @access public + * @return \Kanboard\User\DatabaseUserProvider + */ + public function getUser() + { + if (empty($this->userInfo)) { + return null; + } + + return new DatabaseUserProvider($this->userInfo); + } + + /** + * Set username + * + * @access public + * @param string $username + */ + public function setUsername($username) + { + $this->username = $username; + } + + /** + * Set password + * + * @access public + * @param string $password + */ + public function setPassword($password) + { + $this->password = $password; + } +} diff --git a/app/Auth/DatabaseAuth.php b/app/Auth/DatabaseAuth.php index ecb42c17..84a1e019 100644 --- a/app/Auth/DatabaseAuth.php +++ b/app/Auth/DatabaseAuth.php @@ -11,7 +11,7 @@ use Kanboard\User\DatabaseUserProvider; /** * Database Authentication Provider * - * @package auth + * @package Kanboard\Auth * @author Frederic Guillot */ class DatabaseAuth extends Base implements PasswordAuthenticationProviderInterface, SessionCheckProviderInterface diff --git a/app/Auth/LdapAuth.php b/app/Auth/LdapAuth.php index a8dcfcb6..05ffbebf 100644 --- a/app/Auth/LdapAuth.php +++ b/app/Auth/LdapAuth.php @@ -12,7 +12,7 @@ use Kanboard\Core\Security\PasswordAuthenticationProviderInterface; /** * LDAP Authentication Provider * - * @package auth + * @package Kanboard\Auth * @author Frederic Guillot */ class LdapAuth extends Base implements PasswordAuthenticationProviderInterface diff --git a/app/Auth/RememberMeAuth.php b/app/Auth/RememberMeAuth.php index 5d0a8b2e..e0f4ceb6 100644 --- a/app/Auth/RememberMeAuth.php +++ b/app/Auth/RememberMeAuth.php @@ -7,9 +7,9 @@ use Kanboard\Core\Security\PreAuthenticationProviderInterface; use Kanboard\User\DatabaseUserProvider; /** - * Rember Me Cookie Authentication Provider + * RememberMe Cookie Authentication Provider * - * @package auth + * @package Kanboard\Auth * @author Frederic Guillot */ class RememberMeAuth extends Base implements PreAuthenticationProviderInterface diff --git a/app/Auth/ReverseProxyAuth.php b/app/Auth/ReverseProxyAuth.php index fdf936b1..02afc302 100644 --- a/app/Auth/ReverseProxyAuth.php +++ b/app/Auth/ReverseProxyAuth.php @@ -10,7 +10,7 @@ use Kanboard\User\ReverseProxyUserProvider; /** * Reverse-Proxy Authentication Provider * - * @package auth + * @package Kanboard\Auth * @author Frederic Guillot */ class ReverseProxyAuth extends Base implements PreAuthenticationProviderInterface, SessionCheckProviderInterface diff --git a/app/Auth/TotpAuth.php b/app/Auth/TotpAuth.php index 8e1ebe35..abfb2168 100644 --- a/app/Auth/TotpAuth.php +++ b/app/Auth/TotpAuth.php @@ -11,7 +11,7 @@ use Kanboard\Core\Security\PostAuthenticationProviderInterface; /** * TOTP Authentication Provider * - * @package auth + * @package Kanboard\Auth * @author Frederic Guillot */ class TotpAuth extends Base implements PostAuthenticationProviderInterface |