From a57e6737fbbcfd43b2fb2ae76adc89e6b67d9a70 Mon Sep 17 00:00:00 2001
From: Leigh B Stoller <stoller@flux.utah.edu>
Date: Wed, 27 Aug 2014 13:28:23 -0600
Subject: [PATCH] More tweaks to email from address.

---
 db/Group.pm.in           |  5 +++--
 db/Project.pm.in         | 41 ++++++++++++++++++++++++++++++++++++++--
 tbsetup/libtestbed.pm.in | 22 ++++++++-------------
 tbsetup/mkproj.in        | 13 +++++++------
 www/approveproject.php3  |  1 -
 5 files changed, 57 insertions(+), 25 deletions(-)

diff --git a/db/Group.pm.in b/db/Group.pm.in
index f014413476..227a721b78 100644
--- a/db/Group.pm.in
+++ b/db/Group.pm.in
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -wT
 #
-# Copyright (c) 2005-2013 University of Utah and the Flux Group.
+# Copyright (c) 2005-2014 University of Utah and the Flux Group.
 # 
 # {{{EMULAB-LICENSE
 # 
@@ -972,6 +972,7 @@ sub SendApprovalEmail($$$)
     my $gid         = $self->gid();
     my $allleaders  = $self->LeaderMailList();
     my $membership  = $self->LookupUser($target_user);
+    my $project     = $self->GetProject();
 
     return -1
 	if (!defined($membership));
@@ -987,7 +988,7 @@ sub SendApprovalEmail($$$)
              "\n\n".
              "Thanks,\n".
              "Testbed Operations\n",
-             undef,
+             $project->ApprovalEmailAddress(),
 	     "CC: $allleaders\n".
 	     "Bcc: $TBAUDIT");
 
diff --git a/db/Project.pm.in b/db/Project.pm.in
index 49e994eace..49e9d65cc8 100644
--- a/db/Project.pm.in
+++ b/db/Project.pm.in
@@ -144,11 +144,48 @@ sub IsNonLocal($)	{ return (defined($_[0]->nonlocal_id()) ? 1 : 0); };
 sub nonlocal_id($)	{ return field($_[0], "nonlocal_id"); }
 sub nonlocal_type($)	{ return field($_[0], "nonlocal_type"); }
 sub manager_urn($)	{ return field($_[0], "manager_urn"); }
+sub genesis($)		{ return field($_[0], "genesis"); }
+sub isAPT($)	        { return $_[0]->genesis() eq "aptlab" ? 1 : 0; }
+sub isCloud($)	        { return $_[0]->genesis() eq "cloudlab" ? 1 : 0; }
 
 # These come from the group not the project.
 sub unix_gid($)         { return $_[0]->{'GROUP'}->unix_gid(); }
 sub unix_name($)        { return $_[0]->{'GROUP'}->unix_name(); }
 
+# In general, not be used directly, use SendProjAdminMail
+sub ApprovalEmailAddress($)
+{
+    my ($self) = @_;
+
+    return ($self->isAPT() ? "aptlab-approval\@aptlab.net" :
+	    $self->isCloud() ? "cloudlab-approval\@cloudlab.us" :
+	    "@TBAPPROVALEMAIL@");
+}
+sub EmailTag($)
+{
+    my ($self) = @_;
+
+    return ($self->isAPT() ? "aptlab.net" :
+	    $self->isCloud() ? "cloudlab.us" : "@THISHOMEBASE@");
+}
+sub wwwBase($)
+{
+    my ($self) = @_;
+
+    return ($self->isAPT() ? "https://www.aptlab.net" :
+	    $self->isCloud() ? "https://www.cloudlab.us" : $TBBASE);
+}
+sub SignupURL($)
+{
+    my ($self)  = @_;
+    my $wwwbase = $self->wwwBase();
+    my $pid     = $self->pid();
+
+    return ($self->isAPT() || $self->isCloud() ?
+	    "${wwwbase}/signup.php?pid=$pid" :
+	    "${wwwbase}/joinproject.php3?target_pid=$pid");
+}
+
 #
 # Lookup given pid For backwards compat.
 #
