diff --git a/api/check-user.ts b/api/check-user.ts index d2d7932..b9a46ee 100644 --- a/api/check-user.ts +++ b/api/check-user.ts @@ -1,21 +1,15 @@ import { NowRequest, NowResponse } from '@vercel/node'; -import { connect, connection } from 'mongoose'; +import { connection } from 'mongoose'; -import { verifyToken } from '../utils/auth'; - -const { - MONGO_USER, - MONGO_PASSWORD, -} = process.env; +import { connectDB } from '../utils/db'; +connectDB(); -connect(`mongodb+srv://${MONGO_USER}:${MONGO_PASSWORD}@cluster0.oj6kf.mongodb.net/proactive?retryWrites=true&w=majority`, { - useNewUrlParser: true, - useUnifiedTopology: true, -}); +import { verifyToken } from '../utils/auth'; export default async function (req: NowRequest, res: NowResponse) { try { let user = await verifyToken(req); + connection.close(); return res.send(user); } catch (error) { diff --git a/api/get-item.ts b/api/get-item.ts deleted file mode 100644 index e78942b..0000000 --- a/api/get-item.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { NowRequest, NowResponse } from '@vercel/node'; -import { connect } from 'mongoose'; - -import * as models from '../models/index.js'; -import { verifyToken } from '../utils/auth.js'; - -const User = models.default.User.default; -const Item = models.default.Item.default; - -const { - MONGO_USER, - MONGO_PASSWORD, -} = process.env; - -connect(`mongodb+srv://${MONGO_USER}:${MONGO_PASSWORD}@cluster0.oj6kf.mongodb.net/proactive?retryWrites=true&w=majority`, { - useNewUrlParser: true, - useUnifiedTopology: true, -}); - -export default async function (req: NowRequest, res: NowResponse) { - const user = await verifyToken(req); - - const exampleItem = await Item.findById(req.query.id); - console.log(exampleItem); - - const item = await Item.findOne({ - _id: req.query.id, - user: user, - }); - return res.status(200).send(item); -} \ No newline at end of file diff --git a/api/get-items.ts b/api/get-items.ts index 3f82c49..0ad641d 100644 --- a/api/get-items.ts +++ b/api/get-items.ts @@ -1,16 +1,19 @@ import { NowRequest, NowResponse } from '@vercel/node'; -import { connect } from 'mongoose'; +import { connection } from 'mongoose'; -const { - MONGO_USER, - MONGO_PASSWORD, -} = process.env; +import { connectDB } from '../utils/db'; +connectDB(); -connect(`mongodb+srv://${MONGO_USER}:${MONGO_PASSWORD}@cluster0.oj6kf.mongodb.net/proactive?retryWrites=true&w=majority`, { - useNewUrlParser: true, - useUnifiedTopology: true, -}); +import { Item } from '../models'; +import { verifyToken } from '../utils/auth'; export default async function (req: NowRequest, res: NowResponse) { - return res.status(200).send('Hello'); + let user = await verifyToken(req); + + let items = await Item.find({ + user, + }); + + connection.close(); + return res.status(200).send(items); } \ No newline at end of file diff --git a/api/login.ts b/api/login.ts index a91d376..2cf11d4 100644 --- a/api/login.ts +++ b/api/login.ts @@ -1,25 +1,16 @@ import { NowRequest, NowResponse } from '@vercel/node'; -import { connect, connection } from 'mongoose'; +import { connection } from 'mongoose'; -import * as models from '../models/index.js'; -import { login } from '../utils/auth.js'; +import { connectDB } from '../utils/db'; +connectDB(); -const User = models.default.User.default; - -const { - MONGO_USER, - MONGO_PASSWORD, -} = process.env; - -connect(`mongodb+srv://${MONGO_USER}:${MONGO_PASSWORD}@cluster0.oj6kf.mongodb.net/proactive?retryWrites=true&w=majority`, { - useNewUrlParser: true, - useUnifiedTopology: true, -}); +import { User } from '../models'; +import { login } from '../utils/auth'; export default async function (req: NowRequest, res: NowResponse) { try { const existingUser = await User.findOne({ - username: req.body.username + username: req.body.username, }); if (!existingUser || !await existingUser.comparePassword(req.body.password)) { diff --git a/api/register.ts b/api/register.ts new file mode 100644 index 0000000..c66343c --- /dev/null +++ b/api/register.ts @@ -0,0 +1,32 @@ +import { NowRequest, NowResponse } from '@vercel/node'; +import { connection } from 'mongoose'; + +import { connectDB } from '../utils/db'; +connectDB(); + +import { User } from '../models'; +import { register } from '../utils/auth'; + +export default async function (req: NowRequest, res: NowResponse) { + try { + const existingUser = await User.findOne({ + username: req.body.username + }); + + if (existingUser) { + return res.status(400).send('Username taken'); + } + + let user = new User({ + username: req.body.username, + password: req.body.password, + }); + + await user.save(); + + return await register(user, res, connection); + } catch (error) { + connection.close(); + return res.status(502).send(error); + } +} \ No newline at end of file diff --git a/api/sign-up.ts b/api/sign-up.ts deleted file mode 100644 index 1e0438e..0000000 --- a/api/sign-up.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { NowRequest, NowResponse } from '@vercel/node'; -import { connect, connection } from 'mongoose'; - -import * as models from '../models/index.js'; -import { login } from '../utils/auth.js'; - -const User = models.default.User.default; - -const { - MONGO_USER, - MONGO_PASSWORD, -} = process.env; - -connect(`mongodb+srv://${MONGO_USER}:${MONGO_PASSWORD}@cluster0.oj6kf.mongodb.net/proactive?retryWrites=true&w=majority`, { - useNewUrlParser: true, - useUnifiedTopology: true, -}); - -export default async function (req: NowRequest, res: NowResponse) { - try { - const existingUser = await User.findOne({ - username: req.body.username - }); - - if (existingUser) { - return res.status(400).send('Username taken...'); - } - - const user = new User({ - username: req.body.username, - password: req.body.password, - name: req.body.name, - }); - await user.save(); - - return await login(user, res, connection); - } catch (error) { - connection.close(); - return res.status(502).send(error); - } -} \ No newline at end of file diff --git a/models/Item.js b/models/Item.js index fdc124c..c3203ff 100644 --- a/models/Item.js +++ b/models/Item.js @@ -46,5 +46,4 @@ const schema = new mongoose.Schema({ }, }); -const Item = mongoose.model('Item', schema); -export default Item; \ No newline at end of file +export const Item = mongoose.model('Item', schema); diff --git a/models/User.js b/models/User.js index 98001db..2fbadb5 100644 --- a/models/User.js +++ b/models/User.js @@ -4,7 +4,7 @@ const bcrypt = require('bcrypt'); const { removeOldTokens } = require('../utils/auth'); const { - SERVER_SECRET + SALT_ROUNDS, } = process.env; const schema = new mongoose.Schema({ @@ -16,10 +16,6 @@ const schema = new mongoose.Schema({ type: String, required: true, }, - name: { - type: String, - required: true, - }, tokens: [], }); @@ -29,8 +25,7 @@ schema.pre('save', async function(next) { } try { - const salt = await bcrypt.genSalt(SERVER_SECRET); - const hash = await bcrypt.hash(this.password, salt); + const hash = await bcrypt.hashSync(this.password, parseInt(SALT_ROUNDS)); this.password = hash; next(); @@ -68,21 +63,4 @@ schema.methods.removeOldTokens = function() { this.tokens = removeOldTokens(this.tokens); } -// // middleware to validate user account -// schema.statics.verify = async function(req, res, next) { -// // look up user account -// const user = await User.findOne({ -// _id: req.user_id -// }); -// if (!user || !user.tokens.includes(req.token)) -// return res.clearCookie('token').status(403).send({ -// error: "Invalid user account." -// }); - -// req.user = user; - -// next(); -// } - -const User = mongoose.model('User', schema); -export default User; \ No newline at end of file +export const User = mongoose.model('User', schema); diff --git a/models/index.js b/models/index.js deleted file mode 100644 index 9667908..0000000 --- a/models/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const User = require('./User'); -const Item = require('./Item'); - -export default { - User: User, - Item: Item, -}; diff --git a/models/index.ts b/models/index.ts new file mode 100644 index 0000000..664f0e9 --- /dev/null +++ b/models/index.ts @@ -0,0 +1,2 @@ +export { User } from './User'; +export { Item } from './Item'; diff --git a/public/favicon.ico b/public/favicon.ico index df36fcf..98c2535 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html index bc51465..da8324f 100644 --- a/public/index.html +++ b/public/index.html @@ -5,13 +5,13 @@ -