From c2985c53f76d27fb645db924843398aa82d32a90 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Sat, 1 Jun 2024 22:31:12 +0200 Subject: [PATCH] functions.php,distroquery.php: initial implementation of distroquery API frontend --- distroquery.php | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ functions.php | 29 ++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 distroquery.php diff --git a/distroquery.php b/distroquery.php new file mode 100644 index 0000000..7d81b89 --- /dev/null +++ b/distroquery.php @@ -0,0 +1,100 @@ + + + +
+ +repositories]"; + + + $repo=get_query_var('repo'); + $package=get_query_var('package'); + $arch=get_query_var('arch'); + + if ($repo == "") { +// +// Repositories +// + echo "

Available repositories:

"; + $request = wp_remote_get('https://push.openmamba.org/openmamba/distroquery/api/v1/repositories'); + $j = json_decode($request["body"],true); + foreach ($j as $repository) { + $repository_url = $url_prefix . $repository["tag"]; + echo "". $repository["tag"] . ": " . $repository["description"] . "
"; + } + + } else if ($package == "") { +// +// Repository +// + echo "

List of packages:

"; + $request = wp_remote_get('https://push.openmamba.org/openmamba/distroquery/api/v1/repository/' . $repo); + $j = json_decode($request["body"],true); + + } else if ($package != "") { +// +// Package +// + $request = wp_remote_get('https://push.openmamba.org/openmamba/distroquery/api/v1/package/'. $repo . "/" . $package . "/" . $arch); + $j = json_decode($request["body"],true); +?> + +

" width="24" height="24"> +:

+ + + + + + + + + + + + + + +
Name:
Release: +
Architecture:
Group:
Description:
Size:
URL:" target=_blank>
Download:" target=_blank>
Sources:" target=_blank>
Brothers:". $brother . " "; + } ?> +
Provides: +
+ + + +
+ + diff --git a/functions.php b/functions.php index da35586..096b7de 100644 --- a/functions.php +++ b/functions.php @@ -482,3 +482,32 @@ function rew_unset_no_js($classes) { } return $classes ; } + +// Distroquery API management +add_filter( 'query_vars', function( $query_vars ) { + $query_vars[] = 'distroquery'; + $query_vars[] = 'repo'; + $query_vars[] = 'package'; + $query_vars[] = 'arch'; + return $query_vars; +} ); + +function distroquery_api_rewrite_rules ( ) { + add_rewrite_rule ( '^distroquery-api/([^/]*)/([^/]*)/([^/]*)/?', + 'index.php?distroquery=1&repo=$matches[1]&package=$matches[2]&arch=$matches[3]','top' ); + add_rewrite_rule ( '^distroquery-api/([^/]*)/([^/]*)/?', + 'index.php?distroquery=1&repo=$matches[1]&package=$matches[2]','top' ); + add_rewrite_rule ( '^distroquery-api/([^/]*)/?', + 'index.php?distroquery=1&repo=$matches[1]','top' ); + add_rewrite_rule ( '^distroquery-api/?', + 'index.php?distroquery=1','top' ); +} +add_action ( 'init', 'distroquery_api_rewrite_rules', 10, 0 ) ; + +add_filter( 'template_include', function( $template ) { + if ( get_query_var( 'distroquery' ) == false || get_query_var( 'distroquery' ) == '' ) { + return $template; + } + + return get_theme_file_path() . '/distroquery.php'; +} );