All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

Commit 7a34b5c2 authored by Leigh B Stoller's avatar Leigh B Stoller

This commit switches the Emulab Classic frontpage to the Portal.

See issue #400. Closes issue #448.
parent 4f28fc77
#
# Copyright (c) 2000-2016 University of Utah and the Flux Group.
# Copyright (c) 2000-2018 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
......@@ -147,7 +147,8 @@ JSFILES += $(wildcard $(SRCDIR)/js/*.js)
BLOBFILES += $(wildcard blob/*.php3)
APTUIFILES = $(wildcard $(SRCDIR)/aptui/*.php)
APTUIFILES = $(wildcard $(SRCDIR)/aptui/*.html)
APTUIFILES += $(wildcard $(SRCDIR)/aptui/*.php)
APTUIFILES += $(wildcard $(SRCDIR)/aptui/*.ajax)
APTUIFILES += $(wildcard $(SRCDIR)/aptui/*.png)
APTUIFILES += $(wildcard $(SRCDIR)/aptui/*.ico)
......
<div class='navbar portal-navbar' role='navigation' style="margin-bottom: 0px">
<div class='navbar-header'>
<button type='button' class='navbar-toggle collapsed'
data-toggle='collapse' data-target='.navbar-collapse'
aria-expanded='false'>
<span class='sr-only'>Toggle navigation</span>
<span class='icon-bar'></span>
<span class='icon-bar'></span>
<span class='icon-bar'></span>
</button>
<a class='navbar-brand' href='landing.php'>
<img src='images/emulab-logo.svg'/></a>
<span class="navbar-brand">{$whoarewe}</span>
</div>
<a class="btn btn-quickvm-home btn-success navbar-btn pull-right"
style="margin-right: 20px; margin-left: 10px; padding: 5px 5px;"
href="landing.php?login=1">Log In</a>
<div class="navbar-collapse collapse navbar-left">
<ul class="nav navbar-nav">
</ul>
</div>
<div class="navbar-collapse collapse navbar-right">
<ul class="nav navbar-nav">
<li><a href="http://docs.emulab.net/"
class="btn btn-quickvm-home navbar-btn">Docs</a></li>
</ul>
</div>
</div>
<div class="jumbotron" style="padding-top: 15px; padding-bottom: 10px">
<div class="container">
<div class="row">
<div class="col-md-7 col-sm-12">
<img class="header-logo center-block" style="width: 60%; margin-bottom: 20px;" src="images/emulab-name-only.svg" alt="Emulab">
<p id="jumbo-text">
<a style="margin: 0px 0px 10px 10px" class="btn btn-success pull-right" href="signup.php">Request an Account</a>
A time- and space-shared platform
for research, education, and development in distributed systems and
networks. Emulab's primary goals are ease of use, control, and
realism, achieved through consistent use of virtualization
and abstraction.
</p>
</div>
<div class="col-md-5 col-sm-12">
<img class="center-block" style="width: 60%" src="images/emulab-logo-only.svg" alt="Emulab">
</div>
</div> <!-- /row -->
</div> <!-- /container -->
</div>
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-12">
<em>Emulab</em> is a network testbed, giving researchers a wide range of
environments in which to develop, debug, and evaluate their systems.
The name Emulab refers both to a <strong>facility</strong> and to a
<strong>software system</strong>.
The <a href="http://www.emulab.net">primary Emulab installation</a> is run
by the
<a href="http://www.flux.utah.edu">Flux Group</a>, part of the
<a href="http://www.cs.utah.edu">School of Computing</a> at the
<a href="http://www.utah.edu">University of Utah</a>.
There are also installations of the Emulab software at more than
<a href="http://users.emulab.net/trac/emulab/wiki/OtherEmulabs">two
dozen sites</a> around the world, ranging from testbeds with a handful
of nodes up to testbeds with hundreds of nodes.
Emulab is <a href="http://www.emulab.net/expubs.php">widely used</a>
by computer science researchers in the fields of networking and
distributed systems.
It is also designed to support
<a href="http://users.emulab.net/trac/emulab/wiki/Education">
education</a>, and has been used to
<a href="http://users.emulab.net/trac/emulab/wiki/Classes">teach
classes</a> in those fields.
<div style="margin-top: 10px;">
<ul>
<li><a href="https://gitlab.flux.utah.edu/emulab/emulab-devel/wikis/home">Emulab Wiki</a></li>
<li><a href="https://gitlab.flux.utah.edu/emulab/emulab-devel/wikis/How%20to%20Get%20Started">How to Get Started</a></li>
<li><a href="https://gitlab.flux.utah.edu/emulab/emulab-devel/wikis/Acceptable%20Use%20Policy">Acceptable Use Policy</a></li>
<li><a href="https://gitlab.flux.utah.edu/emulab/emulab-devel/wikis/Administrative%20Policies">Administrative Policies</a></li>
<li><a href="https://gitlab.flux.utah.edu/emulab/emulab-devel/wikis/Security%20Policies">Security Policies</a></li>
<li><a href="https://gitlab.flux.utah.edu/emulab/emulab-devel/wikis/Utah%20Cluster">Hardware Overview of the Utah cluster</a></li>
<li><a href="https://gitlab.flux.utah.edu/emulab/emulab-devel/wikis/faq/Using%20the%20Testbed/Emulab%20Classic">What happened to the old Emulab?</a></li>
</ul>
</div>
</div>
<div class="col-md-6 col-sm-12" id="frontpage-facility">
<div class="panel panel-primary" style="margin-bottom: 10px">
<div class="panel-body">
<div class="col-sm-7 col-xs-12 cluster-status">
<table class="table table-hover table-condensed"
style="margin-bottom: 0px">
<thead>
<tr><th colspan="3">Cluster Status</th></tr>
</thead>
<tbody>
<tr>
<td colspan="3">Active Experiments:
<span class="pull-right badge badge-info"
style="min-width: 4em"
id="facility-experiments">{$active}</span>
</td>
</tr>
{$nodecounts}
</tbody>
</table>
</div>
<div class="col-sm-5 col-xs-12">
<table class="table table-hover table-condensed"
style="margin-bottom: 0px">
<thead>
<tr>
<th colspan="2">Activity</th>
</tr>
</thead>
<tbody>
<tr>
<td>Projects</td>
<td class="text-right"
id="facility-total-projects">{$projects}</td>
</tr>
<tr>
<td>Users</td>
<td class="text-right"
id="facility-total-users">{$users}</td>
</tr>
<tr>
<td>Profiles</td>
<td class="text-right"
id="facility-profiles">{$profiles}</td>
</tr>
<tr>
<td>Experiments</td>
<td class="text-right"
id="facility-total-experiments">{$experiments}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<center>
<a href="../classic.php">Looking for the old Emulab frontpage?</a>
</center>
</div>
</div>
</div>
......@@ -35,20 +35,46 @@ RedirectSecure();
$check_status = 0;
$this_user = CheckLogin($check_status);
SPITHEADER(1, 1);
SPITHEADER(1, true, true);
SPITREQUIRE("");
echo "<script type='text/javascript'>\n";
echo "</script>\n";
$matter = file_get_contents("frontpage.html");
$stats = json_decode(file_get_contents("$APTBASE/stats-ajax.php"), true);
$whoarewe = ($TBMAINSITE ? "" : $THISHOMEBASE);
$counts = "<tr><th>Type</th><th>Free</th><th>% Inuse</th></tr>";
# Place to hang the toplevel template.
echo "<div id='main-body'></div>\n";
foreach ($stats["typeinfo"] as $type => $totals) {
$total = $totals["total"];
$free = $totals["free"];
$pctfull = round(100.0 * ($total - $free) / $total);
if ($TBMAINSITE) {
$type = "<a href='https://gitlab.flux.utah.edu/emulab/emulab-devel/wikis/Utah%20Cluster#${type}s' target=_blank>$type</a>";
}
$counts .=
"<tr>
<td>$type</td>
<td><small>
<span class='badge badge-light'>$free</span></small></td>
<td style='width: 8em'>
<div class='progress' style='margin-bottom: 0px'>
<div class='progress-bar' style='width: ${pctfull}%;'
role='progressbar'>${pctfull}% inuse</div>
</div>
</td>
</tr>\n";
}
REQUIRE_UNDERSCORE();
REQUIRE_SUP();
REQUIRE_MOMENT();
SPITREQUIRE("js/frontpage.js");
$vars = array(
'{$active}' => $stats["active_experiments"],
'{$projects}' => $stats["projects"],
'{$users}' => $stats["distinct_users"],
'{$profiles}' => $stats["profiles"],
'{$experiments}' => $stats["total_experiments"],
'{$nodecounts}' => $counts,
'{$whoarewe}' => $whoarewe,
);
echo strtr($matter, $vars);
AddTemplateList(array("frontpage", "frontpage-facility", "frontpage-status",
"oops-modal", "waitwait-modal"));
SPITFOOTER(1);
?>
......@@ -34,17 +34,21 @@ include_once("profile_defs.php");
#
RedirectSecure();
$this_user = CheckLogin($check_status);
if (!$ISAPT) {
if (! ($CHECKLOGIN_STATUS & CHECKLOGIN_LOGGEDIN)) {
header("Location: login.php");
return;
}
}
#
# Verify page arguments.
#
$optargs = OptionalPageArguments("from", PAGEARG_STRING);
$optargs = OptionalPageArguments("login", PAGEARG_BOOLEAN);
if (! ($CHECKLOGIN_STATUS & CHECKLOGIN_LOGGEDIN)) {
if ($ISEMULAB && !$login) {
header("Location: frontpage.php");
}
else {
header("Location: login.php");
}
return;
}
#
# Redirect logged in user.
......
......@@ -78,14 +78,14 @@ $PAGEERROR_HANDLER = function($msg = null, $status_code = 0) {
die("");
};
$PAGEHEADER_FUNCTION = function($thinheader = 0, $ignore1 = NULL,
$ignore2 = NULL, $ignore3 = NULL)
$PAGEHEADER_FUNCTION = function($thinheader = 0, $nomenu = false,
$inline = false, $ignore3 = NULL)
{
global $PORTAL_MANUAL, $PORTAL_HELPFORUM;
global $TBMAINSITE, $APTTITLE, $FAVICON, $APTLOGO, $APTSTYLE, $ISAPT;
global $GOOGLEUA, $ISCLOUD, $TBBASE;
global $ISPNET, $ISPOWDER, $ISEMULAB;
global $login_user, $login_status, $SUPPORT;
global $login_user, $login_status, $SUPPORT, $FIRSTUSER;
global $disable_accounts, $page_title, $drewheader, $embedded;
$cleanmode = (isset($_COOKIE['cleanmode']) &&
$_COOKIE['cleanmode'] == 1 ? 1 : 0);
......@@ -126,17 +126,30 @@ $PAGEHEADER_FUNCTION = function($thinheader = 0, $ignore1 = NULL,
type='image/vnd.microsoft.icon'>
<link rel='stylesheet' href='css/bootstrap.css'>
<link rel='stylesheet' href='css/quickvm.css'>
<link rel='stylesheet' href='css/$APTSTYLE'>";
<link rel='stylesheet' href='css/$APTSTYLE'>\n";
if ($ISPOWDER) {
echo "<link href='https://www.powderwireless.net/powder/fonts/raleway/style.css' rel='stylesheet'>";
}
if ($TBMAINSITE) {
if ($ISEMULAB) {
# This might still be used by google.
echo "<meta name='description' ".
"content='emulab - network emulation testbed home'>\n";
}
}
echo "<script src='js/lib/jquery.min.js'></script>\n";
echo "<script>APT_CACHE_TOKEN='" . Instance::CacheToken() . "';</script>";
echo "<script src='js/common.js?nocache=asdfasdf'></script>
<link rel='stylesheet' href='css/jquery-steps.css'>
<script src='$TBBASE/emulab_sup.js'></script>
</head>
<body style='display: none;'>\n";
</head>\n";
if ($inline) {
echo "<body>\n";
}
else {
echo "<body style='display: none;'>\n";
}
echo "<script type='text/javascript'>\n";
echo " window.ISEMULAB = " . ($ISEMULAB ? "1" : "0") . ";\n";
......@@ -172,7 +185,7 @@ $PAGEHEADER_FUNCTION = function($thinheader = 0, $ignore1 = NULL,
if ($embedded) {
goto embed;
}
if ($ignore1) {
if ($nomenu) {
return;
}
......@@ -243,6 +256,18 @@ $PAGEHEADER_FUNCTION = function($thinheader = 0, $ignore1 = NULL,
!($login_status & CHECKLOGIN_WEBONLY)) {
# Always create empty div for announcements, for ajax update.
echo "<div id='portal-announcement-div'>\n";
#
# When a classic user hits the Portal interface for the first time,
# enter a announcement for the user to make sure they know what is
# going on and how to return to the Classic interface. I put a canned
# announcement in the announce script.
#
if (!$login_user->portal() && !$login_user->portal_interface_warned()) {
SUEXEC($FIRSTUSER, "nobody",
"webannounce -a -U $login_uid -p emulab -m 10 -P",
SUEXEC_ACTION_CONTINUE);
$login_user->SetPortalWarned();
}
$announcements = GET_ANNOUNCEMENTS($login_user);
for ($i = 0; $i < count($announcements); $i++) {
echo $announcements[$i];
......@@ -363,7 +388,7 @@ function SPITHEADER($thinheader = 0,
function SPITNAV($hiddenxs, $navbar_status, $navbar_right, $login_uid)
{
global $PORTAL_MANUAL, $APTLOGO, $login_status, $login_user, $TBMAINSITE;
global $THISHOMEBASE, $ISEMULAB, $ISPNET, $ISPOWDER;
global $THISHOMEBASE, $ISEMULAB, $ISPNET, $ISPOWDER, $TBBASE;
$hiddenxs = "";
echo "
......@@ -411,8 +436,12 @@ echo " <li class='divider'></li>
<li><a href='list-reservations.php'>
My Reservations</a></li>
<li><a href='activity.php?user=$login_uid&min=$then'>
My History</a></li>
";
My History</a></li>";
# Classic users, using the Portal, get a link back to it. SAD!
if (!$login_user->portal()) {
echo " <li class='divider'></li>";
echo " <li><a href='$TBBASE/classic.php'>Emulab Classic</a></li>";
}
echo "
</ul>
</li>
......
<!--
Copyright (c) 2000-2018 University of Utah and the Flux Group.
{{{EMULAB-LICENSE
This file is part of the Emulab network testbed software.
This file is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.
This file is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
License for more details.
You should have received a copy of the GNU Affero General Public License
along with this file. If not, see <http://www.gnu.org/licenses/>.
}}}
-->
<!--- This exists to redirect to the PHP script -->
<html>
<head>
<title>Emulab.Net</title>
<META HTTP-EQUIV="Refresh" Content= "0; URL=classic.php" ALT="Emulab home page">
</head>
</html>
<?php
#
# Copyright (c) 2000-2009 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
# This file is part of the Emulab network testbed software.
#
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
# License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this file. If not, see <http://www.gnu.org/licenses/>.
#
# }}}
#
require("defs.php3");
$optargs = OptionalPageArguments("stayhome", PAGEARG_BOOLEAN);
#
# The point of this is to redirect logged in users to their My Emulab
# page.
#
if (($this_user = CheckLogin($check_status))) {
$check_status = $check_status & CHECKLOGIN_STATUSMASK;
if ($check_status == CHECKLOGIN_MAYBEVALID) {
# Maybe the reason was because they where not using HTTPS ...
RedirectHTTPS();
}
if (($firstinitstate = TBGetFirstInitState())) {
unset($stayhome);
}
if (!isset($stayhome)) {
if ($check_status == CHECKLOGIN_LOGGEDIN) {
if ($firstinitstate == "createproject") {
# Zap to NewProject Page,
header("Location: $TBBASE/newproject.php3");
}
else {
# Zap to My Emulab page.
header("Location: $TBBASE/".
CreateURL("showuser", $this_user));
}
return;
}
}
# Fall through; display the page.
}
#
# Standard Testbed Header
#
PAGEHEADER("Emulab - Network Emulation Testbed Home",NULL,$RSS_HEADER_NEWS);
#
# Special banner message.
#
$message = TBGetSiteVar("web/banner");
if ($message != "") {
echo "<center><font color=Red size=+1>\n";
echo "$message\n";
echo "</font></center><br>\n";
}
if ($TBMAINSITE && !$ISALTDOMAIN) {
echo "<span class='picture'>
<center><font size=-1>In Memoriam</font></center><a href=jay.php>
<img width=80 height=85 src=jay.jpg></a><br clear=left>
<center><font size=-1>Jay Lepreau<br>03/52--09/08
</font></center></span><br>\n";
}
?>
<p>
<em>Emulab</em> is a network testbed, giving researchers a wide range of
environments in which to develop, debug, and evaluate their systems.
The name Emulab refers both to a <strong>facility</strong> and to a
<strong>software system</strong>.
The <a href="http://www.emulab.net">primary Emulab installation</a> is run
by the
<a href="http://www.flux.utah.edu">Flux Group</a>, part of the
<a href="http://www.cs.utah.edu">School of Computing</a> at the
<a href="http://www.utah.edu">University of Utah</a>.
There are also installations of the Emulab software at more than
<a href="http://users.emulab.net/trac/emulab/wiki/OtherEmulabs">two
dozen sites</a> around the world, ranging from testbeds with a handful
of nodes up to testbeds with hundreds of nodes.
Emulab is <a href="http://www.emulab.net/expubs.php">widely used</a>
by computer science researchers in the fields of networking and
distributed systems.
It is also designed to support <a href="http://users.emulab.net/trac/emulab/wiki/Education">education</a>, and has been used to <a href="http://users.emulab.net/trac/emulab/wiki/Classes">teach
classes</a> in those fields.
</p>
<?php
#
# Allow for a site specific front page
#
$sitefile = "index-" . strtolower($THISHOMEBASE) . ".html";
if (!file_exists($sitefile)) {
if ($TBMAINSITE && !$ISALTDOMAIN)
$sitefile = "index-mainsite.html";
else
$sitefile = "index-nonmain.html";
}
readfile("$sitefile");
#
# Standard Testbed Footer
#
PAGEFOOTER();
?>
<!--
Copyright (c) 2000-2004 University of Utah and the Flux Group.
Copyright (c) 2000-2018 University of Utah and the Flux Group.
{{{EMULAB-LICENSE
......@@ -24,7 +24,7 @@
<html>
<head>
<title>Emulab.Net</title>
<META HTTP-EQUIV="Refresh" Content= "0; URL=index.php3" ALT="Emulab home page">
<META HTTP-EQUIV="Refresh" Content= "0; URL=portal/frontpage.php" ALT="Emulab home page">
</head>
</html>
......
<?php
#
# Copyright (c) 2000-2009 University of Utah and the Flux Group.
# Copyright (c) 2000-2018 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
......@@ -21,102 +21,5 @@
#
# }}}
#
require("defs.php3");
$optargs = OptionalPageArguments("stayhome", PAGEARG_BOOLEAN);
#
# The point of this is to redirect logged in users to their My Emulab
# page.
#
if (($this_user = CheckLogin($check_status))) {
$check_status = $check_status & CHECKLOGIN_STATUSMASK;
if ($check_status == CHECKLOGIN_MAYBEVALID) {
# Maybe the reason was because they where not using HTTPS ...
RedirectHTTPS();
}
if (($firstinitstate = TBGetFirstInitState())) {
unset($stayhome);
}
if (!isset($stayhome)) {
if ($check_status == CHECKLOGIN_LOGGEDIN) {
if ($firstinitstate == "createproject") {
# Zap to NewProject Page,
header("Location: $TBBASE/newproject.php3");
}
else {
# Zap to My Emulab page.
header("Location: $TBBASE/".
CreateURL("showuser", $this_user));
}
return;
}
}
# Fall through; display the page.
}
#
# Standard Testbed Header
#
PAGEHEADER("Emulab - Network Emulation Testbed Home",NULL,$RSS_HEADER_NEWS);
#
# Special banner message.
#
$message = TBGetSiteVar("web/banner");
if ($message != "") {
echo "<center><font color=Red size=+1>\n";
echo "$message\n";
echo "</font></center><br>\n";
}
if ($TBMAINSITE && !$ISALTDOMAIN) {
echo "<span class='picture'>
<center><font size=-1>In Memoriam</font></center><a href=jay.php>
<img width=80 height=85 src=jay.jpg></a><br clear=left>
<center><font size=-1>Jay Lepreau<br>03/52--09/08
</font></center></span><br>\n";
}
?>
<p>
<em>Emulab</em> is a network testbed, giving researchers a wide range of
environments in which to develop, debug, and evaluate their systems.
The name Emulab refers both to a <strong>facility</strong> and to a
<strong>software system</strong>.
The <a href="http://www.emulab.net">primary Emulab installation</a> is run
by the
<a href="http://www.flux.utah.edu">Flux Group</a>, part of the
<a href="http://www.cs.utah.edu">School of Computing</a> at the
<a href="http://www.utah.edu">University of Utah</a>.
There are also installations of the Emulab software at more than
<a href="http://users.emulab.net/trac/emulab/wiki/OtherEmulabs">two
dozen sites</a> around the world, ranging from testbeds with a handful
of nodes up to testbeds with hundreds of nodes.
Emulab is <a href="http://www.emulab.net/expubs.php">widely used</a>
by computer science researchers in the fields of networking and
distributed systems.
It is also designed to support <a href="http://users.emulab.net/trac/emulab/wiki/Education">education</a>, and has been used to <a href="http://users.emulab.net/trac/emulab/wiki/Classes">teach
classes</a> in those fields.
</p>
<?php
#
# Allow for a site specific front page
#
$sitefile = "index-" . strtolower($THISHOMEBASE) . ".html";
if (!file_exists($sitefile)) {
if ($TBMAINSITE && !$ISALTDOMAIN)
$sitefile = "index-mainsite.html";
else
$sitefile = "index-nonmain.html";
}
readfile("$sitefile");
#
# Standard Testbed Footer
#
PAGEFOOTER();
header("Location: portal/frontpage.php");
?>
<?php
#
# Copyright (c) 2000-2014 University of Utah and the Flux Group.
# Copyright (c) 2000-2014, 2018 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
......@@ -69,10 +69,7 @@ if ($this_user) {
$returning = 1;
}
else {
#
# No uid, so must be new.
#
$returning = 0;
header("Location: portal/signup.php?joinproject=1");
}
if ($old_forwikionly == True) {
......