forked from blallo/rss-bridge
Ajout du paramètre pattern pour les entrées de type texte, ajout du required côté HTML.
Correction de la page d'accueuil pour qu'elle soit conforme aux standards du W3C. Correction de la regex de listage des fichiers pour qu'elle ignore les sauvegardes. Ajout d'un nettoyeur HTML, par défaut.
This commit is contained in:
parent
38829e7739
commit
e582c887fb
7 changed files with 81 additions and 26 deletions
|
@ -13,7 +13,8 @@ class FacebookBridge extends BridgeAbstract{
|
||||||
'[
|
'[
|
||||||
{
|
{
|
||||||
"name" : "Username",
|
"name" : "Username",
|
||||||
"identifier" : "u"
|
"identifier" : "u",
|
||||||
|
"required" : "required"
|
||||||
}
|
}
|
||||||
]';
|
]';
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,8 @@ class PickyWallpapersBridge extends BridgeAbstract {
|
||||||
{
|
{
|
||||||
"name" : "resolution",
|
"name" : "resolution",
|
||||||
"identifier" : "r",
|
"identifier" : "r",
|
||||||
"exampleValue" : "1920x1200, 1680x1050, ..."
|
"exampleValue" : "1920x1200, 1680x1050, ...",
|
||||||
|
"pattern" : "[0-9]{3,4}x[0-9]{3,4}"
|
||||||
}
|
}
|
||||||
|
|
||||||
]';
|
]';
|
||||||
|
|
|
@ -23,7 +23,8 @@ class YoutubeBridge extends BridgeAbstract {
|
||||||
"type" : "text",
|
"type" : "text",
|
||||||
"identifier" : "u",
|
"identifier" : "u",
|
||||||
"name" : "username",
|
"name" : "username",
|
||||||
"exampleValue" : "test"
|
"exampleValue" : "test",
|
||||||
|
"required" : "required"
|
||||||
}
|
}
|
||||||
]';
|
]';
|
||||||
|
|
||||||
|
@ -33,7 +34,8 @@ class YoutubeBridge extends BridgeAbstract {
|
||||||
"type" : "number",
|
"type" : "number",
|
||||||
"identifier" : "c",
|
"identifier" : "c",
|
||||||
"name" : "channel id",
|
"name" : "channel id",
|
||||||
"exampleValue" : "15"
|
"exampleValue" : "15",
|
||||||
|
"required" : "required"
|
||||||
}
|
}
|
||||||
]';
|
]';
|
||||||
|
|
||||||
|
|
|
@ -149,9 +149,6 @@ $formats = Format::searchInformation();
|
||||||
<meta name="description" content="Rss-bridge" />
|
<meta name="description" content="Rss-bridge" />
|
||||||
<title>RSS-Bridge</title>
|
<title>RSS-Bridge</title>
|
||||||
<link href="css/style.css" rel="stylesheet">
|
<link href="css/style.css" rel="stylesheet">
|
||||||
<!--[if IE]>
|
|
||||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
@ -170,7 +167,7 @@ $formats = Format::searchInformation();
|
||||||
if(Bridge::isWhitelisted($whitelist_selection, $bridgeName))
|
if(Bridge::isWhitelisted($whitelist_selection, $bridgeName))
|
||||||
{
|
{
|
||||||
echo HTMLUtils::displayBridgeCard($bridgeName, $formats);
|
echo HTMLUtils::displayBridgeCard($bridgeName, $formats);
|
||||||
$activeFoundBridgeCount++;
|
$activeFoundBridgeCount++;
|
||||||
}
|
}
|
||||||
elseif ($showInactive)
|
elseif ($showInactive)
|
||||||
{
|
{
|
||||||
|
|
|
@ -279,15 +279,16 @@ class Bridge{
|
||||||
*/
|
*/
|
||||||
static public function listBridges() {
|
static public function listBridges() {
|
||||||
|
|
||||||
$pathDirBridge = self::getDir();
|
$pathDirBridge = self::getDir();
|
||||||
$listBridge = array();
|
$listBridge = array();
|
||||||
$dirFiles = scandir($pathDirBridge);
|
$dirFiles = scandir($pathDirBridge);
|
||||||
|
|
||||||
if( $dirFiles !== false ){
|
if( $dirFiles !== false ){
|
||||||
foreach( $dirFiles as $fileName ){
|
|
||||||
if( preg_match('@([^.]+)\.php@U', $fileName, $out) ){
|
foreach( $dirFiles as $fileName ) {
|
||||||
$listBridge[] = $out[1];
|
if( preg_match('@([^.]+)\.php$@U', $fileName, $out) ){
|
||||||
}
|
$listBridge[] = $out[1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ class HTMLUtils {
|
||||||
public static function displayBridgeCard($bridgeName, $formats, $isActive = true)
|
public static function displayBridgeCard($bridgeName, $formats, $isActive = true)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
$bridgeElement = Bridge::create($bridgeName);
|
$bridgeElement = Bridge::create($bridgeName);
|
||||||
if($bridgeElement == false) {
|
if($bridgeElement == false) {
|
||||||
return "";
|
return "";
|
||||||
|
@ -41,7 +40,7 @@ CARD;
|
||||||
// If we don't have any parameter for the bridge, we print a generic form to load it.
|
// If we don't have any parameter for the bridge, we print a generic form to load it.
|
||||||
if(count($bridgeElement->parameters) == 0) {
|
if(count($bridgeElement->parameters) == 0) {
|
||||||
|
|
||||||
$card .= '<form method="POST" action="?">
|
$card .= '<form method="GET" action="?">
|
||||||
<input type="hidden" name="action" value="display" />
|
<input type="hidden" name="action" value="display" />
|
||||||
<input type="hidden" name="bridge" value="' . $bridgeName . '" />' . PHP_EOL;
|
<input type="hidden" name="bridge" value="' . $bridgeName . '" />' . PHP_EOL;
|
||||||
|
|
||||||
|
@ -59,11 +58,10 @@ CARD;
|
||||||
|
|
||||||
foreach($bridgeElement->parameters as $parameterName => $parameter)
|
foreach($bridgeElement->parameters as $parameterName => $parameter)
|
||||||
{
|
{
|
||||||
$card .= '<ol class="list-use">' . PHP_EOL;
|
|
||||||
if(!is_numeric($parameterName)) {
|
if(!is_numeric($parameterName)) {
|
||||||
$card .= '<h5>'.$parameterName.'</h5>' . PHP_EOL;
|
$card .= '<h5>'.$parameterName.'</h5>' . PHP_EOL;
|
||||||
}
|
}
|
||||||
$card .= '<form method="POST" action="?">
|
$card .= '<form method="GET" action="?">
|
||||||
<input type="hidden" name="action" value="display" />
|
<input type="hidden" name="action" value="display" />
|
||||||
<input type="hidden" name="bridge" value="' . $bridgeName . '" />' . PHP_EOL;
|
<input type="hidden" name="bridge" value="' . $bridgeName . '" />' . PHP_EOL;
|
||||||
|
|
||||||
|
@ -71,21 +69,32 @@ CARD;
|
||||||
|
|
||||||
foreach($parameter as $inputEntry) {
|
foreach($parameter as $inputEntry) {
|
||||||
|
|
||||||
|
$additionalInfoString = "";
|
||||||
|
if(isset($inputEntry['required'])) {
|
||||||
|
|
||||||
|
$additionalInfoString .= " required=\"required\"";
|
||||||
|
|
||||||
|
}
|
||||||
|
if(isset($inputEntry['pattern'])) {
|
||||||
|
|
||||||
|
$additionalInfoString .= " pattern=\"".$inputEntry['pattern']."\"";
|
||||||
|
|
||||||
|
}
|
||||||
if(!isset($inputEntry['exampleValue'])) $inputEntry['exampleValue'] = "";
|
if(!isset($inputEntry['exampleValue'])) $inputEntry['exampleValue'] = "";
|
||||||
|
|
||||||
$idArg = 'arg-' . $bridgeName . '-' . $parameterName . '-' . $inputEntry['identifier'];
|
$idArg = 'arg-' . urlencode($bridgeName) . '-' . urlencode($parameterName) . '-' . urlencode($inputEntry['identifier']);
|
||||||
|
|
||||||
$card .= '<label for="' .$idArg. '">' .$inputEntry['name']. ' : </label>' . PHP_EOL;
|
$card .= '<label for="' .$idArg. '">' .$inputEntry['name']. ' : </label>' . PHP_EOL;
|
||||||
|
|
||||||
if(!isset($inputEntry['type']) || $inputEntry['type'] == 'text') {
|
if(!isset($inputEntry['type']) || $inputEntry['type'] == 'text') {
|
||||||
$card .= '<input id="' . $idArg . '" type="text" value="" placeholder="' . $inputEntry['exampleValue'] . '" name="' . $inputEntry['identifier'] . '" /><br />' . PHP_EOL;
|
$card .= '<input '.$additionalInfoString.' id="' . $idArg . '" type="text" value="" placeholder="' . $inputEntry['exampleValue'] . '" name="' . $inputEntry['identifier'] . '" /><br />' . PHP_EOL;
|
||||||
} else if($inputEntry['type'] == 'number') {
|
} else if($inputEntry['type'] == 'number') {
|
||||||
$card .= '<input id="' . $idArg . '" type="number" value="" placeholder="' . $inputEntry['exampleValue'] . '" name="' . $inputEntry['identifier'] . '" /><br />' . PHP_EOL;
|
$card .= '<input '.$additionalInfoString.' id="' . $idArg . '" type="number" value="" placeholder="' . $inputEntry['exampleValue'] . '" name="' . $inputEntry['identifier'] . '" /><br />' . PHP_EOL;
|
||||||
} else if($inputEntry['type'] == 'list') {
|
} else if($inputEntry['type'] == 'list') {
|
||||||
$card .= '<select id="' . $idArg . '" name="' . $inputEntry['name'] . '" >';
|
$card .= '<select '.$additionalInfoString.' id="' . $idArg . '" name="' . $inputEntry['name'] . '" >';
|
||||||
foreach($inputEntry['values'] as $listValues) {
|
foreach($inputEntry['values'] as $listValues) {
|
||||||
|
|
||||||
$card .= "<option value='" . $listValues['value'] . "'>" . $listValues['name'] . "</option>";
|
$card .= "<option $additionalInfoString value='" . $listValues['value'] . "'>" . $listValues['name'] . "</option>";
|
||||||
|
|
||||||
}
|
}
|
||||||
$card .= '</select><br >';
|
$card .= '</select><br >';
|
||||||
|
@ -115,5 +124,49 @@ CARD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class HTMLSanitizer {
|
||||||
|
|
||||||
|
|
||||||
|
var $tagsToRemove;
|
||||||
|
var $keptAttributes;
|
||||||
|
var $onlyKeepText;
|
||||||
|
|
||||||
|
const DEFAULT_CLEAR_TAGS = ["script", "iframe"];
|
||||||
|
const KEPT_ATTRIBUTES = ["title", "href", "src"];
|
||||||
|
|
||||||
|
const ONLY_TEXT = null;
|
||||||
|
|
||||||
|
function __construct($tags_to_remove = HTMLSanitizer::DEFAULT_CLEAR_TAGS, $kept_attributes = HTMLSanitizer::KEPT_ATTRIBUTES, $only_keep_text = HTMLSanitizer::ONLY_TEXT) {
|
||||||
|
|
||||||
|
$this->tagsToRemove = $tags_to_remove;
|
||||||
|
$this->keptAttributes = $kept_attributes;
|
||||||
|
$this->onlyKeepText = $only_keep_text;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function sanitize($textToSanitize) {
|
||||||
|
|
||||||
|
$htmlContent = str_get_html($textToSanitize);
|
||||||
|
|
||||||
|
foreach($htmlContent->find('*[!j_ai_pas_trouve_comment_tout_demander]') as $element) {
|
||||||
|
if(in_array($element->tag, $this->onlyKeepText)) {
|
||||||
|
$element->outertext = $element->plaintext;
|
||||||
|
} else if(in_array($element->tag, $this->tagsToRemove)) {
|
||||||
|
$element->outertext = '';
|
||||||
|
} else {
|
||||||
|
foreach($element->getAllAttributes() as $attributeName => $attribute) {
|
||||||
|
|
||||||
|
if(!in_array($attributeName, $this->keptAttributes)) $element->removeAttribute($attributeName);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $htmlContent;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
Loading…
Reference in a new issue