'danger', 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), 'msg' => 'access_denied' ); return false; } switch ($_scope) { case 'domain': if (!is_array($_data['object'])) { $objects = array(); $objects[] = $_data['object']; } else { $objects = $_data['object']; } foreach ($objects as $object) { $rl_value = intval($_data['rl_value']); $rl_frame = $_data['rl_frame']; if (!in_array($rl_frame, array('s', 'm', 'h'))) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => 'rl_timeframe' ); continue; } if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => 'access_denied' ); continue; } if (empty($rl_value)) { try { $redis->hDel('RL_VALUE', $object); } catch (RedisException $e) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('redis_error', $e) ); continue; } } else { try { $redis->hSet('RL_VALUE', $object, $rl_value . ' / 1' . $rl_frame); } catch (RedisException $e) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('redis_error', $e) ); continue; } } $_SESSION['return'][] = array( 'type' => 'success', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('rl_saved', $object) ); } break; case 'mailbox': if (!is_array($_data['object'])) { $objects = array(); $objects[] = $_data['object']; } else { $objects = $_data['object']; } foreach ($objects as $object) { $rl_value = intval($_data['rl_value']); $rl_frame = $_data['rl_frame']; if (!in_array($rl_frame, array('s', 'm', 'h'))) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => 'rl_timeframe' ); continue; } if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object) || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin')) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => 'access_denied' ); continue; } if (empty($rl_value)) { try { $redis->hDel('RL_VALUE', $object); } catch (RedisException $e) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('redis_error', $e) ); continue; } } else { try { $redis->hSet('RL_VALUE', $object, $rl_value . ' / 1' . $rl_frame); } catch (RedisException $e) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('redis_error', $e) ); continue; } } $_SESSION['return'][] = array( 'type' => 'success', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('rl_saved', $object) ); } break; } break; case 'get': switch ($_scope) { case 'domain': if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) { return false; } try { if ($rl_value = $redis->hGet('RL_VALUE', $_data)) { $rl = explode(' / 1', $rl_value); $data['value'] = $rl[0]; $data['frame'] = $rl[1]; return $data; } else { return false; } } catch (RedisException $e) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('redis_error', $e) ); return false; } return false; break; case 'mailbox': if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data) || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin')) { return false; } try { if ($rl_value = $redis->hGet('RL_VALUE', $_data)) { $rl = explode(' / 1', $rl_value); $data['value'] = $rl[0]; $data['frame'] = $rl[1]; return $data; } else { return false; } } catch (RedisException $e) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('redis_error', $e) ); return false; } return false; break; } break; case 'delete': $data['hash'] = $_data; if ($_SESSION['mailcow_cc_role'] != 'admin' || !preg_match('/^RL[0-9A-Za-z=]+$/i', trim($data['hash']))) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), 'msg' => 'access_denied' ); return false; } try { if ($redis->exists($data['hash'])) { $redis->delete($data['hash']); $_SESSION['return'][] = array( 'type' => 'success', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => 'hash_deleted' ); return true; } else { $_SESSION['return'][] = array( 'type' => 'warning', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => 'hash_not_found' ); return false; } } catch (RedisException $e) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log), 'msg' => array('redis_error', $e) ); return false; } return false; break; } }