100 lines
3.5 KiB
PHP
100 lines
3.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* class Settings
|
|
*
|
|
* Handles editing and fetching jilo configuration.
|
|
*/
|
|
class Settings {
|
|
|
|
/**
|
|
* Loads javascript file the Jitsi server.
|
|
*
|
|
* @param string $jitsiUrl The base URL of the Jitsi server.
|
|
* @param string $livejsFile The name of the remote js file to load.
|
|
* @param bool $raw Whether to return the full file (true) or only uncommented values (false).
|
|
*
|
|
* @return string The content of the interface_config.js file or an error message.
|
|
*/
|
|
public function getPlatformJsFile($jitsiUrl, $livejsFile, $raw = false) {
|
|
// constructing the URL
|
|
$jsFile = $jitsiUrl . '/' . $livejsFile;
|
|
|
|
// default content, if we can't get the file contents
|
|
$jsFileContent = "The file $livejsFile can't be loaded.";
|
|
|
|
// Check if URL is valid
|
|
if (!filter_var($jsFile, FILTER_VALIDATE_URL)) {
|
|
return "Invalid URL: $jsFile";
|
|
}
|
|
|
|
// ssl options
|
|
$contextOptions = [
|
|
'ssl' => [
|
|
'verify_peer' => true,
|
|
'verify_peer_name' => true,
|
|
],
|
|
];
|
|
$context = stream_context_create($contextOptions);
|
|
|
|
// Try to get headers first to check if file exists and wasn't redirected
|
|
$headers = @get_headers($jsFile, 1); // 1 to get headers as array
|
|
if ($headers === false) {
|
|
return "The file $livejsFile can't be loaded (connection error).";
|
|
}
|
|
|
|
// Check for redirects
|
|
$statusLine = $headers[0];
|
|
if (strpos($statusLine, '301') !== false || strpos($statusLine, '302') !== false) {
|
|
return "The file $livejsFile was redirected - this might indicate the file doesn't exist.";
|
|
}
|
|
|
|
// Check if we got 200 OK
|
|
if (strpos($statusLine, '200') === false) {
|
|
return "The file $livejsFile can't be loaded (HTTP error: $statusLine).";
|
|
}
|
|
|
|
// Check content type
|
|
$contentType = isset($headers['Content-Type']) ? $headers['Content-Type'] : '';
|
|
if (is_array($contentType)) {
|
|
$contentType = end($contentType); // get last content-type in case of redirects
|
|
}
|
|
if (stripos($contentType, 'javascript') === false && stripos($contentType, 'text/plain') === false) {
|
|
return "The file $livejsFile doesn't appear to be a JavaScript file (got $contentType).";
|
|
}
|
|
|
|
// get the file
|
|
$fileContent = @file_get_contents($jsFile, false, $context);
|
|
|
|
if ($fileContent !== false) {
|
|
// Quick validation of content
|
|
$firstLine = strtolower(trim(substr($fileContent, 0, 100)));
|
|
if (strpos($firstLine, '<!doctype html>') !== false ||
|
|
strpos($firstLine, '<html') !== false ||
|
|
strpos($firstLine, '<?xml') !== false) {
|
|
return "The file $livejsFile appears to be HTML/XML content instead of JavaScript.";
|
|
}
|
|
|
|
// when we need only uncommented values
|
|
if ($raw === false) {
|
|
// remove block comments
|
|
$jsFileContent = preg_replace('!/\*.*?\*/!s', '', $fileContent);
|
|
// remove single-line comments
|
|
$jsFileContent = preg_replace('/\/\/[^\n]*/', '', $jsFileContent);
|
|
// remove empty lines
|
|
$jsFileContent = preg_replace('/^\s*[\r\n]/m', '', $jsFileContent);
|
|
|
|
// when we need the full file as it is
|
|
} else {
|
|
$jsFileContent = $fileContent;
|
|
}
|
|
}
|
|
|
|
return $jsFileContent;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|