<?php

# Validation of requested type
$VALIDTYPES = array('artifact', 'metadata');
$requestedType = $_GET['type'];
if (!in_array($requestedType, $VALIDTYPES)) {
	header("HTTP/1.0 400 Bad Request");
	exit;
}
$requestedTypeCased = ucfirst($requestedType);

# Validation of requested path
$requestedPath = $_GET['path'];
if (preg_match('/^[a-zA-Z0-9-_\/]+$/', $requestedPath) !== 1) {
	header("HTTP/1.0 400 Bad Request");
	exit;
}
$releaseFolderPath = __DIR__ . '/' . $requestedPath . '/releases';
if (!is_dir($releaseFolderPath)) {
	header("HTTP/1.0 404 Not Found");
	exit;
}

$directories = glob($releaseFolderPath . '/*' , GLOB_ONLYDIR);
$dirNumber = count($directories);
$latestDirTime = 0;
foreach ($directories as $dir) {
	$dirTime = filectime($dir);
	$latestDirTime = max($latestDirTime, $dirTime);
}
$relativeDirectories = array();
foreach ($directories as $dir) {
	$relativeDirectories[] = substr($dir, strlen($releaseFolderPath) + 1);
}
$projectName = basename($requestedPath);
header('Content-type: application/xml');
?>
<?xml version='1.0' encoding='UTF-8'?>
<?composite<?php echo $requestedTypeCased; ?>Repository version='1.0.0'?>
<repository name='&quot;<?php echo $projectName; ?> updatesite&quot;' type='org.eclipse.equinox.internal.p2.<?php echo $requestedType ?>.repository.Composite<?php echo $requestedTypeCased; ?>Repository' version='1.0.0'>
	<properties size='1'>
		<property name='p2.timestamp' value='<?php echo $latestDirTime ?>'/>
	</properties>
	<children size='<?php echo $dirNumber; ?>'>
<?php foreach($relativeDirectories as $dir) { ?>
		<child location='<?php echo $dir ?>'/>
<?php } ?>
	</children>
</repository>
