update
1) added html regex 2) added welcome user 3) change forgotpassword and resetpassword to ejs
This commit is contained in:
parent
a749d91425
commit
877eaeae43
@ -56,15 +56,16 @@ async function addUser(user) {
|
||||
|
||||
//api/v0/auth/login
|
||||
async function loginUser(user) {
|
||||
//console.log(user);
|
||||
//look up username or email in db
|
||||
const userRes = await userModel.findOne({
|
||||
where: {
|
||||
[Op.or]: [
|
||||
{
|
||||
username: user.userInfo,
|
||||
username: user.username,
|
||||
},
|
||||
{
|
||||
email: user.userInfo,
|
||||
email: user.username,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -37,6 +37,9 @@ function isAddress(value){
|
||||
return addressRegex.test(value);
|
||||
}
|
||||
|
||||
//generate me an regex for alpha
|
||||
//https://stackoverflow.com/questions/11522529/regexp-for-alphabets-with-spaces
|
||||
|
||||
module.exports = {
|
||||
isAlphaNumericwithSpaces,
|
||||
isAlphaNumericWithSpacesAndDash,
|
||||
|
16
consumerWebsite/modules/nodemailer.js
Normal file
16
consumerWebsite/modules/nodemailer.js
Normal file
@ -0,0 +1,16 @@
|
||||
const nodemailer = require("nodemailer");
|
||||
const dotenv = require("dotenv");
|
||||
const path = require('path')
|
||||
require('dotenv').config({ path: path.resolve(__dirname, '../.env') })
|
||||
|
||||
let transporter = nodemailer.createTransport({
|
||||
service: 'gmail',
|
||||
host: 'smtp.gmail.com',
|
||||
port: 587,
|
||||
secure: false,
|
||||
auth: {
|
||||
user:
|
||||
pass:
|
||||
},
|
||||
});
|
||||
module.exports = { transporter };
|
@ -1,224 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<!-- Fontawesome CSS -->
|
||||
<link href="css/all.css" rel="stylesheet">
|
||||
<!-- Custom styles for this template -->
|
||||
<link href="css/style.css" rel="stylesheet">
|
||||
<link href="css/contact.css" rel="stylesheet">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-light top-nav fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="index.html">
|
||||
<img src="images/logo.png" alt="logo" />
|
||||
</a>
|
||||
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse"
|
||||
data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<span class="fas fa-bars"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="news.html">News</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contactform.html">Contact</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="profile.html">Profile</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="signuplogin.html">Logout</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- full Title -->
|
||||
<div class="full-title">
|
||||
<div class="container">
|
||||
<!-- Page Heading/Breadcrumbs -->
|
||||
<h1 class="mt-4 mb-3">Contact
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="container">
|
||||
<div class="breadcrumb-main">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="index.html">Home</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Contact</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Content Row -->
|
||||
<div class="row">
|
||||
<!-- Map Column -->
|
||||
<div class="col-lg-8 mb-4">
|
||||
<!-- Embedded Google Map -->
|
||||
<iframe width="100%" height="300px" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"
|
||||
src="http://maps.google.com/maps?hl=en&ie=UTF8&q=Singapore+408866&t=m&z=15&output=embed"></iframe>
|
||||
</div>
|
||||
<!-- Contact Details Column -->
|
||||
<div class="col-lg-4 mb-4 contact-right">
|
||||
<h3>Contact Details</h3>
|
||||
<p>
|
||||
50 Ubi Ave 3
|
||||
<br>S(408866)
|
||||
<br>
|
||||
</p>
|
||||
<p>
|
||||
<abbr title="Phone">P</abbr>: (+65) 90064959
|
||||
</p>
|
||||
<p>
|
||||
<abbr title="Email">E</abbr>:
|
||||
<a href="mailto:name@example.com">leongdingxuan@gmail.com
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<abbr title="Hours">H</abbr>: Monday - Friday: 9:00 AM to 5:00 PM
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<!-- Contact Form -->
|
||||
<!-- In order to set the email address and subject line for the contact form go to the bin/contact_me.php file. -->
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mb-4 contact-left">
|
||||
<h3>Send us a Message</h3>
|
||||
<form id="form">
|
||||
<input type="hidden" name="access_key" value="">
|
||||
<div class="mb-3">
|
||||
<label for="name">Full Name</label>
|
||||
<input type="text" name="name" id="name" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="email">Email address</label>
|
||||
<input type="email" name="email" id="email" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="message">Message</label>
|
||||
<textarea name="message" id="message" rows="3" required></textarea>
|
||||
</div>
|
||||
<button type="submit">Submit Form</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
|
||||
<!--footer starts from here-->
|
||||
<footer class="footer">
|
||||
<div class="container bottom_border">
|
||||
<div class="row">
|
||||
<div class="col-lg-3 col-md-6 col-sm-6 col">
|
||||
<h5 class="headin5_amrc col_white_amrc pt2">Find us</h5>
|
||||
<p><i class="fa fa-location-arrow"></i> Blk 645 Jalan Tenaga</p>
|
||||
<p><i class="fa fa-phone"></i> +65 90064959</p>
|
||||
<p><i class="fa fa fa-envelope"></i> Leongdingxuan@gmail.com </p>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 col-sm-6 col">
|
||||
<h5 class="headin5_amrc col_white_amrc pt2">Follow us</h5>
|
||||
<!--headin5_amrc ends here-->
|
||||
<ul class="footer_ul2_amrc">
|
||||
<li>
|
||||
<a href="#"><i class="fab fa-facebook-f fleft padding-right"></i> </a>
|
||||
<a href="#">https://www.facebook.com/</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#"><i class="fab fa-instagram fleft padding-right"></i> </a>
|
||||
<a href="#">https://www.instagram.com/</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#"><i class="fab fa-twitter fleft padding-right"></i> </a>
|
||||
<a href="#">https://twitter.com/</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
<!--footer_ul2_amrc ends here-->
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 col-sm-6">
|
||||
<h5 class="headin5_amrc col_white_amrc pt2">Quick links</h5>
|
||||
<!--headin5_amrc-->
|
||||
<ul class="footer_ul_amrc">
|
||||
<li><a href="#">Home</a></li>
|
||||
<li><a href="#">News</a></li>
|
||||
<li><a href="#">Contact</a></li>
|
||||
</ul>
|
||||
<!--footer_ul_amrc ends here-->
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 col-sm-6 ">
|
||||
<h5 class="headin5_amrc col_white_amrc pt2">Recent posts</h5>
|
||||
<!--headin5_amrc-->
|
||||
<ul class="footer_ul_amrc">
|
||||
<li class="media">
|
||||
<div class="media-left">
|
||||
<img class="img-fluid" src="images/post-img-01.jpg" alt="" />
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<p>Singapore's air quality ...</p>
|
||||
<span>7 oct 2023</span>
|
||||
</div>
|
||||
</ul>
|
||||
<ul class="footer_ul_amrc">
|
||||
<li class="media">
|
||||
<div class="media-left">
|
||||
<img class="img-fluid" src="images/post-img-01.jpg" alt="" />
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<p>Singapore Government ...</p>
|
||||
<span>29 Sep 2023</span>
|
||||
</div>
|
||||
</ul>
|
||||
<ul class="footer_ul_amrc">
|
||||
<li class="media">
|
||||
<div class="media-left">
|
||||
<img class="img-fluid" src="images/post-img-01.jpg" alt="" />
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<p>High risk of severe ...</p>
|
||||
<span>22 Jun 2023</span>
|
||||
</div>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container text-center">
|
||||
<br>
|
||||
<p>All Rights Reserved. © 2023 <a href="#">EcoSaver</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Bootstrap core JavaScript -->
|
||||
<script src="vendor/jquery/jquery.min.js"></script>
|
||||
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<!-- Contact form JavaScript -->
|
||||
<script src="js/jqBootstrapValidation.js"></script>
|
||||
<script src="js/contact.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
@ -254,3 +254,7 @@ form
|
||||
color: #4eae3a;
|
||||
border-color: #4eae3a;
|
||||
}
|
||||
|
||||
a {
|
||||
color: black;
|
||||
}
|
@ -59,7 +59,7 @@ button.btn-secondary:hover{
|
||||
.navbar-expand-lg.top-nav .navbar-nav .nav-link{
|
||||
padding: 10px 15px;
|
||||
color: #4e3914;
|
||||
font-size: 14px;
|
||||
font-size: 15px;
|
||||
font-weight: 300;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
@ -1,27 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="stylesheet" href="css/forgot.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section class="wrapper">
|
||||
<div class="form">
|
||||
<header>Reset Password</header>
|
||||
<form action="resetpassword.html">
|
||||
<input type="text" id="email" placeholder="Email" required />
|
||||
<input type="password" id="password" placeholder="Password" required />
|
||||
<input type="password" id="confirmPassword" placeholder="Confirm Password" required />
|
||||
<input type="submit" onclick="validateReset()" value="Reset Password" />
|
||||
</form>
|
||||
<br>
|
||||
<a>Dont have an account?</a> <a href="signuplogin.html">Sign Up</a>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -149,42 +149,33 @@ app.auth = (function (app) {
|
||||
function setToken(token) {
|
||||
localStorage.setItem("APIToken", token);
|
||||
}
|
||||
/*
|
||||
function setUserId(userid) {
|
||||
console.log("userid", userid);
|
||||
localStorage.setItem("userid", userid);
|
||||
}
|
||||
|
||||
function setUsername(username) {
|
||||
localStorage.setItem("username", username);
|
||||
}
|
||||
*/
|
||||
|
||||
function getToken() {
|
||||
return localStorage.getItem("APIToken");
|
||||
}
|
||||
|
||||
|
||||
function isLoggedIn(callback) {
|
||||
if (getToken()) {
|
||||
return app.api.get("user/me", function (error, data) {
|
||||
if (!error) app.auth.user = data;
|
||||
$.scope.getUsername.push(data.username);
|
||||
//$.scope.getUsername.push(data);
|
||||
return callback(error, data);
|
||||
});
|
||||
} else {
|
||||
callback(null, false);
|
||||
}
|
||||
}
|
||||
/*
|
||||
function logIn(args, callback) {
|
||||
app.api.post("auth/login", args, function (error, data) {
|
||||
if (data.login) {
|
||||
setToken(data.token);
|
||||
}
|
||||
callback(error, !!data.token);
|
||||
|
||||
function showUser(){
|
||||
app.api.get("user/me", function (error, data) {
|
||||
if (!error) app.auth.user = data;
|
||||
$.scope.getUsername.push(data);
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
function logOut(callback) {
|
||||
//call logout route
|
||||
@ -228,29 +219,28 @@ app.auth = (function (app) {
|
||||
function homeRedirect() {
|
||||
window.location.href = location.href.replace(location.replace(`/`)) || "/";
|
||||
}
|
||||
|
||||
//if isLoggedin is true, redirect user away from login / register page
|
||||
/*
|
||||
function redirectIfLoggedIn() {
|
||||
$.holdReady(true);
|
||||
app.auth.isLoggedIn(function (error, isLoggedIn) {
|
||||
if (error || isLoggedIn) {
|
||||
location.replace(`/`);
|
||||
} else {
|
||||
$.holdReady(false);
|
||||
if (getToken()){
|
||||
homeRedirect();
|
||||
}
|
||||
});
|
||||
logInRedirect();
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
return {
|
||||
getToken: getToken,
|
||||
setToken: setToken,
|
||||
isLoggedIn: isLoggedIn,
|
||||
//logIn: logIn,
|
||||
logOut: logOut,
|
||||
forceLogin,
|
||||
logInRedirect,
|
||||
homeRedirect,
|
||||
redirectIfLoggedIn,
|
||||
showUser,
|
||||
//redirectIfLoggedIn,
|
||||
};
|
||||
})(app);
|
||||
|
||||
|
@ -283,9 +283,6 @@
|
||||
};
|
||||
|
||||
$( document ).ready( function(){
|
||||
console.log('jq-repeat', $.scope)
|
||||
//$.jqrepeat = $.scope
|
||||
|
||||
$( '[jq-repeat]' ).each(function(key, value){
|
||||
make(value);
|
||||
});
|
||||
|
@ -1,181 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<title>EcoSaver</title>
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<!-- Fontawesome CSS -->
|
||||
<link href="css/all.css" rel="stylesheet">
|
||||
<!-- Custom styles for this template -->
|
||||
<link href="css/style.css" rel="stylesheet">
|
||||
<link href="css/learnmore.css" rel="stylesheet">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-light top-nav fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="index.html">
|
||||
<img src="images/logo.png" alt="logo" />
|
||||
</a>
|
||||
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse"
|
||||
data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<span class="fas fa-bars"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="index.html">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="news.html">News</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contactform.html">Contact</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<!--<img src="images/profile-logo.png" alt="Profile Logo" class="profile-logo"> -->
|
||||
<a class="nav-link" href="profile.html">Profile</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="signuplogin.html">Logout</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<div id="map-container">
|
||||
<img src="images/map.png" alt="Singapore Map" id="map">
|
||||
|
||||
<!-- Information boxes for each region -->
|
||||
<div class="info-box" id="north">
|
||||
<h3>North</h3>
|
||||
<p>Air Quality Index: 15 <span id="north-aqi"></span></p>
|
||||
</div>
|
||||
|
||||
<div class="info-box" id="south">
|
||||
<h3>South</h3>
|
||||
<p>Air Quality Index: 16 <span id="south-aqi"></span></p>
|
||||
</div>
|
||||
|
||||
<div class="info-box" id="east">
|
||||
<h3>East</h3>
|
||||
<p>Air Quality Index: 16 <span id="east-aqi"></span></p>
|
||||
</div>
|
||||
|
||||
<div class="info-box" id="west">
|
||||
<h3>West</h3>
|
||||
<p>Air Quality Index: 18 <span id="west-aqi"></span></p>
|
||||
</div>
|
||||
|
||||
<div class="info-box" id="central">
|
||||
<h3>Central</h3>
|
||||
<p>Air Quality Index: 17 <span id="central-aqi"></span></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="additional-info"></div>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<!--footer starts from here-->
|
||||
<footer class="footer">
|
||||
<div class="container bottom_border">
|
||||
<div class="row">
|
||||
<div class="col-lg-3 col-md-6 col-sm-6 col">
|
||||
<h5 class="headin5_amrc col_white_amrc pt2">Find us</h5>
|
||||
<!--headin5_amrc-->
|
||||
<p><i class="fa fa-location-arrow"></i> Blk 645 Jalan Tenaga</p>
|
||||
<p><i class="fa fa-phone"></i> +65 90064959</p>
|
||||
<p><i class="fa fa fa-envelope"></i> Leongdingxuan@gmail.com </p>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 col-sm-6 col">
|
||||
<h5 class="headin5_amrc col_white_amrc pt2">Follow us</h5>
|
||||
<!--headin5_amrc ends here-->
|
||||
<ul class="footer_ul2_amrc">
|
||||
<li>
|
||||
<a href="#"><i class="fab fa-facebook-f fleft padding-right"></i> </a>
|
||||
<a href="#">https://www.facebook.com/</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#"><i class="fab fa-instagram fleft padding-right"></i> </a>
|
||||
<a href="#">https://www.instagram.com/</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#"><i class="fab fa-twitter fleft padding-right"></i> </a>
|
||||
<a href="#">https://twitter.com/</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
<!--footer_ul2_amrc ends here-->
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 col-sm-6">
|
||||
<h5 class="headin5_amrc col_white_amrc pt2">Quick links</h5>
|
||||
<!--headin5_amrc-->
|
||||
<ul class="footer_ul_amrc">
|
||||
<li><a href="#">Home</a></li>
|
||||
<li><a href="#">News</a></li>
|
||||
<li><a href="#">Contact</a></li>
|
||||
</ul>
|
||||
<!--footer_ul_amrc ends here-->
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 col-sm-6 ">
|
||||
<h5 class="headin5_amrc col_white_amrc pt2">News</h5>
|
||||
<!--headin5_amrc-->
|
||||
<ul class="footer_ul_amrc">
|
||||
<li class="media">
|
||||
<div class="media-left">
|
||||
<img class="img-fluid" src="images/post-img-01.jpg" alt="" />
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<p>Singapore's air quality ...</p>
|
||||
<span>7 oct 2023</span>
|
||||
</div>
|
||||
</ul>
|
||||
<ul class="footer_ul_amrc">
|
||||
<li class="media">
|
||||
<div class="media-left">
|
||||
<img class="img-fluid" src="images/post-img-01.jpg" alt="" />
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<p>Singapore Government ...</p>
|
||||
<span>29 Sep 2023</span>
|
||||
</div>
|
||||
</ul>
|
||||
<ul class="footer_ul_amrc">
|
||||
<li class="media">
|
||||
<div class="media-left">
|
||||
<img class="img-fluid" src="images/post-img-01.jpg" alt="" />
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<p>High risk of severe ...</p>
|
||||
<span>22 Jun 2023</span>
|
||||
</div>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container text-center">
|
||||
<br>
|
||||
<p>All Rights Reserved. © 2023 <a href="#">EcoSaver</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Bootstrap core JavaScript -->
|
||||
<script src="vendor/jquery/jquery.min.js"></script>
|
||||
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="js/learnmore.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -6,7 +6,6 @@ const router = express.Router();
|
||||
// /user/register
|
||||
router.post("/register", async (req, res, next) => {
|
||||
try {
|
||||
console.log(req.body);
|
||||
let Res = await addUser(req.body);
|
||||
if (Res == false) {
|
||||
let error = new Error("UserRegFailed");
|
||||
@ -36,7 +35,6 @@ router.post("/login", async (req, res, next) => {
|
||||
}
|
||||
else{
|
||||
//pass res back to form to be set in local storage
|
||||
console.log("my res" , Res);
|
||||
return res.json({
|
||||
message: "User login successfully",
|
||||
token: Res.token,
|
||||
@ -51,6 +49,12 @@ router.post("/login", async (req, res, next) => {
|
||||
}
|
||||
});
|
||||
|
||||
//contact
|
||||
//auth/contact
|
||||
|
||||
router.post("/contact", async (req, res, next) => {
|
||||
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
|
@ -67,8 +67,8 @@ router.get("/profile", function (req, res, next) {
|
||||
});
|
||||
|
||||
//forgot password page
|
||||
router.get("/forgotPassword", function (req, res, next) {
|
||||
res.render("forgotPassword");
|
||||
router.get("/forgotpassword", function (req, res, next) {
|
||||
res.render("forgotpassword");
|
||||
});
|
||||
|
||||
//contact page
|
||||
|
@ -7,8 +7,6 @@ const router = express.Router();
|
||||
//getbyid
|
||||
router.get("/me", async function (req, res, next) {
|
||||
try {
|
||||
|
||||
//console.log(req.user);
|
||||
let user = await getUserID(req.user);
|
||||
if (!user) {
|
||||
let error = new Error("User not found");
|
||||
@ -24,6 +22,7 @@ router.get("/me", async function (req, res, next) {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//logout
|
||||
router.delete('/logout', async function(req, res, next){
|
||||
try{
|
||||
|
@ -82,9 +82,6 @@
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Bootstrap core JavaScript -->
|
||||
<script src="vendor/jquery/jquery.min.js"></script>
|
||||
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="js/learnmore.js"></script>
|
||||
<script src="js/search.js"></script>
|
||||
<script src="js/api.js"></script>
|
||||
|
@ -11,7 +11,7 @@
|
||||
<input type="submit" onclick="validateReset()" value="Reset Password" />
|
||||
</form>
|
||||
<br>
|
||||
<a>Dont have an account?</a> <a href="signuplogin.html">Sign Up</a>
|
||||
<a>Dont have an account?</a> <a href="/login">Sign Up</a>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
@ -91,7 +91,6 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<title>EcoSaver - Your Air Quality Index Source</title>
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
|
||||
</head>
|
||||
|
||||
|
@ -27,7 +27,6 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.1/mustache.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.1/mustache.js"></script>
|
||||
|
||||
|
||||
<!-- jquery app.js -->
|
||||
<script src="js/app.js"></script>
|
||||
|
||||
@ -83,7 +82,7 @@
|
||||
</li>
|
||||
<!-- profile button -->
|
||||
<div class="form-inline mt-2 mt-md-0">
|
||||
<a id="cl-profile-button" class="btn btn-outline-danger my-2 my-sm-0" href="/profile"
|
||||
<a id="cl-profile-button" class="btn btn-outline-info my-2 my-sm-0" href="/profile"
|
||||
style="display: none;">
|
||||
<i class="fas fa-sign-out"></i>
|
||||
Profile
|
||||
|
@ -1,6 +1,7 @@
|
||||
<%- include('logintop') %>
|
||||
<script type="text/javascript">
|
||||
app.auth.redirectIfLoggedIn();
|
||||
// Require login to see this page.
|
||||
//app.auth.redirectIfLoggedIn();
|
||||
</script>
|
||||
|
||||
<body>
|
||||
@ -11,14 +12,18 @@
|
||||
<!-- localhost/api/v0/user/register -->
|
||||
<!-- evalAjax Fires when status 200 is returned -->
|
||||
<form action="auth/register" onsubmit="formAJAX(this)" evalAJAX="app.auth.logInRedirect();">
|
||||
<input type="text" name="firstname" placeholder="First Name" required />
|
||||
<input type="text" name="lastname" placeholder="Last Name" required />
|
||||
<input type="text" name="username" placeholder="Username" required />
|
||||
<input type="text" name="email" placeholder="Email" required />
|
||||
<input type="text" name="address" placeholder="Address" required />
|
||||
<input type="text" name="phone" placeholder="Phone Number" required />
|
||||
<input type="password" name="password" placeholder="Password" required />
|
||||
<input type="password" name="confirmPassword" placeholder="Confirm Password" required />
|
||||
<input type="text" name="firstname" placeholder="First Name" required pattern="^[a-zA-Z\s]+$" />
|
||||
<input type="text" name="lastname" placeholder="Last Name" required pattern="^[a-zA-Z\s]+$" />
|
||||
<input type="text" name="username" placeholder="Username" required pattern="^\w+$" />
|
||||
<input type="email" name="email" placeholder="Email" required
|
||||
pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
|
||||
<input type="text" name="address" placeholder="Address" required
|
||||
pattern="^(\d{1,3}.)?.+\s(\d{6})$" />
|
||||
<input type="text" name="phone" placeholder="Phone Number" required
|
||||
pattern="^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,8}$" />
|
||||
<input type="password" id="password" name="password" placeholder="Password" required />
|
||||
<input type="password" id="confirmPassword" name="confirmPassword" placeholder="Confirm Password"
|
||||
required />
|
||||
<input type="submit" value="Signup" />
|
||||
</form>
|
||||
</div>
|
||||
@ -29,15 +34,39 @@
|
||||
<!-- evalAjax Fires when status 200 is returned -->
|
||||
<form action="auth/login" onsubmit="formAJAX(this)" evalAJAX="app.auth.homeRedirect();
|
||||
app.auth.setToken(data.token);">
|
||||
|
||||
<input type="text" name="userInfo" placeholder="Email address | Username" required />
|
||||
<input type="text" name="username" placeholder="Email address | Username" required
|
||||
pattern="^\w+$" />
|
||||
<input type="password" name="password" placeholder="Password" required />
|
||||
<a href="/resetPassword">Forgot password?</a>
|
||||
<a href="/forgotpassword">Forgot password?</a>
|
||||
<input type="submit" value="Login" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
//both password fields must match
|
||||
var password = document.getElementById("password");
|
||||
var confirm_password = document.getElementById("confirmPassword");
|
||||
|
||||
function validatePassword() {
|
||||
var passwordValue = password.value;
|
||||
|
||||
// Strong password regex pattern
|
||||
var strongPasswordPattern = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$/;
|
||||
|
||||
if (passwordValue != confirm_password.value) {
|
||||
confirm_password.setCustomValidity("Passwords Don't Match");
|
||||
} else if (!strongPasswordPattern.test(passwordValue)) {
|
||||
confirm_password.setCustomValidity("Password must be at least 8 characters long and include at least one letter, one number, and one special character.");
|
||||
} else {
|
||||
confirm_password.setCustomValidity('');
|
||||
}
|
||||
}
|
||||
|
||||
password.onchange = validatePassword;
|
||||
confirm_password.onkeyup = validatePassword;
|
||||
|
||||
|
||||
|
||||
const wrapper = document.querySelector(".wrapper"),
|
||||
signupHeader = document.querySelector(".signup header"),
|
||||
loginHeader = document.querySelector(".login header");
|
||||
|
@ -33,10 +33,8 @@
|
||||
<!-- Mustache JS -->
|
||||
<script src="https://sso.theta42.com/static/js/mustache.min.js"></script>
|
||||
<!-- jQuery library -->
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.7.1.min.js"
|
||||
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
|
||||
|
||||
<!-- Bootstrap 5 JavaScript -->
|
||||
<script
|
||||
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
|
||||
@ -63,6 +61,7 @@
|
||||
//check if user is logged in
|
||||
app.auth.isLoggedIn(function (error, data) {
|
||||
if (data) {
|
||||
app.auth.showUser();
|
||||
$("#cl-logout-button").show("fast");
|
||||
$("#cl-profile-button").show("fast");
|
||||
$("#cl-login-button").hide("fast");
|
||||
@ -72,6 +71,7 @@
|
||||
$("body").show("fast");
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<body>
|
||||
@ -94,7 +94,7 @@
|
||||
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li jq-repeat="getUsername" class="nav-item">
|
||||
{{ username }}
|
||||
<a class="nav-link"> Welcome {{ user.username }} </a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/">Home</a>
|
||||
|
2996
package-lock.json
generated
2996
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -35,7 +35,7 @@
|
||||
"mqtt": "^5.3.3",
|
||||
"mysql2": "^3.7.1",
|
||||
"node-fetch": "^3.3.2",
|
||||
"nodemailer": "^6.9.7",
|
||||
"nodemailer": "^6.9.8",
|
||||
"otp-generator": "^4.0.1",
|
||||
"otplib": "^12.0.1",
|
||||
"qrcode": "^1.5.3",
|
||||
|
17
webserver/functions/getAPIKey.js
Normal file
17
webserver/functions/getAPIKey.js
Normal file
@ -0,0 +1,17 @@
|
||||
//model for getting API key from database
|
||||
|
||||
async function getAPIKey() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
module.exports = { getAPIKey }
|
Loading…
x
Reference in New Issue
Block a user