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

-

- This page uses{' '} - - Static Generation (SG) - {' '} - and the /api/user route (using{' '} - SWR) -

- -

- 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

-

- This page uses{' '} - - Server-side Rendering (SSR) - {' '} - and{' '} - - getServerSideProps - -

- - {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() {
  1. Question 1
  2. -

    - Answer 1 -

    +

    Answer 1

  3. How do I get to the venue?
  4. 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: