Browse Source

[Web] Cache validation result in Redis

andryyy 6 years ago
parent
commit
294e0bc07f
2 changed files with 21 additions and 8 deletions
  1. 4 1
      data/web/admin.php
  2. 17 7
      data/web/inc/functions.inc.php

+ 4 - 1
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>

+ 17 - 7
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'");