stephb9959
2023-01-16 22:31:36 -08:00
parent 040c782f3b
commit b0f1ecbbe4
39 changed files with 408 additions and 1656 deletions

View File

@@ -30,6 +30,7 @@ namespace OpenWifi::CertObjects {
field_to_json(Obj,"revoked", revoked);
field_to_json(Obj,"revokeCount", revokeCount);
field_to_json(Obj,"synched", synched);
field_to_json(Obj,"expiryDate", expiryDate);
}
bool CertificateEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
@@ -54,6 +55,7 @@ namespace OpenWifi::CertObjects {
field_from_json(Obj,"revoked", revoked);
field_from_json(Obj,"revokeCount", revokeCount);
field_from_json(Obj,"synched", synched);
field_from_json(Obj,"expiryDate", expiryDate);
return true;
} catch (...) {
}

View File

@@ -31,6 +31,7 @@ namespace OpenWifi::CertObjects {
uint64_t revoked = 0;
uint64_t revokeCount = 0;
uint64_t synched = 0;
uint64_t expiryDate = 0 ;
void to_json(Poco::JSON::Object &Obj) const;
bool from_json(const Poco::JSON::Object::Ptr &Obj);

View File

@@ -35,7 +35,8 @@ namespace OpenWifi {
MailAbandon_ = MicroServiceConfigGetInt("mailer.abandon",2*60*60);
UseHTML_ = MicroServiceConfigGetBool("mailer.html",false);
Enabled_ = (!MailHost_.empty() && !SenderLoginPassword_.empty() && !SenderLoginUserName_.empty());
EmailLogo_ = TemplateDir_ + "/" + MicroServiceConfigGetString("mailer.logo","logo.png");
LogoFilename = AuthService()->GetLogoAssetURI();
SubLogoFilename = AuthService()->GetSubLogoAssetURI();
}
}
@@ -76,7 +77,6 @@ namespace OpenWifi {
Poco::Thread::trySleep(10000);
if(!Running_)
break;
{
std::lock_guard G(Mutex_);
Messages_.splice(Messages_.end(),PendingMessages_);
@@ -139,6 +139,7 @@ namespace OpenWifi {
Message->setSender( TheSender );
Message->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, Recipient));
Message->setSubject(Msg.Attrs.find(SUBJECT)->second);
Message->setContentType("multipart/alternative");
poco_information(Logger(),fmt::format("Sending message to:{} from {}",Recipient,TheSender));
@@ -146,7 +147,7 @@ namespace OpenWifi {
std::string Content = Msg.Attrs.find(TEXT)->second;
Message->addContent(new Poco::Net::StringPartSource(Content));
} else {
for(const auto &format:{"html","txt"}) {
for(const auto &format:{"txt","html"}) {
std::string Content = Utils::LoadFile(TemplateDir_ + Msg.TemplateName + "." + format );
Types::StringPairVec Variables;
FillVariables(Msg.Attrs, Variables);
@@ -156,8 +157,10 @@ namespace OpenWifi {
}
}
/*
auto Logo = Msg.Attrs.find(LOGO);
if(Logo!=Msg.Attrs.end()) {
std::cout << "... >" << Logo->second << std::endl;
try {
Poco::File LogoFile( Msg.Subscriber ? AuthService::GetSubLogoAssetFileName() : AuthService::GetLogoAssetFileName ());
std::ifstream IF(LogoFile.path());
@@ -168,6 +171,7 @@ namespace OpenWifi {
poco_warning(Logger(),fmt::format("Cannot add '{}' logo in email",AuthService::GetLogoAssetFileName()));
}
}
*/
Poco::SharedPtr<Poco::Net::AcceptCertificateHandler> ptrHandler_ = new Poco::Net::AcceptCertificateHandler(false);
@@ -186,6 +190,10 @@ namespace OpenWifi {
SenderLoginUserName_,
SenderLoginPassword_
);
/* std::ofstream of(MicroServiceDataDirectory()+"/message.txt",std::ios_base::out|std::ios_base::trunc);
Message->write(of);
of.close();
*/
session.sendMessage(*Message);
session.close();
return MessageSendStatus::msg_sent;

View File

@@ -105,7 +105,8 @@ namespace OpenWifi {
std::atomic_bool Running_=false;
bool Enabled_=false;
bool UseHTML_=false;
std::string EmailLogo_{"logo.png"};
std::string LogoFilename;
std::string SubLogoFilename;
SMTPMailerService() noexcept:
SubSystemServer("SMTPMailer", "MAILER-SVR", "smtpmailer")

View File

@@ -25,6 +25,8 @@
#include "Poco/StringTokenizer.h"
#include "StorageClass.h"
#include "fmt/format.h"
namespace ORM {
enum FieldType {
@@ -149,12 +151,14 @@ namespace ORM {
Result += Escape(Value);
Result += "'";
}
} else {
return WHERE_AND_(Result,args...);
} else if constexpr (std::is_arithmetic_v<T>) {
if(!Result.empty())
Result += " and ";
Result += fieldName ;
Result += '=';
Result += std::to_string(Value);
return WHERE_AND_(Result,args...);
}
return WHERE_AND_(Result,args...);
}
@@ -483,15 +487,13 @@ namespace ORM {
return false;
}
template<typename... Args> bool GetRecordExt(RecordType & T , Args... args) {
bool GetRecord(RecordType & T , const std::string &WhereClause) {
try {
Poco::Data::Session Session = Pool_.get();
Poco::Data::Statement Select(Session);
RecordTuple RT;
auto WhereClause = WHERE_AND(args...);
std::string St = "select " + SelectFields_ + " from " + TableName_ + WhereClause + " limit 1";
std::string St = "select " + SelectFields_ + " from " + TableName_ + " where " + WhereClause + " limit 1";
Select << ConvertParams(St) ,
Poco::Data::Keywords::into(RT);

View File

@@ -233,6 +233,14 @@ namespace OpenWifi::RESTAPI::Errors {
static const struct msg InvalidScriptSelection{1153,"Only script or scriptId must be specified. Not both."};
static const struct msg NoDeviceStatisticsYet{1154,"Device statistics not available yet."};
static const struct msg AccountSuspended{1155,"You account was suspended. You can only use this site in read-only mode for now."};
static const struct msg BatchNameAlreadyExists{1156,"Batch name must be unique."};
static const struct msg RedirectorNameIsInvalid{1157,"Redirector name is invalid."};
static const struct msg CertificateAlreadyBelongsToYou{1158,"The serial number already belongs to you. Please use the certificate modification API to change the redirector."};
static const struct msg RelocationDisabledForThisDevice{1159,"Relocation disabled for this device."};
static const struct msg CannotModifyServerCertificates{1160,"Server certificates cannot be modified."};
}

View File

@@ -109,6 +109,11 @@ uint64_t MACToInt(const std::string &MAC) {
return Result;
}
[[nodiscard]] bool ValidHostname(const std::string &Hostname) {
static std::regex HostNameRegex("^(?!-)[A-Za-z0-9-]+([\\-\\.]{1}[a-z0-9]+)*\\.[A-Za-z]{2,6}$");
return std::regex_match(Hostname,HostNameRegex);
}
[[nodiscard]] std::string ToHex(const std::vector<unsigned char> & B) {
std::string R;
R.reserve(B.size()*2);
@@ -560,4 +565,11 @@ bool ExtractBase64CompressedData(const std::string &CompressedData,
return false;
}
[[nodiscard]] std::uint64_t ConvertDate(const std::string &Date) {
Poco::DateTime DT;
int TZ;
Poco::DateTimeParser::parse(Poco::DateTimeFormat::ISO8601_FORMAT,Date,DT,TZ);
return DT.timestamp().epochTime();
}
}

View File

@@ -73,6 +73,7 @@ namespace OpenWifi::Utils {
[[nodiscard]] bool ValidSerialNumber(const std::string &Serial);
[[nodiscard]] bool ValidUUID(const std::string &UUID);
[[nodiscard]] bool ValidHostname(const std::string &hostname);
template <typename ...Args> std::string ComputeHash(Args&&... args) {
Poco::SHA2Engine E;
@@ -121,6 +122,8 @@ namespace OpenWifi::Utils {
[[nodiscard]] std::string SanitizeToken(const std::string &Token);
[[nodiscard]] bool ValidateURI(const std::string &uri);
[[nodiscard]] std::uint64_t ConvertDate(const std::string &d);
template< typename T >
std::string int_to_hex( T i )
{

View File

@@ -356,8 +356,8 @@
>
<img
align="center"
alt="Arilia"
src="logo.png"
alt="OpenWifi"
src="${LOGO}"
style="
max-width: 100%;
padding-bottom: 0;
@@ -455,7 +455,7 @@
<tr>
<td>
<p>Thank You!</p>
<p>Arilia Wireless Inc.</p>
<p>Telecom Infra Project</p>
</td>
</tr>
<tr>
@@ -500,7 +500,7 @@
<tr></tr>
<tr>
<p class="align-center">
Copyright 2022
Copyright 2023
Arilia Wireless Inc,
All rights reserved.
</p>

View File

@@ -356,8 +356,8 @@
>
<img
align="center"
alt="Arilia"
src="logo.png"
alt="OpenWifi"
src="${LOGO}"
style="
max-width: 100%;
padding-bottom: 0;
@@ -501,7 +501,7 @@
<tr></tr>
<tr>
<p class="align-center">
Copyright 2022
Copyright 2023
Arilia Wireless Inc,
All rights reserved.
</p>

View File

@@ -356,8 +356,8 @@
>
<img
align="center"
alt="Arilia"
src="logo.png"
alt="OpenWifi"
src="${LOGO}"
style="
max-width: 100%;
padding-bottom: 0;
@@ -497,7 +497,7 @@
<tr></tr>
<tr>
<p class="align-center">
Copyright 2022
Copyright 2023
Arilia Wireless Inc,
All rights reserved.
</p>

View File

@@ -356,8 +356,8 @@
>
<img
align="center"
alt="Arilia"
src="logo.png"
alt="OpenWifi"
src="${LOGO}"
style="
max-width: 100%;
padding-bottom: 0;
@@ -501,7 +501,7 @@
<tr></tr>
<tr>
<p class="align-center">
Copyright 2022
Copyright 2023
Arilia Wireless Inc,
All rights reserved.
</p>

View File

@@ -1,527 +0,0 @@
<html>
<head>
<title>Email Confirmation</title>
<style>
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
color: #414141;
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
width: 100%;
text-align: center;
}
table td {
font-family: sans-serif;
font-size: 14px;
color: #414141;
vertical-align: top;
}
.body {
background-color: white;
width: 100%;
}
.container {
display: block;
margin: 0 auto !important;
max-width: 580px;
padding: 10px;
width: 580px;
}
.content {
box-sizing: border-box;
display: block;
margin: 0 auto;
max-width: 580px;
padding: 10px;
}
.main {
background: #ffffff;
border-radius: 0px;
width: 600px;
max-width: 100%;
border: 1px solid #d4d4d4;
padding-left: 45px;
padding-right: 45px;
}
.wrapper {
box-sizing: border-box;
padding: 40px 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #414141;
font-family: sans-serif;
font-weight: 400;
line-height: 1.4;
margin: 0;
margin-bottom: 30px;
}
h2 {
font-weight: 600;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
color: #414141;
margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
color: #414141;
}
a {
color: #29818c !important;
text-decoration: none;
border-bottom: 1px solid #d2d2d2;
}
.footer a {
color: #999999 !important;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
tbody {
text-align: left;
}
.btn > tbody > tr > td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 20px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #489e94;
border-radius: 5px;
box-sizing: border-box;
color: #29818c;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 120px;
text-decoration: none;
font-weight: 600;
text-transform: uppercase;
}
.btn-primary a {
transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1)
0ms,
box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,
border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
margin: auto;
background-color: #29818c;
border-color: #29818c;
color: #ffffff !important;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.align-center {
text-align: center;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
visibility: hidden;
width: 0;
}
hr {
border: 0;
border-bottom: 1px solid #d4d4d4;
}
.grayFont {
color: #999999;
}
.bold {
font-weight: 600;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class='body'] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class='body'] p,
table[class='body'] ul,
table[class='body'] ol,
table[class='body'] td,
table[class='body'] span,
table[class='body'] a {
font-size: 16px !important;
}
table[class='body'] .wrapper,
table[class='body'] .article {
padding: 10px !important;
}
table[class='body'] .content {
padding: 0 !important;
}
table[class='body'] .container {
padding: 0 !important;
width: 100% !important;
}
table[class='body'] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class='body'] .btn table {
width: 100% !important;
}
table[class='body'] .btn a {
width: 100% !important;
}
table[class='body'] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
.btn-primary a:hover {
background-color: rgb(50, 110, 103) !important;
border-color: rgb(50, 110, 103) !important;
}
}
</style>
</head>
<body class="">
<span class="preheader"></span>
<table
d=""
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
class="body"
>
<tr>
<td class="container">
<div class="content">
<!-- START CENTERED WHITE CONTAINER -->
<table
border="0"
cellpadding="0"
cellspacing="0"
width="100%"
style="min-width: 100%"
>
<tbody>
<tr>
<td valign="top" style="padding: 0px">
<table
align="center"
style="text-align: center"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
style="min-width: 100%"
>
<tbody>
<tr>
<td
valign="top"
class="align-center"
style="
padding-right: 0px;
padding-left: 48px;
padding-top: 0;
padding-bottom: 0;
"
>
<img
align="center"
alt="Arilia"
src="logo.png"
style="
max-width: 100%;
padding-bottom: 0;
display: inline !important;
vertical-align: bottom;
"
/>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table role="presentation" class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
>
<tr>
<td>
<h2>
Confirm Your Email Address
to Get Started
</h2>
</td>
</tr>
<tr>
<td>
<p>Dear ${RECIPIENT_EMAIL} ,</p>
<p>
Before you can access the
system, you must validate
your e-mail address. Please
click on the button below to
complete this task.
</p>
</td>
</tr>
<tr>
<td
style="
padding-top: 15px;
padding-bottom: 40px;
"
class="btn btn-primary"
>
<a
href="${ACTION_LINK}"
target="_blank"
>Confirm Email Address</a
>
</td>
</tr>
<tr>
<td>
<hr
style="
margin-top: 0px;
margin-bottom: 30px;
"
/>
</td>
</tr>
<tr>
<td>
<p>
For questions & support
regarding this application,
please contact us at
<a
href="mailto:tip-keys@arilia.com"
target="_blank"
>
tip-keys@arilia.com
</a>
. For question regarding the
Telecom Infra Project,
please contact us at
<a
href="mailto:info@telecominfraproject.com"
>
info@telecominfraproject.com
</a>
.
</p>
</td>
</tr>
<tr>
<td>
<p>Thank You!</p>
<p>Arilia Wireless Inc.</p>
</td>
</tr>
<tr>
<table
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
class="btn btn-primary"
>
<tbody></tbody>
</table>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
<!-- END CENTERED WHITE CONTAINER -->
<div class="footer">
<table
border="0"
cellpadding="0"
cellspacing="0"
width="100%"
style="min-width: 100; margin-top: 30px"
>
<tbody>
<tr>
<td valign="top" style="padding: 0px">
<table
align="left"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
style="min-width: 100%"
>
<tbody>
<tr></tr>
<tr>
<p class="align-center">
Copyright 2022
Arilia Wireless Inc,
All rights reserved.
</p>
<a
href="https://arilia.com"
target="_blank"
>www.arilia.com</a
>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@@ -1,9 +0,0 @@
Dear ${RECIPIENT_EMAIL},
Before you can access the system, you must validate your e-mail address. Please click on the link below to complete this task.
${ACTION_LINK}
And follow the instructions.
Thank you!

View File

@@ -1,523 +0,0 @@
<html>
<head>
<title>Password Reset</title>
<style>
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
color: #414141;
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
width: 100%;
text-align: center;
}
table td {
font-family: sans-serif;
font-size: 14px;
color: #414141;
vertical-align: top;
}
.body {
background-color: white;
width: 100%;
}
.container {
display: block;
margin: 0 auto !important;
max-width: 580px;
padding: 10px;
width: 580px;
}
.content {
box-sizing: border-box;
display: block;
margin: 0 auto;
max-width: 580px;
padding: 10px;
}
.main {
background: #ffffff;
border-radius: 0px;
width: 600px;
max-width: 100%;
border: 1px solid #d4d4d4;
padding-left: 45px;
padding-right: 45px;
}
.wrapper {
box-sizing: border-box;
padding: 40px 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #414141;
font-family: sans-serif;
font-weight: 400;
line-height: 1.4;
margin: 0;
margin-bottom: 30px;
}
h2 {
font-weight: 600;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
color: #414141;
margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
color: #414141;
}
a {
color: #29818c !important;
text-decoration: none;
border-bottom: 1px solid #d2d2d2;
}
.footer a {
color: #999999 !important;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
tbody {
text-align: left;
}
.btn > tbody > tr > td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 20px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #489e94;
border-radius: 5px;
box-sizing: border-box;
color: #29818c;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 120px;
text-decoration: none;
font-weight: 600;
text-transform: uppercase;
}
.btn-primary a {
transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1)
0ms,
box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,
border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
margin: auto;
background-color: #29818c;
border-color: #29818c;
color: #ffffff !important;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.align-center {
text-align: center;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
visibility: hidden;
width: 0;
}
hr {
border: 0;
border-bottom: 1px solid #d4d4d4;
}
.grayFont {
color: #999999;
}
.bold {
font-weight: 600;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class='body'] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class='body'] p,
table[class='body'] ul,
table[class='body'] ol,
table[class='body'] td,
table[class='body'] span,
table[class='body'] a {
font-size: 16px !important;
}
table[class='body'] .wrapper,
table[class='body'] .article {
padding: 10px !important;
}
table[class='body'] .content {
padding: 0 !important;
}
table[class='body'] .container {
padding: 0 !important;
width: 100% !important;
}
table[class='body'] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class='body'] .btn table {
width: 100% !important;
}
table[class='body'] .btn a {
width: 100% !important;
}
table[class='body'] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
.btn-primary a:hover {
background-color: rgb(50, 110, 103) !important;
border-color: rgb(50, 110, 103) !important;
}
}
</style>
</head>
<body class="">
<span class="preheader"></span>
<table
d=""
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
class="body"
>
<tr>
<td class="container">
<div class="content">
<!-- START CENTERED WHITE CONTAINER -->
<table
border="0"
cellpadding="0"
cellspacing="0"
width="100%"
style="min-width: 100%"
>
<tbody>
<tr>
<td valign="top" style="padding: 0px">
<table
align="center"
style="text-align: center"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
style="min-width: 100%"
>
<tbody>
<tr>
<td
valign="top"
class="align-center"
style="
padding-right: 0px;
padding-left: 48px;
padding-top: 0;
padding-bottom: 0;
"
>
<img
align="center"
alt="Arilia"
src="logo.png"
style="
max-width: 100%;
padding-bottom: 0;
display: inline !important;
vertical-align: bottom;
"
/>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table role="presentation" class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
>
<tr>
<td>
<h2>Password Reset</h2>
</td>
</tr>
<tr>
<td>
<p>Dear ${RECIPIENT_EMAIL} ,</p>
<p>
You have requested us to
reset your password. Please
click on the link below and
follow the instructions.
</p>
</td>
</tr>
<tr>
<td
style="
padding-top: 15px;
padding-bottom: 40px;
"
class="btn btn-primary"
>
<a
href="${ACTION_LINK}"
target="_blank"
>Reset Password</a
>
</td>
</tr>
<tr>
<td>
<hr
style="
margin-top: 0px;
margin-bottom: 30px;
"
/>
</td>
</tr>
<tr>
<td>
<p>
For questions & support
regarding this application,
please contact us at
<a
href="mailto:tip-keys@arilia.com"
target="_blank"
>
tip-keys@arilia.com
</a>
. For question regarding the
Telecom Infra Project,
please contact us at
<a
href="mailto:info@telecominfraproject.com"
>
info@telecominfraproject.com
</a>
.
</p>
</td>
</tr>
<tr>
<td>
<p>Thank You!</p>
<p>Arilia Wireless Inc.</p>
</td>
</tr>
<tr>
<table
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
class="btn btn-primary"
>
<tbody></tbody>
</table>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
<!-- END CENTERED WHITE CONTAINER -->
<div class="footer">
<table
border="0"
cellpadding="0"
cellspacing="0"
width="100%"
style="min-width: 100; margin-top: 30px"
>
<tbody>
<tr>
<td valign="top" style="padding: 0px">
<table
align="left"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
style="min-width: 100%"
>
<tbody>
<tr></tr>
<tr>
<p class="align-center">
Copyright 2022
Arilia Wireless Inc,
All rights reserved.
</p>
<a
href="https://arilia.com"
target="_blank"
>www.arilia.com</a
>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@@ -1,9 +0,0 @@
Dear ${RECIPIENT_EMAIL},
You have requested us to reset your password. Please click on the link below
${ACTION_LINK}
And follow the instructions.
Thank you!

View File

@@ -1,515 +0,0 @@
<html>
<head>
<title>Verification Code</title>
<style>
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
color: #414141;
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
width: 100%;
text-align: center;
}
table td {
font-family: sans-serif;
font-size: 14px;
color: #414141;
vertical-align: top;
}
.body {
background-color: white;
width: 100%;
}
.container {
display: block;
margin: 0 auto !important;
max-width: 580px;
padding: 10px;
width: 580px;
}
.content {
box-sizing: border-box;
display: block;
margin: 0 auto;
max-width: 580px;
padding: 10px;
}
.main {
background: #ffffff;
border-radius: 0px;
width: 600px;
max-width: 100%;
border: 1px solid #d4d4d4;
padding-left: 45px;
padding-right: 45px;
}
.wrapper {
box-sizing: border-box;
padding: 40px 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #414141;
font-family: sans-serif;
font-weight: 400;
line-height: 1.4;
margin: 0;
margin-bottom: 30px;
}
h2 {
font-weight: 600;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
color: #414141;
margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
color: #414141;
}
a {
color: #29818c !important;
text-decoration: none;
border-bottom: 1px solid #d2d2d2;
}
.footer a {
color: #999999 !important;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
tbody {
text-align: left;
}
.btn > tbody > tr > td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 20px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #489e94;
border-radius: 5px;
box-sizing: border-box;
color: #29818c;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 120px;
text-decoration: none;
font-weight: 600;
text-transform: uppercase;
}
.btn-primary a {
transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1)
0ms,
box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,
border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
margin: auto;
background-color: #29818c;
border-color: #29818c;
color: #ffffff !important;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.align-center {
text-align: center;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
visibility: hidden;
width: 0;
}
hr {
border: 0;
border-bottom: 1px solid #d4d4d4;
}
.grayFont {
color: #999999;
}
.bold {
font-weight: 600;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class='body'] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class='body'] p,
table[class='body'] ul,
table[class='body'] ol,
table[class='body'] td,
table[class='body'] span,
table[class='body'] a {
font-size: 16px !important;
}
table[class='body'] .wrapper,
table[class='body'] .article {
padding: 10px !important;
}
table[class='body'] .content {
padding: 0 !important;
}
table[class='body'] .container {
padding: 0 !important;
width: 100% !important;
}
table[class='body'] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class='body'] .btn table {
width: 100% !important;
}
table[class='body'] .btn a {
width: 100% !important;
}
table[class='body'] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
.btn-primary a:hover {
background-color: rgb(50, 110, 103) !important;
border-color: rgb(50, 110, 103) !important;
}
}
</style>
</head>
<body class="">
<span class="preheader"></span>
<table
d=""
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
class="body"
>
<tr>
<td class="container">
<div class="content">
<!-- START CENTERED WHITE CONTAINER -->
<table
border="0"
cellpadding="0"
cellspacing="0"
width="100%"
style="min-width: 100%"
>
<tbody>
<tr>
<td valign="top" style="padding: 0px">
<table
align="center"
style="text-align: center"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
style="min-width: 100%"
>
<tbody>
<tr>
<td
valign="top"
class="align-center"
style="
padding-right: 0px;
padding-left: 48px;
padding-top: 0;
padding-bottom: 0;
"
>
<img
align="center"
alt="Arilia"
src="logo.png"
style="
max-width: 100%;
padding-bottom: 0;
display: inline !important;
vertical-align: bottom;
"
/>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table role="presentation" class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
>
<tr>
<td>
<h2>Your Login Validation Code</h2>
</td>
</tr>
<tr>
<td>
<p>Dear ${RECIPIENT_EMAIL} ,</p>
<p>
You have requested your login validation. Please enter the following code on the login screen:
</p>
<p>
<div style="text-align: center;">
<h3 style="margin-bottom: 0px; font-weight: bold;">${CHALLENGE_CODE}</h3>
</div>
</p>
<p>
If you are not trying to login, please login and change your password. Someone may be trying to
access your account illegally.
</p>
</td>
</tr>
<tr>
<td>
<hr
style="
margin-top: 0px;
margin-bottom: 30px;
"
/>
</td>
</tr>
<tr>
<td>
<p>
For questions & support
regarding this application,
please contact us at
<a
href="mailto:tip-keys@arilia.com"
target="_blank"
>
tip-keys@arilia.com
</a>
. For question regarding the
Telecom Infra Project,
please contact us at
<a
href="mailto:info@telecominfraproject.com"
>
info@telecominfraproject.com
</a>
.
</p>
</td>
</tr>
<tr>
<td>
<p>Thank You!</p>
<p>Arilia Wireless Inc.</p>
</td>
</tr>
<tr>
<table
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
class="btn btn-primary"
>
<tbody></tbody>
</table>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
<!-- END CENTERED WHITE CONTAINER -->
<div class="footer">
<table
border="0"
cellpadding="0"
cellspacing="0"
width="100%"
style="min-width: 100; margin-top: 30px"
>
<tbody>
<tr>
<td valign="top" style="padding: 0px">
<table
align="left"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
style="min-width: 100%"
>
<tbody>
<tr></tr>
<tr>
<p class="align-center">
Copyright 2022
Arilia Wireless Inc,
All rights reserved.
</p>
<a
href="https://arilia.com"
target="_blank"
>www.arilia.com</a
>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@@ -1,10 +0,0 @@
Dear ${RECIPIENT_EMAIL},
You have requested your login validation. Please enter the following code on the login screen:
${CHALLENGE_CODE}
If you are not trying to login, please login and change your password. Someone may be trying to
access your account illegally.
Thank you!