@@ -478,7 +515,7 @@ sub SendNewProjectEmail($;$)
 
     if ($returning || $firstproject) {
 	SendProjAdminMail
-	    ($pid, "$usr_name '$usr_uid' <$usr_email>", "ADMIN",
+	    ($self, "$usr_name '$usr_uid' <$usr_email>", "ADMIN",
 	     "New Project '$pid' ($usr_uid)",
 	     "'$usr_name' wants to start project '$pid'.\n".
 	     "\n".
@@ -515,7 +552,7 @@ sub SendNewProjectEmail($;$)
     }
     else {
 	SendProjAdminMail
-	    ($pid, "$usr_name '$usr_uid' <$usr_email>", "ADMIN",
+	    ($self, "$usr_name '$usr_uid' <$usr_email>", "ADMIN",
 	     "New Project '$pid' ($usr_uid)",
 	     "'$usr_name' wants to start project '$pid'.\n".
 	     "\n".
diff --git a/tbsetup/libtestbed.pm.in b/tbsetup/libtestbed.pm.in
index d20faccd25..7a73c4ca2b 100644
--- a/tbsetup/libtestbed.pm.in
+++ b/tbsetup/libtestbed.pm.in
@@ -39,9 +39,6 @@ use Exporter;
 	 TBValidUserDir TBValidUserDirList TBMakeTempFile NewUUID System
 	 SendProjAdminMail ReOpenLog
 	 CheckDaemonRunning MarkDaemonRunning MarkDaemonStopped);
-@EXPORT_OK =
-    qw ( TBMAIL_PROJADMIN);
-
 
 # After package decl.
 use English;
@@ -51,11 +48,8 @@ use Fcntl;
 use Fcntl ':flock';
 use File::Basename;
 use Time::HiRes qw(gettimeofday);
-use vars qw(@EXPORT_OK);
 
 my $TB           = "@prefix@";
-#my $MAILTAG	 = "@OURDOMAIN@";
-my $MAILTAG	 = "@THISHOMEBASE@";
 my $BOSSNODE	 = "@BOSSNODE@";
 my $TIMESTAMPS	 = "@TIMESTAMPS@";
 my $TBOPSEMAIL	 = "@TBOPSEMAIL@";
@@ -65,6 +59,10 @@ my $UUIDGEN	 = "@UUIDGEN@";
 my $NOREPLY      = "no-reply\@@OURDOMAIN@";
 my $SCRIPTNAME	 = "Unknown";
 
+# So we can localize this variable.
+use vars qw($MAILTAG);
+$MAILTAG	 = "@THISHOMEBASE@";
+
 # Exported.
 $SYSTEM_DEBUG = 0;
 @EXPORT_OK    = qw($SYSTEM_DEBUG);
@@ -104,12 +102,6 @@ sub TB_AUDITEMAIL() { $TBAUDITEMAIL; }
 sub TBMAIL_OPS()    { "Testbed Ops <$TBOPSEMAIL>"; }
 sub TBMAIL_WWW()    { "Testbed WWW <$TBWWWEMAIL>"; }
 sub TBMAIL_AUDIT()  { "Testbed Audit <$TBAUDITEMAIL>" }
-
-# TBMAIL_PROJADMIN should, in general, not be used directly, use
-# SendProjAdminMail
-sub TBMAIL_PROJADMIN($) {
-    0 && @MAILMANSUPPORT@ ? "$_[0]-admin\@@OURDOMAIN@" : "@TBAPPROVALEMAIL@";
-}
 sub TBMAIL_APPROVAL() {
     "@TBAPPROVALEMAIL@";
 }
@@ -237,6 +229,7 @@ sub OPENMAIL($$;$$)
 {
     my($To, $Subject, $From, $Headers) = @_;
     local *MAIL;
+    my $tag = uc($MAILTAG);
 
     if (! open(MAIL, "|/usr/sbin/sendmail -i -t")) {
 	print STDERR "OPENMAIL: Could not start sendmail: $!\n";
@@ -271,8 +264,9 @@ sub OPENMAIL($$;$$)
 
 sub SendProjAdminMail($$$$$;$)
 {
-    my ($proj, $from, $to, $subject, $message, $headers) = @_;
-    my $projadminmail = TBMAIL_PROJADMIN($proj);
+    my ($project, $from, $to, $subject, $message, $headers) = @_;
+    my $projadminmail = $project->ApprovalEmailAddress();
+    local $MAILTAG = $project->EmailTag();
     $headers .= "\n" if defined $headers;
     if ($from eq 'ADMIN') {
 	$from = $projadminmail;
diff --git a/tbsetup/mkproj.in b/tbsetup/mkproj.in
index 642b19a3fc..a04bbfe1fd 100755
--- a/tbsetup/mkproj.in
+++ b/tbsetup/mkproj.in
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -wT
 #
-# Copyright (c) 2000-2011 University of Utah and the Flux Group.
+# Copyright (c) 2000-2014 University of Utah and the Flux Group.
 # 
 # {{{EMULAB-LICENSE
 # 
@@ -558,21 +558,22 @@ if (! ($ELABINELAB || $isnonlocal)) {
 if (!$silent) {
     my $leader_name  = $leader->name();
     my $leader_email = $leader->email();
+    my $wwwbase      = $target_project->wwwBase();
+    my $signupurl    = $target_project->SignupURL();
     
     SendProjAdminMail
-	($pid, "ADMIN", "$leader_name <$leader_email>",
+	($target_project, "ADMIN", "$leader_name <$leader_email>",
 	 "Project '$pid' Approval",
 	 "\n".
 	 "This message is to notify you that your project '$pid'\n".
 	 "has been approved.  We recommend that you save this link so that\n".
 	 "you can send it to people you wish to have join your project.\n".
-	 "Otherwise, tell them to go to ${TBBASE} and join it.\n".
+	 "Otherwise, tell them to go to ${wwwbase} and join it.\n".
 	 "\n".
-	 "    ${TBBASE}/joinproject.php3?target_pid=$pid\n".
+	 "    $signupurl\n".
 	 (defined($message) ? "\n${message}\n" : "") .
 	 "\n".
-	 "Thanks,\n".
-	 "Testbed Operations\n",
+	 "Thanks!\n",
 	 "Bcc: $TBAPPROVAL");
 
     #
diff --git a/www/approveproject.php3 b/www/approveproject.php3
index 1a7d528982..1fd6b1a56f 100644
--- a/www/approveproject.php3
+++ b/www/approveproject.php3
@@ -175,7 +175,6 @@ elseif (strcmp($approval, "moreinfo") == 0) {
     SendProjAdminMail
         ($this_project, "ADMIN", "$headname '$headuid' <$headuid_email>",
          "Project '$pid' Approval Postponed",
-         "\n".
          "This message is to notify you that your project application\n".
          "for $pid has been postponed until we have more information\n".
          "or you take certain actions.  You can just reply to this message\n".
-- 
GitLab