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 "
Assembly Search Request assembly build\n";
+print "\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 "HTTP_REFERER: %s
\n", $ENV{'HTTP_REFERER'};
+ printf "# ERROR: cgi-bin/asr invalid something: %d %d %s %s
\n", $validIncoming, $extraneousArgs, $referDomain, $httpRefer;
+ printf "err exit at end of asr
\n";
+ print "\n";
+ exit 0;
+}
+
+printf "\n";
+printf "- name: '%s'
\n", $incoming{"name"};
+printf "- email: '%s'
\n", $incoming{"email"};
+printf "- asmId: '%s'
\n", $incoming{"asmId"};
+printf "- betterName: '%s'
\n", $incoming{"betterName"};
+printf "- comment: '%s'
\n", $incoming{"comment"};
+printf "
\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 "at end of asr
\n";
+print "