File: D:/web/circ.itp/reports/index.asp
<%@ Language="VBScript" CodePage="65001" %>
<%
Option Explicit
Response.Buffer = True
Response.CodePage = 65001
Response.CharSet = "utf-8"
' Security and privacy headers.
Response.Expires = -1
Response.AddHeader "Cache-Control", "private, no-store, no-cache, must-revalidate, max-age=0"
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "X-Content-Type-Options", "nosniff"
Response.AddHeader "X-Frame-Options", "DENY"
Response.AddHeader "Referrer-Policy", "no-referrer"
Response.AddHeader "Permissions-Policy", "camera=(), microphone=(), geolocation=()"
Response.AddHeader "X-Robots-Tag", "noindex, nofollow, noarchive"
Response.AddHeader "Content-Security-Policy", "default-src 'none'; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; form-action 'self'; frame-ancestors 'none'; base-uri 'none'"
' Fail closed unless IIS is serving the page over HTTPS and has authenticated the user.
Dim isHttps, authenticatedUser
isHttps = (LCase(Trim(Request.ServerVariables("HTTPS"))) = "on" Or _
Trim(Request.ServerVariables("SERVER_PORT_SECURE")) = "1" Or _
LCase(Trim(Request.ServerVariables("HTTP_X_FORWARDED_PROTO"))) = "https")
If Not isHttps Then
Response.Status = "403 Forbidden"
Response.ContentType = "text/plain"
Response.Write "HTTPS is required for these reports."
Response.End
End If
authenticatedUser = Trim(Request.ServerVariables("AUTH_USER"))
If authenticatedUser = "" Then authenticatedUser = Trim(Request.ServerVariables("LOGON_USER"))
If authenticatedUser = "" Then
Response.Status = "403 Forbidden"
Response.ContentType = "text/plain"
Response.Write "IIS authentication is required for these reports."
Response.End
End If
%>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CIRC Reports</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
body {
background: #f8f9fa;
}
.report-card {
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.report-card:hover,
.report-card:focus-within {
transform: translateY(-2px);
box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .10);
}
.report-card .card-title {
line-height: 1.3;
}
</style>
</head>
<body>
<main class="container py-4 py-lg-5">
<header class="mb-4">
<h1 class="h2 mb-2">CIRC Reports</h1>
<p class="text-secondary mb-0">Select a report to open.</p>
</header>
<div class="row g-4">
<div class="col-12 col-lg-6">
<article class="card report-card h-100">
<div class="card-body p-4">
<h2 class="card-title h4">Clearance Radiator Customer Value Report</h2>
<p class="card-text text-secondary mb-4">
Analyses clearance radiator orders, the other products purchased in those orders,
and the wider value of the customers.
</p>
<a class="btn btn-primary stretched-link" href="clearance-radiator-analysis.asp">
Open report
</a>
</div>
</article>
</div>
<div class="col-12 col-lg-6">
<article class="card report-card h-100">
<div class="card-body p-4">
<h2 class="card-title h4">Time Between First and Second Radiator Orders</h2>
<p class="card-text text-secondary mb-4">
Reports the number of days between customers' first and second radiator orders,
with date and gap filters.
</p>
<a class="btn btn-primary stretched-link" href="rad-reorder-gap.asp">
Open report
</a>
</div>
</article>
</div>
</div>
</main>
</body>
</html>