diff --git a/components/Event.js b/components/Event.js
index 908a81e..44c9a8b 100644
--- a/components/Event.js
+++ b/components/Event.js
@@ -46,24 +46,31 @@ export default function Event({ event }) {
{showSchedule &&
scheduleEvents &&
- scheduleEvents.map(({ name, start, end, venueName }) => (
-
-
- {start && (
-
- {start}
- {end && ` - {end}`}
-
- )}
-
-
- {name &&
{name}
}
- {venueName && (
-
- )}
-
-
- ))}
+ scheduleEvents.map(
+ ({
+ name: eventName,
+ start: eventStart,
+ end: eventEnd,
+ venueName: eventVenueName,
+ }) => (
+
+
+ {eventStart && (
+
+ {eventStart}
+ {eventEnd && ` - {end}`}
+
+ )}
+
+
+ {eventName &&
{eventName}
}
+ {eventVenueName && (
+
+ )}
+
+
+ )
+ )}
);
}
diff --git a/components/Layout.js b/components/Layout.js
index ad22017..f34889a 100644
--- a/components/Layout.js
+++ b/components/Layout.js
@@ -7,6 +7,9 @@ const Layout = ({ children }) => (
NN By the Sea
+
{children}
diff --git a/components/WeddingStart.js b/components/WeddingStart.js
index 57d2482..048b34c 100644
--- a/components/WeddingStart.js
+++ b/components/WeddingStart.js
@@ -18,5 +18,7 @@ export default function WeddingStart() {
update: 60000,
});
- return <>{timeAsDays}>;
+ return (
+ {timeAsDays}
+ );
}
diff --git a/package-lock.json b/package-lock.json
index a9e83d2..04aa790 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2056,36 +2056,6 @@
}
}
},
- "node_modules/@next/swc-darwin-arm64": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-11.1.2.tgz",
- "integrity": "sha512-hZuwOlGOwBZADA8EyDYyjx3+4JGIGjSHDHWrmpI7g5rFmQNltjlbaefAbiU5Kk7j3BUSDwt30quJRFv3nyJQ0w==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.2.tgz",
- "integrity": "sha512-PGOp0E1GisU+EJJlsmJVGE+aPYD0Uh7zqgsrpD3F/Y3766Ptfbe1lEPPWnRDl+OzSSrSrX1lkyM/Jlmh5OwNvA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@next/swc-linux-x64-gnu": {
"version": "11.1.2",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.2.tgz",
@@ -2101,21 +2071,6 @@
"node": ">= 10"
}
},
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.2.tgz",
- "integrity": "sha512-e/pIKVdB+tGQYa1cW3sAeHm8gzEri/HYLZHT4WZojrUxgWXqx8pk7S7Xs47uBcFTqBDRvK3EcQpPLf3XdVsDdg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@node-rs/helper": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.2.1.tgz",
@@ -4857,19 +4812,6 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -9943,30 +9885,12 @@
"integrity": "sha512-hsoJmPfhVqjZ8w4IFzoo8SyECVnN+8WMnImTbTKrRUHOVJcYMmKLL7xf7T0ft00tWwAl/3f3Q3poWIN2Ueql/Q==",
"requires": {}
},
- "@next/swc-darwin-arm64": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-11.1.2.tgz",
- "integrity": "sha512-hZuwOlGOwBZADA8EyDYyjx3+4JGIGjSHDHWrmpI7g5rFmQNltjlbaefAbiU5Kk7j3BUSDwt30quJRFv3nyJQ0w==",
- "optional": true
- },
- "@next/swc-darwin-x64": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.2.tgz",
- "integrity": "sha512-PGOp0E1GisU+EJJlsmJVGE+aPYD0Uh7zqgsrpD3F/Y3766Ptfbe1lEPPWnRDl+OzSSrSrX1lkyM/Jlmh5OwNvA==",
- "optional": true
- },
"@next/swc-linux-x64-gnu": {
"version": "11.1.2",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.2.tgz",
"integrity": "sha512-YcDHTJjn/8RqvyJVB6pvEKXihDcdrOwga3GfMv/QtVeLphTouY4BIcEUfrG5+26Nf37MP1ywN3RRl1TxpurAsQ==",
"optional": true
},
- "@next/swc-win32-x64-msvc": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.2.tgz",
- "integrity": "sha512-e/pIKVdB+tGQYa1cW3sAeHm8gzEri/HYLZHT4WZojrUxgWXqx8pk7S7Xs47uBcFTqBDRvK3EcQpPLf3XdVsDdg==",
- "optional": true
- },
"@node-rs/helper": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.2.1.tgz",
@@ -12063,12 +11987,6 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "optional": true
- },
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
diff --git a/package.json b/package.json
index 37ceaf2..106b239 100644
--- a/package.json
+++ b/package.json
@@ -56,7 +56,10 @@
"eslintConfig": {
"extends": [
"wesbos"
- ]
+ ],
+ "rules": {
+ "react/prop-types": 0
+ }
},
"//": "This is our babel config, I prefer this over a .babelrc file",
"babel": {
diff --git a/pages/404.js b/pages/404.js
index 7639026..539f84b 100644
--- a/pages/404.js
+++ b/pages/404.js
@@ -8,7 +8,7 @@ export default function FourOhFourPage() {
Sorry page not found!
404.
- You just hit a route that doesn't exist.
+ You just hit a route that doesn't exist.
>
);
}
diff --git a/pages/_document.js b/pages/_document.js
index fbf7673..8b251bc 100644
--- a/pages/_document.js
+++ b/pages/_document.js
@@ -4,8 +4,8 @@ import { ServerStyleSheet } from 'styled-components';
export default class MyDocument extends Document {
static getInitialProps({ renderPage }) {
const sheet = new ServerStyleSheet();
- const page = renderPage((App) => (props) =>
- sheet.collectStyles()
+ const page = renderPage(
+ (App) => (props) => sheet.collectStyles()
);
const styleTags = sheet.getStyleElement();
return { ...page, styleTags };
diff --git a/pages/api/group.js b/pages/api/group.js
index c3c71ad..ae7ecb3 100644
--- a/pages/api/group.js
+++ b/pages/api/group.js
@@ -1,3 +1,4 @@
+import escape from 'escape-html';
import withSession from '../../lib/session';
import Group from '../../models/Group';
import Guest from '../../models/Guest';
@@ -60,7 +61,7 @@ export default withSession(async (req, res) => {
try {
// TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
if (process.env.SITE_ENV === 'TEST_SITE') {
- console.log('DONE!')
+ console.log('DONE!');
res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
} else {
const { groupId, guests, note } = body;
@@ -70,8 +71,8 @@ export default withSession(async (req, res) => {
const accepted = guest?.rsvpStatus === 'accepted';
guestData.rsvpStatus =
guest?.rsvpStatus !== 'invited' ? guest?.rsvpStatus : 'invited';
- guestData.dietaryNotes = guest?.dietaryNotes;
- guestData.songRequests = guest?.songRequests;
+ guestData.dietaryNotes = escape(guest?.dietaryNotes);
+ guestData.songRequests = escape(guest?.songRequests);
guestData.plusOne =
(guestData?.hasPlusOne && guest?.plusOne && accepted) || false;
guestData.plusOneFirstName =
@@ -81,7 +82,7 @@ export default withSession(async (req, res) => {
guestData.save();
}
await Group.findByIdAndUpdate(groupId, {
- note,
+ note: escape(note),
});
res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
}
diff --git a/pages/api/login.js b/pages/api/login.js
index c970768..3524cec 100644
--- a/pages/api/login.js
+++ b/pages/api/login.js
@@ -1,4 +1,5 @@
import bcrypt from 'bcryptjs';
+import escape from 'escape-html';
import withSession from '../../lib/session';
import connectDb from '../../utils/db';
import User from '../../models/User';
@@ -14,7 +15,7 @@ export default withSession(async (req, res) => {
}
try {
- if (username && password && penguin && penguin === 'penguin') {
+ if (username && password && penguin && escape(penguin) === 'penguin') {
let isAuthorized = false;
// TODO: REMOVE THIS IF GOING TO PRODUCTION
@@ -24,7 +25,7 @@ export default withSession(async (req, res) => {
await req.session.save();
res.json(user);
} else {
- const userData = await User.findOne({ username });
+ const userData = await User.findOne({ username: escape(username) });
const savedPassword = userData?.password || '';
isAuthorized = await compare(password, savedPassword);
if (isAuthorized) {
diff --git a/pages/api/rsvp.js b/pages/api/rsvp.js
index cd38d54..a145ac2 100644
--- a/pages/api/rsvp.js
+++ b/pages/api/rsvp.js
@@ -1,3 +1,4 @@
+import escape from 'escape-html';
import withSession from '../../lib/session';
import connectDb from '../../utils/db.js';
import Guest from '../../models/Guest';
@@ -25,8 +26,8 @@ export default withSession(async (req, res) => {
try {
const result = await Guest.findOne({
- firstName: { $regex: new RegExp(firstName.trim(), 'i') },
- lastName: { $regex: new RegExp(lastName.trim(), 'i') },
+ firstName: { $regex: new RegExp(escape(firstName.trim()), 'i') },
+ lastName: { $regex: new RegExp(escape(lastName.trim()), 'i') },
});
// console.log(JSON.stringify(result));
res.status(200).json({ status: 'SUCCESS', groupId: result.group });
diff --git a/pages/party.js b/pages/party.js
index 4071f9a..ccc787a 100644
--- a/pages/party.js
+++ b/pages/party.js
@@ -129,13 +129,13 @@ export default function PartyPage() {
{weddingParty.map((party, index) => (
{party.name}
-
+
{party.title}
))}
diff --git a/pages/profile-sg.js b/pages/profile-sg.js
deleted file mode 100644
index 66fa246..0000000
--- a/pages/profile-sg.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import useUser from '../lib/useUser'
-import Layout from '../components/Layout'
-
-const SgProfile = () => {
- const { user } = useUser({ redirectTo: '/login' })
-
- if (!user || user.isLoggedIn === false) {
- return Loading...
- }
-
- return (
-
- Your GitHub profile
-
-
-
- Public data, from{' '}
- {githubUrl(user.login)}, reduced to
- `login` and `avatar_url`.
-
- {JSON.stringify(user, null, 2)}
-
- )
-}
-
-function githubUrl(login) {
- return `https://api.github.com/users/${login}`
-}
-
-export default SgProfile
diff --git a/pages/profile-ssr.js b/pages/profile-ssr.js
deleted file mode 100644
index abab3e8..0000000
--- a/pages/profile-ssr.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import PropTypes from 'prop-types';
-import Layout from '../components/Layout';
-import withSession from '../lib/session';
-
-const SsrProfile = ({ user }) => (
-
- Your GitHub profile
-
-
- {user?.isLoggedIn && (
- <>
-
- Public data, from{' '}
- {githubUrl(user.login)}, reduced
- to `login` and `avatar_url`.
-
- {JSON.stringify(user, null, 2)}
- >
- )}
-
-);
-
-export const getServerSideProps = withSession(async ({ req, res }) => {
- const user = req.session.get('user');
-
- if (!user) {
- return {
- redirect: {
- destination: '/login',
- permanent: false,
- },
- };
- }
-
- return {
- props: { user: req.session.get('user') },
- };
-});
-
-export default SsrProfile;
-
-function githubUrl(login) {
- return `https://api.github.com/users/${login}`;
-}
-
-SsrProfile.propTypes = {
- user: PropTypes.shape({
- isLoggedIn: PropTypes.bool,
- login: PropTypes.string,
- avatarUrl: PropTypes.string,
- }),
-};
diff --git a/pages/qanda.js b/pages/qanda.js
index 3ba27b3..a986dc3 100644
--- a/pages/qanda.js
+++ b/pages/qanda.js
@@ -36,9 +36,7 @@ export default function QandAPage() {
- Question 1
-
- Answer 1
-
+ Answer 1
- How do I get to the venue?
See more detailed info on our{' '}
diff --git a/pages/rsvp/[id].js b/pages/rsvp/[id].js
index d10941c..cc05600 100644
--- a/pages/rsvp/[id].js
+++ b/pages/rsvp/[id].js
@@ -297,7 +297,7 @@ export default function SingleGroupPage({ group }) {
gap: '1rem',
}}
>
- {group.guests.map((guest) =>
+ {group?.guests?.map((guest) =>
!guest.isPlusOne ? (
@@ -329,7 +329,7 @@ export default function SingleGroupPage({ group }) {
gap: '1rem',
}}
>
- {group.guests.map((guest) =>
+ {group?.guests?.map((guest) =>
!guest?.isPlusOne ? (
diff --git a/pages/travelstay.js b/pages/travelstay.js
index 9730ddf..c983552 100644
--- a/pages/travelstay.js
+++ b/pages/travelstay.js
@@ -78,9 +78,7 @@ export default function TravelAndStayPage() {
Hotel Information
Do I need to book a hotel room?
-
- Answer
-
+
Answer
There are also hotels in the area such as: