raspisms/controllers/internals/ExpressionProvider.php

52 lines
1.6 KiB
PHP
Raw Normal View History

<?php
2020-01-17 18:19:25 +01:00
/*
* This file is part of RaspiSMS.
*
* (c) Pierre-Lin Bonnemaison <plebwebsas@gmail.com>
*
* This source file is subject to the GPL-3.0 license that is bundled
* with this source code in the file LICENSE.
*/
namespace controllers\internals;
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
class ExpressionProvider implements ExpressionFunctionProviderInterface
{
public function getFunctions()
{
//Override default constant() function to make it return null
//This will prevent the use of constant() func to read constants with security impact (such as session, db credentials, etc.)
2020-06-23 21:06:13 +02:00
$neutralized_constant = new ExpressionFunction('constant', function ($str)
{
return null;
2020-06-23 21:06:13 +02:00
}, function ($arguments, $str)
{
return null;
});
2020-06-10 01:44:05 +02:00
//Exists must be personnalized because it inverse is_null
2020-06-23 21:06:13 +02:00
$exists = new ExpressionFunction('exists', function ($var)
{
2020-06-10 01:44:05 +02:00
return sprintf('!is_null(%1$s)', $str);
2020-06-23 21:06:13 +02:00
}, function ($arguments, $var)
{
return null !== $var;
2020-06-10 01:44:05 +02:00
});
return [
$neutralized_constant,
2020-06-10 01:44:05 +02:00
$exists,
ExpressionFunction::fromPhp('mb_strtolower', 'lower'),
ExpressionFunction::fromPhp('mb_strtoupper', 'upper'),
ExpressionFunction::fromPhp('mb_substr', 'substr'),
2020-06-10 01:30:14 +02:00
ExpressionFunction::fromPhp('mb_strlen', 'strlen'),
ExpressionFunction::fromPhp('abs', 'abs'),
ExpressionFunction::fromPhp('strtotime', 'date'),
];
}
}