7b8b81e0a4869b24cdd8d7d31eaad33aacb87c0a
hiram
  Wed Aug 21 09:03:50 2024 -0700
will now perform the request email properly and the html page can take arguments refs #32596

diff --git src/hg/gar/asr.cgi.pl src/hg/gar/asr.cgi.pl
new file mode 100755
index 0000000..b2ff256
--- /dev/null
+++ src/hg/gar/asr.cgi.pl
@@ -0,0 +1,132 @@
+#!/usr/bin/perl
+##
+##  asr -- Assembly Request - receive assembly build requests
+##
+
+use URI::Escape;
+
+# use strict;
+# use warnings;
+
+my $httpRefer = "noReference";
+my $referDomain = "noDomain";
+my $domainMustBe = "ucsc.edu";
+my $httpReferMustBe = "assemblySearch.html";
+# obscure the email address from source tree robot scanning
+my $myAddr = 'hclawson at ucsc dot edu';
+$myAddr =~ s/ at /@/;
+$myAddr =~ s/ dot /./;
+my $legitimateFrom = $myAddr;
+my $sendTo = $myAddr;
+my $Cc = $myAddr;
+my $bounceAddr = $myAddr;
+my $genArkRequestGroup = 'genark-request-group at ucsc dot edu';
+$genArkRequestGroup =~ s/ at /@/;
+$genArkRequestGroup =~ s/ dot /./;
+# DBG 
+$genArkRequestGroup = $myAddr;
+
+if (defined($ENV{'HTTP_REFERER'})) {
+  my @a = split('/', $ENV{'HTTP_REFERER'});
+  $httpRefer = $a[-1];  # should be "assemblyRequest.html"
+  $httpRefer =~ s/\?.*//;	# remove arguments if present
+  my @b = split('\.', $a[-2]);
+  $referDomain = "$b[-2].$b[-1]";	# should be "ucsc.edu"
+}
+
+print "Content-type: text/html\n\n";
+
+print "<html><head><title>Assembly Search Request assembly build</title></head>\n";
+print "<body>\n";
+
+# QUERY_STRING    name=some%20name&email=some@email.com&asmId=GCF_000951035.1_Cang.pa_1.0
+
+my %incoming = (
+  "name" => "noName",
+  "email" => "noEmail",
+  "asmId" => "noAsmId",
+  "betterName" => "noBetterName",
+  "comment" => "noComment",
+);
+
+my $validIncoming = 0;
+my $extraneousArgs = 0;
+
+if (defined($ENV{"QUERY_STRING"})) {
+  my $qString = $ENV{"QUERY_STRING"};
+  my @idVal = split("&", $qString);
+  foreach $id (@idVal) {
+    my ($tag, $value) = split("=", $id, 2);
+    # only accept known inputs, the five defined above for %incoming defaults
+    if (defined($incoming{$tag}) && defined($value)) {
+      $incoming{$tag} = uri_unescape( $value );
+      ++$validIncoming;
+    }
+    ++$extraneousArgs if (!defined($incoming{$tag}));
+  }
+}
+
+if ( ($validIncoming != 5) || ($extraneousArgs > 0) || ($referDomain ne $domainMustBe) || ($httpRefer ne $httpReferMustBe) ) {
+  # not a legitimate request from our own business, do nothing.
+  printf STDERR "# ERROR: cgi-bin/asr invalid something: %d %d %s %s\n", $validIncoming, $extraneousArgs, $referDomain, $httpRefer;
+  printf "<p>HTTP_REFERER: %s</p>\n", $ENV{'HTTP_REFERER'};
+  printf "<p># ERROR: cgi-bin/asr invalid something: %d %d %s %s</p>\n", $validIncoming, $extraneousArgs, $referDomain, $httpRefer;
+  printf "<h3>err exit at end of asr</h3>\n";
+  print "</body></html>\n";
+  exit 0;
+}
+
+printf "<ul>\n";
+printf "<li> name: '%s'</li>\n", $incoming{"name"};
+printf "<li>email: '%s'</li>\n", $incoming{"email"};
+printf "<li>asmId: '%s'</li>\n", $incoming{"asmId"};
+printf "<li>betterName: '%s'</li>\n", $incoming{"betterName"};
+printf "<li>comment: '%s'</li>\n", $incoming{"comment"};
+printf "</ul>\n";
+
+my $DS=`date "+%F %T"`;
+chomp $DS;
+
+
+open (FH, "|/usr/sbin/sendmail -f \"${bounceAddr}\" -t -oi");
+printf FH "To: %s
+Reply-to: %s
+Return-path: %s
+Cc: %s
+Subject: asr request: %s
+
+name: '%s'
+email: '%s'
+asmId: '%s'
+betterName: '%s'
+comment: '%s'
+
+date: '%s'
+", $sendTo, $incoming{"email"}, $legitimateFrom, $Cc, $incoming{"asmId"}, $incoming{"name"}, $incoming{"email"}, $incoming{"asmId"}, $incoming{"betterName"}, $incoming{"comment"}, ${DS};
+
+close (FH);
+
+my $cleanEmail = $incoming{"email"};
+$cleanEmail =~ s/@/ at /;
+$cleanEmail =~ s/\./ dot /g;
+
+# and then send the email to the google group with the cleanEmail in text
+open (FH, "|/usr/sbin/sendmail -f \"${bounceAddr}\" -t -oi");
+printf FH "To: %s
+Reply-to: %s
+Return-path: %s
+Subject: asr request: %s
+
+name: '%s'
+email: '%s'
+asmId: '%s'
+betterName: '%s'
+comment: '%s'
+
+date: '%s'
+", $genArkRequestGroup, $legitimateFrom, $legitimateFrom, $incoming{"asmId"}, $incoming{"name"}, $cleanEmail, $incoming{"asmId"}, $incoming{"betterName"}, $incoming{"comment"}, ${DS};
+
+close (FH);
+
+printf "<h3>at end of asr</h3>\n";
+print "</body></html>\n";