feat(archivarix): add wordpress fallback version urls

This commit is contained in:
Hugo Poissonnet 2022-05-01 16:29:44 +02:00
parent a1a702b386
commit 5ff62ba34a
1 changed files with 31 additions and 6 deletions

View File

@ -51,27 +51,27 @@ const ARCHIVARIX_PROTOCOL = 'any';
/** /**
* Return 1px.png if image does not exist. * Return 1px.png if image does not exist.
*/ */
const ARCHIVARIX_FIX_MISSING_IMAGES = 1; const ARCHIVARIX_FIX_MISSING_IMAGES = 0;
/** /**
* Return empty.css if css does not exist. * Return empty.css if css does not exist.
*/ */
const ARCHIVARIX_FIX_MISSING_CSS = 1; const ARCHIVARIX_FIX_MISSING_CSS = 0;
/** /**
* Return empty.js if javascript does not exist. * Return empty.js if javascript does not exist.
*/ */
const ARCHIVARIX_FIX_MISSING_JS = 1; const ARCHIVARIX_FIX_MISSING_JS = 0;
/** /**
* Return empty.ico if favicon.ico does not exist. * Return empty.ico if favicon.ico does not exist.
*/ */
const ARCHIVARIX_FIX_MISSING_ICO = 1; const ARCHIVARIX_FIX_MISSING_ICO = 0;
/** /**
* Redirect missing html pages. * Redirect missing html pages.
*/ */
const ARCHIVARIX_REDIRECT_MISSING_HTML = '/'; const ARCHIVARIX_REDIRECT_MISSING_HTML = 0;
/** /**
* Replace a custom key-phrase with a text file or php script. * Replace a custom key-phrase with a text file or php script.
@ -145,6 +145,12 @@ const ARCHIVARIX_SITEMAP_PATH = '';
*/ */
const ARCHIVARIX_CATCH_MISSING = 0; const ARCHIVARIX_CATCH_MISSING = 0;
/**
* This feature is experimental. Catch urls with a missing wordpress version
* and replace them with the most recent version available
*/
const WORDPRESS_FIX_MISSING_VERSION = 1;
/** /**
* Do not edit under this comment * Do not edit under this comment
*/ */
@ -165,6 +171,7 @@ $LOADER = [
'ARCHIVARIX_CUSTOM_DOMAIN' => ARCHIVARIX_CUSTOM_DOMAIN, 'ARCHIVARIX_CUSTOM_DOMAIN' => ARCHIVARIX_CUSTOM_DOMAIN,
'ARCHIVARIX_SITEMAP_PATH' => ARCHIVARIX_SITEMAP_PATH, 'ARCHIVARIX_SITEMAP_PATH' => ARCHIVARIX_SITEMAP_PATH,
'ARCHIVARIX_CATCH_MISSING' => ARCHIVARIX_CATCH_MISSING, 'ARCHIVARIX_CATCH_MISSING' => ARCHIVARIX_CATCH_MISSING,
'WORDPRESS_FIX_MISSING_VERSION' => WORDPRESS_FIX_MISSING_VERSION,
]; ];
$ARCHIVARIX_SETTINGS = array(); $ARCHIVARIX_SETTINGS = array();
@ -285,6 +292,18 @@ function getFileMetadata( $dsn, $url )
return $metadata; return $metadata;
} }
function getOtherVersionUrls( $url )
{
global $dsn;
$path = parse_url($url, PHP_URL_PATH);
$pdo = new PDO( $dsn );
$sth = $pdo->prepare( 'SELECT rowid, * FROM structure WHERE url LIKE :urlRegexVersion AND enabled = 1 ORDER BY filetime DESC LIMIT 1' );
// TODO better LIKE statement based on domain
$sth->execute( ['urlRegexVersion' => 'http://%'.$path.'%'] );
$metadata = $sth->fetch( PDO::FETCH_ASSOC );
return $metadata;
}
/** /**
* @return string * @return string
*/ */
@ -431,6 +450,12 @@ function handle404( $sourcePath, $url )
http_response_code( 301 ); http_response_code( 301 );
exit( 0 ); exit( 0 );
break; break;
case ( $LOADER['WORDPRESS_FIX_MISSING_VERSION'] ) :
$otherVersionFound = getOtherVersionUrls($url);
if ( $otherVersionFound ) {
render( $otherVersionFound, $sourcePath, $url );
break;
}
default: default:
http_response_code( 404 ); http_response_code( 404 );
} }
@ -597,4 +622,4 @@ try {
} catch ( \Exception $e ) { } catch ( \Exception $e ) {
http_response_code( 503 ); http_response_code( 503 );
error_log( $e ); error_log( $e );
} }