public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
[Web] Cache validation result in Redis
294e0bc0
data/web/admin.php | 5 ++++-
data/web/inc/functions.inc.php | 24 +++++++++++++++++-------
2 files changed, 21 insertions(+), 8 deletions(-)
Diff
diff --git a/data/web/admin.php b/data/web/admin.php
index 7565bc49..da27a7d6 100644
--- a/data/web/admin.php
+++ b/data/web/admin.php
@@ -5,6 +5,9 @@ if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admi
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';
$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
$tfa_data = get_tfa();
+if (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CACHE')) {
+ $_SESSION['gal'] = json_decode($license_cache, true);
+}
?>
<div class="container">
@@ -87,7 +90,7 @@ $tfa_data = get_tfa();
<div class="col-sm-9">
<div class="input-group">
<span class="input-group-addon">
- <span class="glyphicon <?=(isset($_SESSION['gal']['valid']) && $_SESSION['gal']['valid'] === true) ? 'glyphicon-heart text-danger' : 'glyphicon-remove';?>" aria-hidden="true"></span>
+ <span class="glyphicon <?=(isset($_SESSION['gal']['valid']) && $_SESSION['gal']['valid'] === "true") ? 'glyphicon-heart text-danger' : 'glyphicon-remove';?>" aria-hidden="true"></span>
</span>
<input type="text" id="guid" class="form-control" value="<?=license('guid');?>" readonly>
</div>
diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php
index 40a6dd9b..25b931b6 100644
--- a/data/web/inc/functions.inc.php
+++ b/data/web/inc/functions.inc.php
@@ -1250,24 +1250,34 @@ function license($action, $data = null) {
$json_return = json_decode($response, true);
if ($response && $json_return) {
if ($json_return['response'] === "ok") {
- $_SESSION['gal']['valid'] = true;
+ $_SESSION['gal']['valid'] = "true";
$_SESSION['gal']['c'] = $json_return['c'];
$_SESSION['gal']['s'] = $json_return['s'];
- return true;
- }
- if ($json_return['response'] === "invalid") {
- $_SESSION['gal']['valid'] = false;
+ }
+ elseif ($json_return['response'] === "invalid") {
+ $_SESSION['gal']['valid'] = "false";
$_SESSION['gal']['c'] = $lang['mailbox']['no'];
$_SESSION['gal']['s'] = $lang['mailbox']['no'];
- return true;
}
}
else {
- $_SESSION['gal']['valid'] = false;
+ $_SESSION['gal']['valid'] = "false";
$_SESSION['gal']['c'] = $lang['danger']['temp_error'];
$_SESSION['gal']['s'] = $lang['danger']['temp_error'];
+ }
+ try {
+ // json_encode needs "true"/"false" instead of true/false, to not encode it to 0 or 1
+ $redis->Set('LICENSE_STATUS_CACHE', json_encode($_SESSION['gal']));
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
return false;
}
+ return $_SESSION['gal']['valid'];
break;
case "guid":
$stmt = $pdo->query("SELECT `version` FROM `versions` WHERE `application` = 'GUID'");