View File

@@ -356,8 +356,8 @@
>
<img
align="center"
alt="Arilia"
src="logo.png"
alt="OpenWifi"
src="${LOGO}"
style="
max-width: 100%;
padding-bottom: 0;
@@ -489,7 +489,7 @@
<tr></tr>
<tr>
<p class="align-center">
Copyright 2022
Copyright 2023
Arilia Wireless Inc,
All rights reserved.
</p>

View File

@@ -3,11 +3,11 @@
<head>
<meta charset="UTF-8">
<title>Whoops!</title>
<link rel="stylesheet" href="./404_error.css">
<link rel="stylesheet" href="/wwwassets/404_error.css">
</head>
<body>
<div class="logo-box"><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div class="logo-box"><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div class="box-container">
<div class="box">
<div class="box__ghost">

View File

@@ -3,13 +3,13 @@
<head>
<title>Access Policy</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Email Verification Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Email Validated!</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Password Policy</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Reset Password</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Reset Password Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Reset Password Success</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -0,0 +1,308 @@
@import url(https://fonts.googleapis.com/css?family=Ubuntu);
html, body {
font-family: "Ubuntu";
}
* {
box-sizing: border-box;
}
.box {
width: 350px;
height: 100%;
max-height: 600px;
min-height: 450px;
background: #332F63;
border-radius: 20px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
padding: 30px 50px;
}
.box .box__ghost {
padding: 15px 25px 25px;
position: absolute;
left: 50%;
top: 20%;
transform: translate(-50%, -30%);
}
.logo-box {
width: 100%;
text-align: center;
display: flex;
justify-content: center;
}
.logo-img {
width: 100%;
height: 100%;
max-height: 120px;
margin-left:15px;
margin-top: 10px;
object-fit: contain;
}
.box .box__ghost .symbol:nth-child(1) {
opacity: 0.2;
animation: shine 4s ease-in-out 3s infinite;
}
.box .box__ghost .symbol:nth-child(1):before, .box .box__ghost .symbol:nth-child(1):after {
content: "";
width: 12px;
height: 4px;
background: #fff;
position: absolute;
border-radius: 5px;
bottom: 65px;
left: 0;
}
.box .box__ghost .symbol:nth-child(1):before {
transform: rotate(45deg);
}
.box .box__ghost .symbol:nth-child(1):after {
transform: rotate(-45deg);
}
.box .box__ghost .symbol:nth-child(2) {
position: absolute;
left: -5px;
top: 30px;
height: 18px;
width: 18px;
border: 4px solid;
border-radius: 50%;
border-color: #fff;
opacity: 0.2;
animation: shine 4s ease-in-out 1.3s infinite;
}
.box .box__ghost .symbol:nth-child(3) {
opacity: 0.2;
animation: shine 3s ease-in-out 0.5s infinite;
}
.box .box__ghost .symbol:nth-child(3):before, .box .box__ghost .symbol:nth-child(3):after {
content: "";
width: 12px;
height: 4px;
background: #fff;
position: absolute;
border-radius: 5px;
top: 5px;
left: 40px;
}
.box .box__ghost .symbol:nth-child(3):before {
transform: rotate(90deg);
}
.box .box__ghost .symbol:nth-child(3):after {
transform: rotate(180deg);
}
.box .box__ghost .symbol:nth-child(4) {
opacity: 0.2;
animation: shine 6s ease-in-out 1.6s infinite;
}
.box .box__ghost .symbol:nth-child(4):before, .box .box__ghost .symbol:nth-child(4):after {
content: "";
width: 15px;
height: 4px;
background: #fff;
position: absolute;
border-radius: 5px;
top: 10px;
right: 30px;
}
.box .box__ghost .symbol:nth-child(4):before {
transform: rotate(45deg);
}
.box .box__ghost .symbol:nth-child(4):after {
transform: rotate(-45deg);
}
.box .box__ghost .symbol:nth-child(5) {
position: absolute;
right: 5px;
top: 40px;
height: 12px;
width: 12px;
border: 3px solid;
border-radius: 50%;
border-color: #fff;
opacity: 0.2;
animation: shine 1.7s ease-in-out 7s infinite;
}
.box .box__ghost .symbol:nth-child(6) {
opacity: 0.2;
animation: shine 2s ease-in-out 6s infinite;
}
.box .box__ghost .symbol:nth-child(6):before, .box .box__ghost .symbol:nth-child(6):after {
content: "";
width: 15px;
height: 4px;
background: #fff;
position: absolute;
border-radius: 5px;
bottom: 65px;
right: -5px;
}
.box .box__ghost .symbol:nth-child(6):before {
transform: rotate(90deg);
}
.box .box__ghost .symbol:nth-child(6):after {
transform: rotate(180deg);
}
.box .box__ghost .box__ghost-container {
background: #fff;
width: 100px;
height: 100px;
border-radius: 100px 100px 0 0;
position: relative;
margin: 0 auto;
animation: upndown 3s ease-in-out infinite;
}
.box .box__ghost .box__ghost-container .box__ghost-eyes {
position: absolute;
left: 50%;
top: 45%;
height: 12px;
width: 70px;
}
.box .box__ghost .box__ghost-container .box__ghost-eyes .box__eye-left {
width: 12px;
height: 12px;
background: #332F63;
border-radius: 50%;
margin: 0 10px;
position: absolute;
left: 0;
}
.box .box__ghost .box__ghost-container .box__ghost-eyes .box__eye-right {
width: 12px;
height: 12px;
background: #332F63;
border-radius: 50%;
margin: 0 10px;
position: absolute;
right: 0;
}
.box .box__ghost .box__ghost-container .box__ghost-bottom {
display: flex;
position: absolute;
top: 100%;
left: 0;
right: 0;
}
.box .box__ghost .box__ghost-container .box__ghost-bottom div {
flex-grow: 1;
position: relative;
top: -10px;
height: 20px;
border-radius: 100%;
background-color: #fff;
}
.box .box__ghost .box__ghost-container .box__ghost-bottom div:nth-child(2n) {
top: -12px;
margin: 0 0px;
border-top: 15px solid #332F63;
background: transparent;
}
.box .box__ghost .box__ghost-shadow {
height: 20px;
box-shadow: 0 50px 15px 5px #3B3769;
border-radius: 50%;
margin: 0 auto;
animation: smallnbig 3s ease-in-out infinite;
}
.box .box__description {
position: absolute;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
}
.box .box__description .box__description-container {
color: #fff;
text-align: left;
width: 200px;
font-size: 16px;
margin: 0 auto;
}
.box .box__description .box__description-container .box__description-title {
font-size: 24px;
letter-spacing: 0.5px;
}
.box .box__description .box__description-container .box__description-text {
color: #8C8AA7;
line-height: 20px;
margin-top: 20px;
}
.box .box__description .box__button {
display: block;
position: relative;
background: #FF5E65;
border: 1px solid transparent;
border-radius: 50px;
height: 50px;
text-align: center;
text-decoration: none;
color: #fff;
line-height: 50px;
font-size: 18px;
padding: 0 70px;
white-space: nowrap;
margin-top: 25px;
transition: background 0.5s ease;
overflow: hidden;
-webkit-mask-image: -webkit-radial-gradient(white, black);
}
.box .box__description .box__button:before {
content: "";
position: absolute;
width: 20px;
height: 100px;
background: #fff;
bottom: -25px;
left: 0;
border: 2px solid #fff;
transform: translateX(-50px) rotate(45deg);
transition: transform 0.5s ease;
}
.box .box__description .box__button:hover {
background: transparent;
border-color: #fff;
}
.box .box__description .box__button:hover:before {
transform: translateX(250px) rotate(45deg);
}
@keyframes upndown {
0% {
transform: translateY(5px);
}
50% {
transform: translateY(15px);
}
100% {
transform: translateY(5px);
}
}
@keyframes smallnbig {
0% {
width: 90px;
}
50% {
width: 100px;
}
100% {
width: 90px;
}
}
@keyframes shine {
0% {
opacity: 0.2;
}
25% {
opacity: 0.1;
}
50% {
opacity: 0.2;
}
100% {
opacity: 0.2;
}
}

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<title>Whoops!</title>
<link rel="stylesheet" href="./404_error.css">
<link rel="stylesheet" href="/wwwassets/sub_404_error.css">
</head>
<body>
<div class="box">
@@ -38,7 +38,7 @@
<div class="box__description-text">So we'll just assume one of them got
fed up and refused to help you...</div>
<div class="box__description-text"> If you get this again, we need to know. We need to let that thing know who's the boss...</div>
<div><img src="sub_logo_dark.png" alt="Arilia" class="logo-img"></div>
<div><img src="sub_logo_dark.png" alt="OpenWifi" class="logo-img"></div>
</div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Access Policy</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Email Verification Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Email Validated!</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Password Policy</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Reset Password</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Reset Password Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Reset Password Success</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Signup Completion</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Signup Completion Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>

View File

@@ -3,13 +3,13 @@
<head>
<title>Signup Completed!</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<link rel="stylesheet" href="/wwwassets/sub_common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi" class="logo-img"></div>
<div></div>
</div>