diff --git a/.env b/.env
new file mode 100644
index 0000000..46e6f5b
--- /dev/null
+++ b/.env
@@ -0,0 +1,6 @@
+MONGO_URL=
+SECRET_COOKIE_PASSWORD=fjdk47fh48djsk3jdh8f9hdjshaj3eu4
+ROOT_DOMAIN=localhost:3000
+NEXT_PUBLIC_CLOUD_NAME=
+NEXT_PUBLIC_FOLDER_NAME=
+SITE_ENV=TEST_SITE
\ No newline at end of file
diff --git a/README.md b/README.md
index 15f194f..75d16b4 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,9 @@ Features include:
- Travel information
- RSVP forms
-## Names, Dates, Locations are all hardcoded to a value
+## Detailed Info
+
+Names, Dates, Locations are all hardcoded to a value
The site implements a basic auth with [next-iron-session](https://github.com/vvo/next-iron-session) to protect access without knowing the password to the site.
@@ -25,6 +27,9 @@ Adding, Updating, and Deleting of guests and groups is currently done manually o
This admin branch is not included yet in this example site as no roles or permissions have been set up. However, this branch does include additional pages to add, edit, and delete these guests and groups.
+*If deploying to production please remove all sections that have the following:*
+```// TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION```
+
## Tech
Overall a typical NextJS Application using ReactJS and basic authentication.
diff --git a/components/Login.js b/components/Login.js
index 1669fb7..615f252 100644
--- a/components/Login.js
+++ b/components/Login.js
@@ -136,7 +136,6 @@ const Login = () => {
>
{errorMsg &&
Error: {errorMsg}
}
- Temp password is "weddingsite". PLEASE CHANGE FOR YOUR PRODUCTION SITE!
Username
{
onChange={handleChange}
/>
+ Temp password is "weddingsite".
+ PLEASE CHANGE FOR YOUR PRODUCTION SITE!
{
return;
}
- await connectDb();
-
- // const { id: groupId } = await req.body;
- // console.log(`groupId: ${groupId}`);
+ // TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
+ // In production just await connectDB()
+ if (process.env.SITE_ENV !== 'TEST_SITE') {
+ await connectDb();
+ }
const response = {};
@@ -57,27 +58,33 @@ export default withSession(async (req, res) => {
break;
case 'POST':
try {
- const { groupId, guests, note } = body;
- for (const guest of guests) {
- // console.log(`Updating ${guest.id} with status ${guest.rsvpStatus}`);
- const guestData = await Guest.findById(guest.id);
- const accepted = guest?.rsvpStatus === 'accepted';
- guestData.rsvpStatus =
- guest?.rsvpStatus !== 'invited' ? guest?.rsvpStatus : 'invited';
- guestData.dietaryNotes = guest?.dietaryNotes;
- guestData.songRequests = guest?.songRequests;
- guestData.plusOne =
- (guestData?.hasPlusOne && guest?.plusOne && accepted) || false;
- guestData.plusOneFirstName =
- (guestData?.hasPlusOne && guest?.plusOneFirstName) || '';
- guestData.plusOneLastName =
- (guestData?.hasPlusOne && guest?.plusOneLastName) || '';
- guestData.save();
+ // TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
+ if (process.env.SITE_ENV === 'TEST_SITE') {
+ console.log('DONE!')
+ res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
+ } else {
+ const { groupId, guests, note } = body;
+ for (const guest of guests) {
+ // console.log(`Updating ${guest.id} with status ${guest.rsvpStatus}`);
+ const guestData = await Guest.findById(guest.id);
+ const accepted = guest?.rsvpStatus === 'accepted';
+ guestData.rsvpStatus =
+ guest?.rsvpStatus !== 'invited' ? guest?.rsvpStatus : 'invited';
+ guestData.dietaryNotes = guest?.dietaryNotes;
+ guestData.songRequests = guest?.songRequests;
+ guestData.plusOne =
+ (guestData?.hasPlusOne && guest?.plusOne && accepted) || false;
+ guestData.plusOneFirstName =
+ (guestData?.hasPlusOne && guest?.plusOneFirstName) || '';
+ guestData.plusOneLastName =
+ (guestData?.hasPlusOne && guest?.plusOneLastName) || '';
+ guestData.save();
+ }
+ await Group.findByIdAndUpdate(groupId, {
+ note,
+ });
+ res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
}
- await Group.findByIdAndUpdate(groupId, {
- note,
- });
- res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
} catch (error) {
const { response: fetchResponse } = error;
console.error('error', error);
diff --git a/pages/api/login.js b/pages/api/login.js
index 7205081..c970768 100644
--- a/pages/api/login.js
+++ b/pages/api/login.js
@@ -7,7 +7,11 @@ const { compare } = bcrypt;
export default withSession(async (req, res) => {
const { username, password, penguin } = await req.body;
- await connectDb();
+ // TODO: REMOVE THIS IF GOING TO PRODUCTION
+ // In production just await connectDB()
+ if (process.env.SITE_ENV !== 'TEST_SITE') {
+ await connectDb();
+ }
try {
if (username && password && penguin && penguin === 'penguin') {
@@ -15,22 +19,22 @@ export default withSession(async (req, res) => {
// TODO: REMOVE THIS IF GOING TO PRODUCTION
if (process.env.SITE_ENV === 'TEST_SITE') {
- const user = { isLoggedIn: isAuthorized, id: 'TEST_SITE_ID_123456' };
- req.session.set('user', user);
- await req.session.save();
- res.json(user);
- }
-
- const userData = await User.findOne({ username });
- const savedPassword = userData?.password || '';
- isAuthorized = await compare(password, savedPassword);
- if (isAuthorized) {
- const user = { isLoggedIn: isAuthorized, id: userData._id };
+ const user = { isLoggedIn: true, id: 'TEST_SITE_ID_123456' };
req.session.set('user', user);
await req.session.save();
res.json(user);
} else {
- res.status(400).json({ message: 'Unable to login' });
+ const userData = await User.findOne({ username });
+ const savedPassword = userData?.password || '';
+ isAuthorized = await compare(password, savedPassword);
+ if (isAuthorized) {
+ const user = { isLoggedIn: isAuthorized, id: userData._id };
+ req.session.set('user', user);
+ await req.session.save();
+ res.json(user);
+ } else {
+ res.status(400).json({ message: 'Unable to login' });
+ }
}
} else {
res.status(400).json({ message: 'Unable to login' });
diff --git a/pages/api/rsvp.js b/pages/api/rsvp.js
index 424953a..53f46b9 100644
--- a/pages/api/rsvp.js
+++ b/pages/api/rsvp.js
@@ -16,7 +16,11 @@ export default withSession(async (req, res) => {
return;
}
- // const { method } = req;
+ // TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
+ if (process.env.SITE_ENV === 'TEST_SITE') {
+ res.status(200).json({ status: 'SUCCESS', groupId: 'TESTID_12345' });
+ }
+
await connectDb();
const { firstName, lastName } = await req.body;
diff --git a/pages/rsvp/[id].js b/pages/rsvp/[id].js
index 481de4f..760c613 100644
--- a/pages/rsvp/[id].js
+++ b/pages/rsvp/[id].js
@@ -385,9 +385,30 @@ export default function SingleGroupPage({ group }) {
export async function getServerSideProps({ params }) {
try {
+ const group = {};
+
+ // TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
+ if (process.env.SITE_ENV === 'TEST_SITE') {
+ const group = {};
+ group.id = params.id;
+ group.guests = [{
+ id: 'TEST_GUEST_ID_12345',
+ firstName: 'Test',
+ lastName: 'Lastname',
+ rsvpStatus: false,
+ dietaryNotes: '',
+ songRequests: '',
+ hasPlusOne: true,
+ plusOne: false,
+ plusOneFirstName: '',
+ plusOneLastName: '',
+ }];
+ group.note = '';
+ return { props: { group } };
+ }
+
await connectDb();
const groupData = await Group.findById(params.id);
- const group = {};
group.id = params.id;
const guestList = [];