stephb9959
2022-11-14 09:52:52 -08:00
parent c5aadffe1d
commit 45deeaea88
30 changed files with 1106 additions and 1370 deletions

View File

@@ -110,7 +110,7 @@ namespace OpenWifi {
case OpenWifi::SecurityObjects::LinkActions::SUB_SIGNUP: { case OpenWifi::SecurityObjects::LinkActions::SUB_SIGNUP: {
auto Signup = Poco::StringTokenizer(UInfo.signingUp,":"); auto Signup = Poco::StringTokenizer(UInfo.signingUp,":");
if(AuthService::SendEmailToSubUser(i.id, UInfo.email, MessagingTemplates::SIGNUP_VERIFICATION, Signup.count()==1 ? "" : Signup[0])) { if(AuthService::SendEmailToSubUser(i.id, UInfo.email, MessagingTemplates::SUB_SIGNUP_VERIFICATION, Signup.count()==1 ? "" : Signup[0])) {
poco_information(Logger(),fmt::format("Send new subscriber email verification link to {}",UInfo.email)); poco_information(Logger(),fmt::format("Send new subscriber email verification link to {}",UInfo.email));
} }
StorageService()->ActionLinksDB().SentAction(i.id); StorageService()->ActionLinksDB().SentAction(i.id);

View File

@@ -689,14 +689,14 @@ namespace OpenWifi {
} }
break; break;
case MessagingTemplates::SIGNUP_VERIFICATION: { case MessagingTemplates::SUB_SIGNUP_VERIFICATION: {
MessageAttributes Attrs; MessageAttributes Attrs;
Attrs[RECIPIENT_EMAIL] = UInfo.email; Attrs[RECIPIENT_EMAIL] = UInfo.email;
Attrs[LOGO] = GetSubLogoAssetURI(); Attrs[LOGO] = GetSubLogoAssetURI();
Attrs[SUBJECT] = "Signup e-mail Address Verification"; Attrs[SUBJECT] = "Signup e-mail Address Verification";
Attrs[ACTION_LINK] = MicroServiceGetPublicAPIEndPoint() + "/actionLink?action=signup_verification&id=" + LinkId ; Attrs[ACTION_LINK] = MicroServiceGetPublicAPIEndPoint() + "/actionLink?action=signup_verification&id=" + LinkId ;
Attrs[ACTION_LINK_HTML] = "/api/v1/actionLink?action=signup_verification&id=" + LinkId ; Attrs[ACTION_LINK_HTML] = "/api/v1/actionLink?action=signup_verification&id=" + LinkId ;
SMTPMailerService()->SendMessage(UInfo.email, MessagingTemplates::TemplateName(MessagingTemplates::SIGNUP_VERIFICATION, OperatorName), Attrs, true); SMTPMailerService()->SendMessage(UInfo.email, MessagingTemplates::TemplateName(MessagingTemplates::SUB_SIGNUP_VERIFICATION, OperatorName), Attrs, true);
UInfo.waitingForEmailCheck = true; UInfo.waitingForEmailCheck = true;
} }
break; break;

View File

@@ -19,7 +19,7 @@ namespace OpenWifi {
enum EMAIL_REASON { enum EMAIL_REASON {
FORGOT_PASSWORD = 0, FORGOT_PASSWORD = 0,
EMAIL_VERIFICATION, EMAIL_VERIFICATION,
SIGNUP_VERIFICATION, SUB_SIGNUP_VERIFICATION,
EMAIL_INVITATION, EMAIL_INVITATION,
VERIFICATION_CODE, VERIFICATION_CODE,
SUB_FORGOT_PASSWORD, SUB_FORGOT_PASSWORD,
@@ -37,7 +37,7 @@ namespace OpenWifi {
switch (r) { switch (r) {
case FORGOT_PASSWORD: return AddOperator(EmailTemplateNames[FORGOT_PASSWORD],OperatorName); case FORGOT_PASSWORD: return AddOperator(EmailTemplateNames[FORGOT_PASSWORD],OperatorName);
case EMAIL_VERIFICATION: return AddOperator(EmailTemplateNames[EMAIL_VERIFICATION],OperatorName); case EMAIL_VERIFICATION: return AddOperator(EmailTemplateNames[EMAIL_VERIFICATION],OperatorName);
case SIGNUP_VERIFICATION: return AddOperator(EmailTemplateNames[SIGNUP_VERIFICATION],OperatorName); case SUB_SIGNUP_VERIFICATION: return AddOperator(EmailTemplateNames[SUB_SIGNUP_VERIFICATION],OperatorName);
case EMAIL_INVITATION: return AddOperator(EmailTemplateNames[EMAIL_INVITATION],OperatorName); case EMAIL_INVITATION: return AddOperator(EmailTemplateNames[EMAIL_INVITATION],OperatorName);
case VERIFICATION_CODE: return AddOperator(EmailTemplateNames[VERIFICATION_CODE],OperatorName); case VERIFICATION_CODE: return AddOperator(EmailTemplateNames[VERIFICATION_CODE],OperatorName);
case SUB_FORGOT_PASSWORD: return AddOperator(EmailTemplateNames[SUB_FORGOT_PASSWORD],OperatorName); case SUB_FORGOT_PASSWORD: return AddOperator(EmailTemplateNames[SUB_FORGOT_PASSWORD],OperatorName);
@@ -60,7 +60,7 @@ namespace OpenWifi {
inline const static std::vector<std::string> EmailTemplateNames = { inline const static std::vector<std::string> EmailTemplateNames = {
"password_reset", "password_reset",
"email_verification", "email_verification",
"signup_verification", "sub_signup_verification",
"email_invitation", "email_invitation",
"verification_code", "verification_code",
"sub_password_reset", "sub_password_reset",

View File

@@ -62,7 +62,7 @@ namespace OpenWifi {
void RESTAPI_action_links::DoNewSubVerification(SecurityObjects::ActionLink &Link) { void RESTAPI_action_links::DoNewSubVerification(SecurityObjects::ActionLink &Link) {
Logger_.information(fmt::format("REQUEST-SUB-SIGNUP({}): For ID={}", Request->clientAddress().toString(), Link.userId)); Logger_.information(fmt::format("REQUEST-SUB-SIGNUP({}): For ID={}", Request->clientAddress().toString(), Link.userId));
Poco::File FormFile{ Daemon()->AssetDir() + "/signup_verification.html"}; Poco::File FormFile{ Daemon()->AssetDir() + "/sub_signup_verification.html"};
Types::StringPairVec FormVars{ {"UUID", Link.id}, Types::StringPairVec FormVars{ {"UUID", Link.id},
{"PASSWORD_VALIDATION", AuthService()->PasswordValidationExpression()}}; {"PASSWORD_VALIDATION", AuthService()->PasswordValidationExpression()}};
SendHTMLFileBack(FormFile,FormVars); SendHTMLFileBack(FormFile,FormVars);
@@ -161,7 +161,7 @@ namespace OpenWifi {
} }
if(Password1!=Password2 || !AuthService()->ValidateSubPassword(Password1)) { if(Password1!=Password2 || !AuthService()->ValidateSubPassword(Password1)) {
Poco::File FormFile{ Daemon()->AssetDir() + "/password_reset_error.html"}; Poco::File FormFile{ Daemon()->AssetDir() + "/sub_password_reset_error.html"};
Types::StringPairVec FormVars{ {"UUID", Id}, Types::StringPairVec FormVars{ {"UUID", Id},
{"ERROR_TEXT", "For some reason, the passwords entered do not match or they do not comply with" {"ERROR_TEXT", "For some reason, the passwords entered do not match or they do not comply with"
" accepted password creation restrictions. Please consult our on-line help" " accepted password creation restrictions. Please consult our on-line help"
@@ -173,14 +173,14 @@ namespace OpenWifi {
SecurityObjects::UserInfo UInfo; SecurityObjects::UserInfo UInfo;
bool Found = StorageService()->SubDB().GetUserById(Link.userId,UInfo); bool Found = StorageService()->SubDB().GetUserById(Link.userId,UInfo);
if(!Found) { if(!Found) {
Poco::File FormFile{ Daemon()->AssetDir() + "/signup_verification_error.html"}; Poco::File FormFile{ Daemon()->AssetDir() + "/sub_signup_verification_error.html"};
Types::StringPairVec FormVars{ {"UUID", Id}, Types::StringPairVec FormVars{ {"UUID", Id},
{"ERROR_TEXT", "This request does not contain a valid user ID. Please contact your system administrator."}}; {"ERROR_TEXT", "This request does not contain a valid user ID. Please contact your system administrator."}};
return SendHTMLFileBack(FormFile,FormVars); return SendHTMLFileBack(FormFile,FormVars);
} }
if(UInfo.blackListed || UInfo.suspended) { if(UInfo.blackListed || UInfo.suspended) {
Poco::File FormFile{ Daemon()->AssetDir() + "/signup_verification_error.html"}; Poco::File FormFile{ Daemon()->AssetDir() + "/sub_signup_verification_error.html"};
Types::StringPairVec FormVars{ {"UUID", Id}, Types::StringPairVec FormVars{ {"UUID", Id},
{"ERROR_TEXT", "Please contact our system administrators. We have identified an error in your account that must be resolved first."}}; {"ERROR_TEXT", "Please contact our system administrators. We have identified an error in your account that must be resolved first."}};
return SendHTMLFileBack(FormFile,FormVars); return SendHTMLFileBack(FormFile,FormVars);
@@ -188,7 +188,7 @@ namespace OpenWifi {
bool GoodPassword = AuthService()->SetSubPassword(Password1,UInfo); bool GoodPassword = AuthService()->SetSubPassword(Password1,UInfo);
if(!GoodPassword) { if(!GoodPassword) {
Poco::File FormFile{ Daemon()->AssetDir() + "/signup_verification_error.html"}; Poco::File FormFile{ Daemon()->AssetDir() + "/sub_signup_verification_error.html"};
Types::StringPairVec FormVars{ {"UUID", Id}, Types::StringPairVec FormVars{ {"UUID", Id},
{"ERROR_TEXT", "You cannot reuse one of your recent passwords."}}; {"ERROR_TEXT", "You cannot reuse one of your recent passwords."}};
return SendHTMLFileBack(FormFile,FormVars); return SendHTMLFileBack(FormFile,FormVars);
@@ -202,7 +202,7 @@ namespace OpenWifi {
StorageService()->SubDB().UpdateUserInfo(UInfo.email,Link.userId,UInfo); StorageService()->SubDB().UpdateUserInfo(UInfo.email,Link.userId,UInfo);
Poco::File FormFile{ Daemon()->AssetDir() + "/signup_verification_success.html"}; Poco::File FormFile{ Daemon()->AssetDir() + "/sub_signup_verification_success.html"};
Types::StringPairVec FormVars{ {"UUID", Id}, Types::StringPairVec FormVars{ {"UUID", Id},
{"USERNAME", UInfo.email} }; {"USERNAME", UInfo.email} };
StorageService()->ActionLinksDB().CompleteAction(Id); StorageService()->ActionLinksDB().CompleteAction(Id);

View File

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

View File

@@ -1,70 +1,64 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en" >
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Whoops...</title> <title>Whoops!</title>
<link rel="stylesheet" href="/wwwassets/404_error.css"> <link rel="stylesheet" href="./404_error.css">
</head> </head>
<body> <body>
<div class="logo-box"><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div class="box-container">
<div class="box"> <div class="box">
<div class="box__ghost"> <div class="box__ghost">
<div class="symbol"></div> <div class="symbol"></div>
<div class="symbol"></div> <div class="symbol"></div>
<div class="symbol"></div> <div class="symbol"></div>
<div class="symbol"></div> <div class="symbol"></div>
<div class="symbol"></div> <div class="symbol"></div>
<div class="symbol"></div> <div class="symbol"></div>
<div class="box__ghost-container"> <div class="box__ghost-container">
<div class="box__ghost-eyes"> <div class="box__ghost-eyes">
<div class="box__eye-left"></div> <div class="box__eye-left"></div>
<div class="box__eye-right"></div> <div class="box__eye-right"></div>
</div> </div>
<div class="box__ghost-bottom"> <div class="box__ghost-bottom">
<div></div> <div></div>
<div></div> <div></div>
<div></div> <div></div>
<div></div> <div></div>
<div></div> <div></div>
</div> </div>
</div>
<div class="box__ghost-shadow"></div>
</div> </div>
<div class="box__ghost-shadow"></div>
<div class="box__description"> </div>
<div class="box__description-container">
<div class="box__description-title">Whoops!</div> <div class="box__description">
<div class="box__description-text">You know computers sometimes go crazy... So we'll just assume one of them got <div class="box__description-container">
fed up and refused to help you... <div class="box__description-title">Whoops!</div>
If you get this again, we need to know. We need to let that thing know who's the boss... <div class="box__description-text">You know computers sometimes go crazy...</div>
</div> <div class="box__description-text">So we'll just assume one of them got
</div> fed up and refused to help you...</div>
<!-- <a href="https://codepen.io/diogo_ml_gomes/" target="_blank" class="box__button">Go back</a> --> <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> </div>
</div>
</div>
</div></div>
<script> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script><script>var pageX = $(document).width();
//based on https://dribbble.com/shots/3913847-404-page
var pageX = $(document).width();
var pageY = $(document).height(); var pageY = $(document).height();
var mouseY=0; var mouseY=0;
var mouseX=0; var mouseX=0;
$(document).mousemove(function( event ) { $(document).mousemove(function( event ) {
//verticalAxis
mouseY = event.pageY; mouseY = event.pageY;
yAxis = (pageY/2-mouseY)/pageY*300; yAxis = (pageY/2-mouseY)/pageY*300;
//horizontalAxis
mouseX = event.pageX / -pageX; mouseX = event.pageX / -pageX;
xAxis = -mouseX * 100 - 100; xAxis = -mouseX * 100 - 100;
$('.box__ghost-eyes').css({ 'transform': 'translate('+ xAxis +'%,-'+ yAxis +'%)' }); $('.box__ghost-eyes').css({ 'transform': 'translate('+ xAxis +'%,-'+ yAxis +'%)' });
//console.log('X: ' + xAxis);
}); });
</script> </script>
</body> </body>
</html> </html>

View File

@@ -1,102 +1,15 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Access Policy</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<style> <link rel="stylesheet" href="./common.css">
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
.info-card {
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
}
.info-list {
width: 80%;
margin: auto;
}
.info-title {
padding-bottom: 20px;
width: 80%;
margin: auto;
}
.container {
padding: 16px;
}
span.password1 {
float: right;
padding-top: 16px;
}
body {
background-color: #ebedef;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head> </head>
<body> <body>
<div class="logo-grid"> <div class="logo-grid">
<div></div> <div></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi"></div> <div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div> <div></div>
</div> </div>
@@ -105,8 +18,15 @@
<ul class="info-list"> <ul class="info-list">
<li>Must be a TIP Member.</li> <li>Must be a TIP Member.</li>
</ul> </ul>
<div id="footer" />
</div> </div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script>
</body> </body>
</html> </html>

171
wwwassets/common.css Normal file
View File

@@ -0,0 +1,171 @@
body {font-family: Arial, Helvetica, sans-serif;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
margin-top: calc(10vh)
}
.logo-grid > div > img {
width: 100%;
height: 100%;
max-height: 200px;
object-fit: contain;
}
.info-card {
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
min-width: 400px;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
border-radius: 15px;
}
.info-list {
margin-left: 5%;
}
.info-title {
margin-left: 5%;
color: #63B3ED;
}
.flex-box {
display: flex;
flex-direction: row;
justify-content: left;
align-items: center;
margin-left: 5%;
margin-top: 6px;
margin-bottom: 6px;
min-height: 30px
}
.flex-box > h3 {
margin-right: 4px;
margin-top: 5px;
margin-bottom: 5px;
}
.container {
padding: 16px;
}
span.password1 {
float: right;
padding-top: 16px;
}
body {
background-color: #ebedef;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
.form-container {
border: 0px;
margin-left: 5%;
}
.form-label {
float: left;
}
.form-input {
border-radius: 15px;
}
.form-control {
margin-bottom: 6px;
}
.form-submit-btn {
display: inline-flex;
appearance: none;
-webkit-box-align: center;
align-items: center;
-webkit-box-pack: center;
justify-content: center;
-webkit-user-select: none;
position: relative;
white-space: nowrap;
vertical-align: middle;
outline-color: transparent;
outline-style: solid;
outline-width: 2px;
outline-offset: 2px;
line-height: 1.2;
border-top-left-radius: 15px;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
border-bottom-left-radius: 15px;
height: 45px;
background-color:#4299E1;
font-size: 15px;
padding-inline-start: 16px;
padding-inline-end: 16px;
width: 100%;
margin-bottom: 20px;
color: white;
margin-top: 20px;
}
.footer{
display: flex;
flex-direction: row;
justify-content: left;
align-items: center;
margin-left: 5%;
}
hr.rounded {
margin-top: 40px;
margin-bottom: 0px;
margin-left: 5%;
margin-right: 5%;
border-top: 1px solid #bbb;
border-radius: 5px;
}

View File

@@ -1,121 +1,38 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <title>Email Verification Error</title>
<title>email Verification Error</title> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
.info-card {
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
}
.info-list {
width: 80%;
margin: auto;
}
.info-title {
padding-bottom: 20px;
width: 80%;
margin: auto;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
span.password1 {
float: right;
padding-top: 16px;
}
body {
background-color: #ebedef;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head> </head>
<body> <body>
<div class="logo-grid"> <div class="logo-grid">
<div></div> <div></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi"></div> <div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div> <div></div>
</div> </div>
<h1>Password reset failed...</h1> <div class="info-card">
<div> <h2 class="info-title">Email Verification Failed...</h2>
<h3>ID</h3> <div class="flex-box">
<b>${UUID}</b> <h3>ID: </h3>
</div> <b>${UUID}</b>
<div> </div>
<h3>Error</h3> <div class="flex-box">
<b>${ERROR_TEXT}</b> <h3>Error: </h3>
<b>${ERROR_TEXT}</b>
</div>
<div id="footer" />
</div> </div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script>
</body> </body>
</html> </html>

View File

@@ -1,119 +1,36 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <title>Email Validated!</title>
<title>email was successfully validated</title> <meta name="viewport" content="width=device-width, initial-scale=1">
<style> <link rel="stylesheet" href="./common.css">
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
.info-card {
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
}
.info-list {
width: 80%;
margin: auto;
}
.info-title {
padding-bottom: 20px;
width: 80%;
margin: auto;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
span.password1 {
float: right;
padding-top: 16px;
}
body {
background-color: #ebedef;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head> </head>
<body> <body>
<div class="logo-grid"> <div class="logo-grid">
<div></div> <div></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi"></div> <div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div> <div></div>
</div> </div>
<h1>email was successfully validated</h1> <div class="info-card">
<div> <h2 class="info-title">Email verification completed!</h2>
<h3>ID</h3> <div class="flex-box">
<b>${UUID}</b> <h3>ID: </h3>
</div> <b>${UUID}</b>
<div> </div>
<h3>Thank you ${USERNAME} for validating your email.</h3> <div class="flex-box">
<h3>Thank you ${USERNAME} for completing email verification!</h3>
</div>
<div id="footer" />
</div> </div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script>
</body> </body>
</html> </html>

11
wwwassets/footer.html Normal file
View File

@@ -0,0 +1,11 @@
<hr class="rounded">
<div class="footer">
<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>
</div>

View File

@@ -1,113 +1,20 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Password Policy</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<style> <link rel="stylesheet" href="./common.css">
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
.info-card {
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
}
.info-list {
width: 80%;
margin: auto;
}
.info-title {
padding-bottom: 20px;
width: 80%;
margin: auto;
}
.body {
background-color: #ebedef;
}
span.password1 {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head> </head>
<body class="body"> <body>
<div class="logo-grid"> <div class="logo-grid">
<div></div> <div></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi"></div> <div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div> <div></div>
</div> </div>
<div class="info-card"> <div class="info-card">
<h2 class="info-title">Password rules</h2> <h2 class="info-title">Password Policy</h2>
<ul class="info-list"> <ul class="info-list">
<li>Must be at least 8 characters long</li> <li>Must be at least 8 characters long</li>
<li>Must contain 1 uppercase letter</li> <li>Must contain 1 uppercase letter</li>
@@ -115,9 +22,16 @@
<li>Must contain 1 digit</li> <li>Must contain 1 digit</li>
<li>Must contain 1 special character</li> <li>Must contain 1 special character</li>
</ul> </ul>
<div id="footer" />
</div> </div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script>
</body> </body>
</html> </html>

View File

@@ -1,168 +1,62 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Reset Password</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<style> <link rel="stylesheet" href="./common.css">
body {
font-family: Arial,
Helvetica, sans-serif;
background-color: #ebedef;
}
.body {
background-color: #ebedef;
}
input[type=text], input[type=password] {
width: 90%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 40%;
font-size: medium;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.grid-container {
display: grid;
grid-template-columns: 15% 70% 15%;
grid-column-gap: 5px;
background-color: rgba(255, 255, 255, 0.8);
text-align: center;
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
}
.passwordtext {
float: left;
margin-left: 5%;
}
.password-input {
margin-top: 0px;
}
.rulestext {
width: 95%;
margin: auto;
display: inline-block;
text-align: left;
text-justify: none;
margin: 5px 0 5px 0;
grid-column-start: 2;
grid-column-end: 2;
}
ul {
display: inline-block;
text-align: left;
font-size: small;
}
span.password1 {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head> </head>
<body> <body>
<div class="logo-grid"> <div class="logo-grid">
<div></div> <div></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi"></div> <div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div> <div></div>
</div> </div>
<form action="/api/v1/actionLink?action=password_reset" method="post" onsubmit="return validatePassword()"> <div class="info-card">
<input type="hidden" id="custId" name="id" value="${UUID}"> <h2 class="info-title">Reset Password</h2>
<div class="grid-container"> <form action="/api/v1/actionLink?action=password_reset" method="post" onsubmit="return validatePassword()" class="form-container">
<h2>Reset Password</h2> <div class="form-control">
<div class="passwordlabel"> <label class="form-label" for="password1" ><b>New Password</b></label>
<label class="passwordtext" for="password1" ><b>New Password</b></label> <input class="form-input" id="password1" type="password" placeholder="New password" name="password1" pattern="${PASSWORD_VALIDATION}" required>
<input className="password-input" id="password1" type="password" placeholder="New Password" name="password1" pattern="${PASSWORD_VALIDATION}" required> </div>
</div> <div class="form-control">
<div class="passwordlabel"> <label class="form-label" for="password2"><b>Confirm New Password</b></label>
<label class="passwordtext" for="password2"><b>Retype Password</b></label> <input class="form-input" id="password2" type="password" placeholder="Enter new password again" name="password2" pattern="${PASSWORD_VALIDATION}" required>
<input id="password2" type="password" placeholder="Retype Password" name="password2" pattern="${PASSWORD_VALIDATION}" required> </div>
</div> <div class="form-control">
<div class="passwordlabel"> <button type="submit" class="form-submit-btn"><b>Reset Password</b></button>
<button type="submit">Reset Password</button> </div>
</div> </form>
<ul class="info-list">
<div class="rulestext"> <li>Must be at least 8 characters long</li>
<ul> <li>Must contain 1 uppercase letter</li>
<li>Must be at least 8 characters long</li> <li>Must contain 1 lowercase letter</li>
<li>Must contain 1 uppercase letter</li> <li>Must contain 1 digit</li>
<li>Must contain 1 lowercase letter</li> <li>Must contain 1 special character</li>
<li>Must contain 1 digit</li> </ul>
<li>Must contain 1 special character</li> <div id="footer" />
</ul>
</div>
</div> </div>
</form>
<script> <script>
function validatePassword() { const validatePassword = () => {
if(document.getElementById("password1").value == document.getElementById("password2").value) { const password1 = document.getElementById('password1').value;
const password2 = document.getElementById('password2').value;
if(password1 === password2) {
return true; return true;
} else { } else {
alert("The 2 passwords did not match. The passwords must match to reset your new password."); alert("The 2 passwords did not match. The passwords must match to reset your new password.");
return false; return false;
} }
} }
</script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script> </script>
</body> </body>
</html> </html>

View File

@@ -1,121 +1,38 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Reset Password Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<style> <link rel="stylesheet" href="./common.css">
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
.info-card {
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
}
.info-list {
width: 80%;
margin: auto;
}
.info-title {
padding-bottom: 20px;
width: 80%;
margin: auto;
}
.body {
background-color: #ebedef;
}
span.password1 {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head> </head>
<body class="body"> <body>
<div class="logo-grid"> <div class="logo-grid">
<div></div> <div></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi"></div> <div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div> <div></div>
</div> </div>
<div class="info-card"> <div class="info-card">
<h1 class="info-title">Reset Password Failed</h1> <h2 class="info-title">Reset Password Failed...</h2>
<div> <div class="flex-box">
<h3>ID</h3> <h3>ID: </h3>
<b>${UUID}</b> <b>${UUID}</b>
</div> </div>
<div> <div class="flex-box">
<h3>Error</h3> <h3>Error: </h3>
<b>${ERROR_TEXT}</b> <b>${ERROR_TEXT}</b>
</div> </div>
<div id="footer" />
</div> </div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script>
</body> </body>
</html> </html>

View File

@@ -1,85 +1,36 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Reset Password Success</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<style> <link rel="stylesheet" href="./common.css">
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
span.password1 {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head> </head>
<body> <body>
<div class="logo-grid">
<div></div>
<div><img src="/wwwassets/logo.png" alt="OpenWifi"></div>
<div></div>
</div>
<h1>Password was successfully reset</h1> <div class="logo-grid">
<div> <div></div>
<h3>Thank you ${USERNAME} for resetting your password.</h3> <div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Password was successfully reset!</h2>
<div class="flex-box">
<h3>Thank you ${USERNAME} for resetting your password</h3>
</div> </div>
<div> <div class="flex-box">
<a href="${ACTION_LINK}">Click here to access the system.</a> <a href="${ACTION_LINK}">Click here to access the system</a>
</div> </div>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script>
</body> </body>
</html> </html>

View File

@@ -1,168 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
font-family: Arial,
Helvetica, sans-serif;
background-color: #ebedef;
}
.body {
background-color: #ebedef;
}
input[type=text], input[type=password] {
width: 90%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 40%;
font-size: medium;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.grid-container {
display: grid;
grid-template-columns: 15% 70% 15%;
grid-column-gap: 5px;
background-color: rgba(255, 255, 255, 0.8);
text-align: center;
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
}
.passwordtext {
float: left;
margin-left: 5%;
}
.password-input {
margin-top: 0px;
}
.rulestext {
width: 95%;
margin: auto;
display: inline-block;
text-align: left;
text-justify: none;
margin: 5px 0 5px 0;
grid-column-start: 2;
grid-column-end: 2;
}
ul {
display: inline-block;
text-align: left;
font-size: small;
}
span.password1 {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi"></div>
<div></div>
</div>
<form action="/api/v1/actionLink?action=signup_completion" method="post" onsubmit="return validatePassword()">
<input type="hidden" id="custId" name="id" value="${UUID}">
<div class="grid-container">
<h2>Signup Completion</h2>
<div class="passwordlabel">
<label class="passwordtext" for="password1" ><b>New Password</b></label>
<input className="password-input" id="password1" type="password" placeholder="Password" name="password1" pattern="${PASSWORD_VALIDATION}" required>
</div>
<div class="passwordlabel">
<label class="passwordtext" for="password2"><b>Retype Password</b></label>
<input className="password-input" id="password2" type="password" placeholder="Retype Password" name="password2" pattern="${PASSWORD_VALIDATION}" required>
</div>
<div class="passwordlabel">
<button type="submit">Complete Signup</button>
</div>
<div class="rulestext">
<ul>
<li>Must be at least 8 characters long</li>
<li>Must contain 1 uppercase letter</li>
<li>Must contain 1 lowercase letter</li>
<li>Must contain 1 digit</li>
<li>Must contain 1 special character</li>
</ul>
</div>
</div>
</form>
<script>
function validatePassword() {
if(document.getElementById("password1").value == document.getElementById("password2").value) {
return true;
} else {
alert("The 2 passwords did not match. The passwords must match to complete your signup.");
return false;
}
}
</script>
</body>
</html>

View File

@@ -1,122 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
.info-card {
padding: 30px;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
display: block;
width: 50%;
border: 1em;
background-color: white;
width: 40%;
height: auto;
margin-left: auto;
margin-right: auto;
margin-bottom: auto;
margin-top: 50px;
position: relative;
}
.info-list {
width: 80%;
margin: auto;
}
.info-title {
padding-bottom: 20px;
width: 80%;
margin: auto;
}
.body {
background-color: #ebedef;
}
span.password1 {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head>
<body class="body">
<div class="logo-grid">
<div></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi"></div>
<div></div>
</div>
<div class="info-card">
<h1 class="info-title">Signup completion failed</h1>
<div>
<h3>ID</h3>
<b>${UUID}</b>
</div>
<div>
<h3>Error</h3>
<b>${ERROR_TEXT}</b>
</div>
</div>
</body>
</html>

View File

@@ -1,84 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.logo-grid {
display: grid;
grid-template-columns: 20% 60% 20%;
}
.logo-grid > div > img {
width: 100%;
height: 100%;
object-fit: contain;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
span.password1 {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.password1 {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="/wwwassets/sub_logo.png" alt="OpenWifi"></div>
<div></div>
</div>
<h1>Signup was successfully done</h1>
<div>
<h3>Thank you ${USERNAME} for signing up for service.</h3>
</div>
<div>
You can access your account using the mobile app.
</div>
</body>
</html>

View File

@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Whoops!</title>
<link rel="stylesheet" href="./404_error.css">
</head>
<body>
<div class="box">
<div class="box__ghost">
<div class="symbol"></div>
<div class="symbol"></div>
<div class="symbol"></div>
<div class="symbol"></div>
<div class="symbol"></div>
<div class="symbol"></div>
<div class="box__ghost-container">
<div class="box__ghost-eyes">
<div class="box__eye-left"></div>
<div class="box__eye-right"></div>
</div>
<div class="box__ghost-bottom">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="box__ghost-shadow"></div>
</div>
<div class="box__description">
<div class="box__description-container">
<div class="box__description-title">Whoops!</div>
<div class="box__description-text">You know computers sometimes go crazy...</div>
<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>
</div>
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script><script>var pageX = $(document).width();
var pageY = $(document).height();
var mouseY=0;
var mouseX=0;
$(document).mousemove(function( event ) {
mouseY = event.pageY;
yAxis = (pageY/2-mouseY)/pageY*300;
mouseX = event.pageX / -pageX;
xAxis = -mouseX * 100 - 100;
$('.box__ghost-eyes').css({ 'transform': 'translate('+ xAxis +'%,-'+ yAxis +'%)' });
});
</script>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Access Policy</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Site Access rules</h2>
<ul class="info-list">
<li>Must be a TIP Member.</li>
</ul>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./sub_footer.html");
});
</script>
</body>
</html>

View File

@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Email Verification Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Email Verification Failed...</h2>
<div class="flex-box">
<h3>ID: </h3>
<b>${UUID}</b>
</div>
<div class="flex-box">
<h3>Error: </h3>
<b>${ERROR_TEXT}</b>
</div>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./sub_footer.html");
});
</script>
</body>
</html>

View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Email Validated!</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Email verification completed!</h2>
<div class="flex-box">
<h3>ID: </h3>
<b>${UUID}</b>
</div>
<div class="flex-box">
<h3>Thank you ${USERNAME} for completing email verification!</h3>
</div>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./sub_footer.html");
});
</script>
</body>
</html>

11
wwwassets/sub_footer.html Normal file
View File

@@ -0,0 +1,11 @@
<hr class="rounded">
<div class="footer">
<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>
</div>

View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Password Policy</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Password Policy</h2>
<ul class="info-list">
<li>Must be at least 8 characters long</li>
<li>Must contain 1 uppercase letter</li>
<li>Must contain 1 lowercase letter</li>
<li>Must contain 1 digit</li>
<li>Must contain 1 special character</li>
</ul>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./sub_footer.html");
});
</script>
</body>
</html>

View File

@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Reset Password</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Reset Password</h2>
<form action="/api/v1/actionLink?action=password_reset" method="post" onsubmit="return validatePassword()" class="form-container">
<div class="form-control">
<label class="form-label" for="password1" ><b>New Password</b></label>
<input class="form-input" id="password1" type="password" placeholder="New password" name="password1" pattern="${PASSWORD_VALIDATION}" required>
</div>
<div class="form-control">
<label class="form-label" for="password2"><b>Confirm New Password</b></label>
<input class="form-input" id="password2" type="password" placeholder="Enter new password again" name="password2" pattern="${PASSWORD_VALIDATION}" required>
</div>
<div class="form-control">
<button type="submit" class="form-submit-btn"><b>Reset Password</b></button>
</div>
</form>
<ul class="info-list">
<li>Must be at least 8 characters long</li>
<li>Must contain 1 uppercase letter</li>
<li>Must contain 1 lowercase letter</li>
<li>Must contain 1 digit</li>
<li>Must contain 1 special character</li>
</ul>
<div id="footer" />
</div>
<script>
const validatePassword = () => {
const password1 = document.getElementById('password1').value;
const password2 = document.getElementById('password2').value;
if(password1 === password2) {
return true;
} else {
alert("The 2 passwords did not match. The passwords must match to reset your new password.");
return false;
}
}
</script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./sub_footer.html");
});
</script>
</body>
</html>

View File

@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Reset Password Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Reset Password Failed...</h2>
<div class="flex-box">
<h3>ID: </h3>
<b>${UUID}</b>
</div>
<div class="flex-box">
<h3>Error: </h3>
<b>${ERROR_TEXT}</b>
</div>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./sub_footer.html");
});
</script>
</body>
</html>

View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Reset Password Success</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Password was successfully reset!</h2>
<div class="flex-box">
<h3>Thank you ${USERNAME} for resetting your password</h3>
</div>
<div class="flex-box">
<a href="${ACTION_LINK}">Click here to access the system</a>
</div>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./sub_footer.html");
});
</script>
</body>
</html>

View File

@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Signup Completion</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="sub_logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Signup Completion</h2>
<form action="/api/v1/actionLink?action=signup_completion" method="post" onsubmit="return validatePassword()" class="form-container">
<div class="form-control">
<label class="form-label" for="password1" ><b>New Password</b></label>
<input class="form-input" id="password1" type="password" placeholder="New password" name="password1" pattern="${PASSWORD_VALIDATION}" required>
</div>
<div class="form-control">
<label class="form-label" for="password2"><b>Confirm New Password</b></label>
<input class="form-input" id="password2" type="password" placeholder="Enter new password again" name="password2" pattern="${PASSWORD_VALIDATION}" required>
</div>
<div class="form-control">
<button type="submit" class="form-submit-btn"><b>Complete Signup</b></button>
</div>
</form>
<ul class="info-list">
<li>Must be at least 8 characters long</li>
<li>Must contain 1 uppercase letter</li>
<li>Must contain 1 lowercase letter</li>
<li>Must contain 1 digit</li>
<li>Must contain 1 special character</li>
</ul>
<div id="footer" />
</div>
<script>
const validatePassword = () => {
const password1 = document.getElementById('password1').value;
const password2 = document.getElementById('password2').value;
if(password1 === password2) {
return true;
} else {
alert("The 2 passwords did not match. The passwords must match to complete your signup");
return false;
}
}
</script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./sub_footer.html");
});
</script>
</body>
</html>

View File

@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Signup Completion Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Signup Completion Failed...</h2>
<div class="flex-box">
<h3>ID: </h3>
<b>${UUID}</b>
</div>
<div class="flex-box">
<h3>Error: </h3>
<b>${ERROR_TEXT}</b>
</div>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script>
</body>
</html>

View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Signup Completed!</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="logo-grid">
<div></div>
<div><img src="logo.png" alt="Arilia" class="logo-img"></div>
<div></div>
</div>
<div class="info-card">
<h2 class="info-title">Signup process completed</h2>
<div class="flex-box">
<b>Thank you ${USERNAME} for signing up for service!</b>
</div>
<div class="flex-box">
<b>You can now access your account using the mobile app</b>
</div>
<div id="footer" />
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(function(){
$("#footer").load("./footer.html");
});
</script>
</body>
</html>