Thread (16 messages) flat view 16 messages, 2 authors, 2016-06-15
DORMANTno replies

[PATCH] gitweb: use action dispatcher for non-project actions, too.

From: Martin Waitz <hidden>
Date: 2016-06-15 22:42:37
Subsystem: the rest · Maintainer: Linus Torvalds

Allow to use the global action dispatcher for all actions by introducing
"/actions".  If no project directory is given then a / is prepended to the
action and the normal dispatcher is called.
Project list and OPML generation are now hooked into the list as "/summary"
and "/opml".

As "/" is not an allowed character in actions accepted through the CGI
parameters, it is still ensured that no normal action can be called without
giving a valid project directory.

Signed-off-by: Martin Waitz <redacted>
---
 gitweb/gitweb.perl |   17 ++++++++---------
 1 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 3b6333c..9a7faab 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -84,11 +84,6 @@ if (defined $action) {
 	if ($action =~ m/[^0-9a-zA-Z\.\-_]/) {
 		die_error(undef, "Invalid action parameter");
 	}
-	# action which does not check rest of parameters
-	if ($action eq "opml") {
-		git_opml();
-		exit;
-	}
 }
 
 our $order = $cgi->param('o');
@@ -113,9 +108,6 @@ if (defined $project) {
 		die_error(undef, "No such project");
 	}
 	$ENV{'GIT_DIR'} = "$projectroot/$project";
-} else {
-	git_project_list();
-	exit;
 }
 
 our $file_name = $cgi->param('f');
@@ -185,12 +177,19 @@ my %actions = (
 	"search" => \&git_search,
 	"shortlog" => \&git_shortlog,
 	"summary" => \&git_summary,
+	"/summary" => \&git_project_list,
+	"/opml" => \&git_opml,
 	"tag" => \&git_tag,
 	"tags" => \&git_tags,
 	"tree" => \&git_tree,
 );
 
-$action = 'summary' if (!defined($action));
+# default action
+$action ||= 'summary';
+
+#only allow non-/ actions if we have a project directory
+$action = "/$action" if !defined($project);
+
 if (!defined($actions{$action})) {
 	die_error(undef, "Unknown action");
 }
-- 
1.4.2.rc2.gf055
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help