Skip to content

Commit

Permalink
Merge branch 'main' into 16-active-directory-support
Browse files Browse the repository at this point in the history
  • Loading branch information
coudot committed Sep 17, 2024
2 parents 4837d12 + 99300b5 commit c0700ba
Show file tree
Hide file tree
Showing 13 changed files with 1,776 additions and 3 deletions.
6 changes: 5 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@
"require": {
"php": ">=7.4",
"ext-ldap": ">=7.4",
"phpmailer/phpmailer": "^6.5.0"
"phpmailer/phpmailer": "^6.5.0",
"symfony/cache": "^v5.4.42",
"predis/predis": "^v2.2.2",
"bjeavons/zxcvbn-php": "^1.0",
"mxrxdxn/pwned-passwords": "^v2.1.0"
},
"require-dev": {
"phpunit/phpunit": ">=8",
Expand Down
92 changes: 92 additions & 0 deletions src/Ltb/Cache/Cache.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<?php namespace Ltb\Cache;

class Cache {

// symfony cache instance
public $cache = null;

# Generate a cache entry containing a token,
# expiring after $cache_form_expiration seconds
function generate_form_token($cache_form_expiration)
{
$formtoken = hash('sha256', bin2hex(random_bytes(16)));
$cachedToken = $this->cache->getItem($formtoken);
$cachedToken->set($formtoken);
$cachedToken->expiresAfter($cache_form_expiration);
$this->cache->save($cachedToken);
error_log("generated form token: " .
$formtoken .
" valid for $cache_form_expiration s");
return $formtoken;
}

# Verify that give token exist in cache
# and if it exists, remove it from cache
function verify_form_token($formtoken)
{
$result = "";
$cachedToken = $this->cache->getItem($formtoken);
if( $cachedToken->isHit() && $cachedToken->get() == $formtoken )
{
# Remove token from cache entry
$this->cache->deleteItem($formtoken);
}
else
{
error_log("Invalid form token: sent: $formtoken, stored: " .
$cachedToken->get());
$result = "invalidformtoken";
}
return $result;
}


# Get a token from the cache
# return the content of the content (can be an array, a string)
function get_token($tokenid)
{
$cached_token = $this->cache->getItem($tokenid);
$cached_token_content = $cached_token->get();

if($cached_token->isHit())
{
return $cached_token_content;
}
else
{
return null;
}
}

# Save a token to the cache
function save_token($content, $tokenid = null, $cache_token_expiration = null)
{
$msg = "";
if(is_null($tokenid))
{
$tokenid = hash('sha256', bin2hex(random_bytes(16)));
$msg .= "Generated cache entry with id: $tokenid";
}
else
{
$msg .= "Saving existing cache entry with id: $tokenid";
}

$cached_token = $this->cache->getItem($tokenid);
$cached_token->set( $content );

if(!is_null($cache_token_expiration))
{
$cached_token->expiresAfter($cache_token_expiration);
$msg .= ", valid for $cache_token_expiration s";
}

$this->cache->save($cached_token);
error_log($msg);

return $tokenid;
}

}

?>
27 changes: 27 additions & 0 deletions src/Ltb/Cache/FileCache.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php namespace Ltb\Cache;

use Symfony\Component\Cache\Adapter\FilesystemAdapter;

class FileCache extends \Ltb\Cache\Cache{

public function __construct(
$namespace = 'ltbCache',
$defaultLifetime = 0,
$directory = null
)
{

$this->cache = new FilesystemAdapter(
$namespace,
$defaultLifetime,
$directory
);

// Clean cache from expired entries
$this->cache->prune();

}

}

?>
26 changes: 26 additions & 0 deletions src/Ltb/Cache/RedisCache.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php namespace Ltb\Cache;

use Symfony\Component\Cache\Adapter\RedisAdapter;

class RedisCache extends \Ltb\Cache\Cache{

public function __construct(
$redis_url,
$namespace = 'ltbCache',
$defaultLifetime = 0,
)
{

$redis_connection = RedisAdapter::createConnection( $redis_url );

$this->cache = new RedisAdapter(
$redis_connection,
$namespace,
$defaultLifetime,
);

}

}

?>
4 changes: 2 additions & 2 deletions src/Ltb/PhpLDAP.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,9 @@ public static function ldap_mod_replace(...$args)
return ldap_mod_replace(...$args);
}

public static function ldap_first_entry($ldap, $entry, $attribute)
public static function ldap_first_entry(...$args)
{
return ldap_first_entry($ldap, $entry, $attribute);
return ldap_first_entry(...$args);
}

}
Expand Down
Loading

0 comments on commit c0700ba

Please sign in to comment.