diff --git a/app.js b/app.js index 8052687..55c2b6d 100644 --- a/app.js +++ b/app.js @@ -12,6 +12,8 @@ const User = require('./models/users'); const indexRouter = require('./routes/index'); const signupRouter = require('./routes/signup'); const loginRouter = require('./routes/login'); +const secretPageRouter = require('./routes/secretPage'); +const adminRouter = require('./routes/admin'); const app = express(); @@ -49,13 +51,8 @@ passport.deserializeUser(async (id, done) => { app.use('/', indexRouter); app.use('/signup', signupRouter); app.use('/login', loginRouter); -app.get('/admin', async (req, res, next) => { - const user = await User.findOneAndUpdate().populate('username').exec(); - user.admin = true; - const result = await user.save(); - res.redirect('/'); - -}) +app.use('/secret', secretPageRouter); +app.use('/admin', adminRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/controllers/indexController.js b/controllers/indexController.js index ab319db..6223534 100644 --- a/controllers/indexController.js +++ b/controllers/indexController.js @@ -3,9 +3,15 @@ const User = require('../models/users'); const get_index = async (req, res) => { const posts = await Post.find().populate('author').exec() - // const user = await User.find(); - // console.log(user) - res.render('index', { title: 'Members Only | Project', user: req.user, posts: posts, admin: req.user }); + const user = await User.findById(req.user) + + if (user) { + const can_post = user.can_post; + res.render('index', { title: 'Members Only | Project', user: req.user, posts: posts, admin: req.user, canPost: can_post }); + } else { + res.render('index', { title: 'Members Only | Project', user: req.user, posts: posts, admin: req.user }) + } + } module.exports = { get_index } \ No newline at end of file diff --git a/models/users.js b/models/users.js index 83b9ed5..88c26ae 100644 --- a/models/users.js +++ b/models/users.js @@ -8,9 +8,10 @@ const UserSchema = new Schema({ email: { type: String, required: true }, username: { type: String, required: true }, password: { type: String, required: true }, + can_post: { type: Boolean, default: false }, date_created: { type: Date }, posts: [{ type: mongoose.Schema.Types.Array, ref: 'Post' }], - admin: { type: Boolean } + admin: { type: Boolean, default: false } }) UserSchema.virtual('name').get(() => { diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 2b8f447..cf8b1f0 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -30,6 +30,9 @@ a { justify-content: center; flex-direction: column; } +.banner a { + font-size: 14px; +} .links { display: flex; align-items: center; diff --git a/routes/admin.js b/routes/admin.js new file mode 100644 index 0000000..ce1d1c9 --- /dev/null +++ b/routes/admin.js @@ -0,0 +1,24 @@ +const express = require('express'); +const router = express.Router(); +const User = require('../models/users'); + +router.get('/', (req, res, next) => { + res.render('admin', { title: 'Members Only | Admin Page' }) +}) + +router.post('/', async (req, res, next) => { + const admin = process.env.ADMINCODE + + if (req.body.admincode == admin) { + await User.findByIdAndUpdate( + req.user._id, + { admin: true }, + { new: true } + ) + res.render('admin', { title: 'Members Only | Admin Page', success: 'You are now an admin.' }) + } else { + res.render('admin', { title: 'Members Only | Admin Page', success: '' }) + } +}) + +module.exports = router; \ No newline at end of file diff --git a/routes/secretPage.js b/routes/secretPage.js new file mode 100644 index 0000000..1cd2f34 --- /dev/null +++ b/routes/secretPage.js @@ -0,0 +1,25 @@ +require('dotenv').config(); +const express = require('express'); +const router = express.Router(); +const User = require('../models/users') + +router.get('/', (req, res, next) => { + res.render('secretpage', { title: 'Members Page | Secret Page', message: '' }) +}) + +router.post('/', async (req, res, next) => { + const secret = process.env.SECRET + // const getUser = req.user + if (req.body.secretcode == secret) { + await User.findByIdAndUpdate( + req.user._id, + { can_post: true }, + { new: true } + ) + res.render('secretpage', { title: 'Members Page | Secret Page', state: true, message: 'Congrats! You can post now!' }) + } else { + res.render('secretpage', { title: 'Members Page | Secret Page', state: false, message: "Sorry that's not the secret code!" }) + } +}) + +module.exports = router; \ No newline at end of file diff --git a/views/admin.pug b/views/admin.pug new file mode 100644 index 0000000..25cfcfc --- /dev/null +++ b/views/admin.pug @@ -0,0 +1,12 @@ +extends layout + +block content + h1 #{title} + h3 #{success} + + a(href="/") Home + + form(class="signup-form" method="POST") + label(for="admincode") + input(type="text" name="admincode") + button Send \ No newline at end of file diff --git a/views/index.pug b/views/index.pug index 40cd08d..6094007 100644 --- a/views/index.pug +++ b/views/index.pug @@ -6,20 +6,20 @@ block content if (user) h3(class="banner") Welcome to #{title} - #{user.username} div(class="links") - a(href="/") HOME - a(href="/logout") LOG OUT - - div - form(class="post-form" method="POST") - label(for="post") Post: - textarea(name="post" required) - button Submit + a(href="/") Home + a(href="/logout") Log Out + if (user && canPost) + div + form(class="post-form" method="POST") + label(for="post") Post: + textarea(name="post" required) + button Submit else h3(class="banner") Welcome to #{title} div(class="links") - a(href="/") HOME - a(href="/signup") SIGNUP - a(href="/login") LOGIN + a(href="/") Home + a(href="/signup") Sign Up + a(href="/login") Login div h3 Please log in if you have an existing account. h3 If not feel free to Sign up! diff --git a/views/login.pug b/views/login.pug index 0a4003d..405d7a5 100644 --- a/views/login.pug +++ b/views/login.pug @@ -4,8 +4,8 @@ block content h1 #{title} div(class="links") - a(href="/") HOME - a(href="/signup") SIGNUP + a(href="/") Home + a(href="/signup") Sign Up form(class="signup-form" action="/login" method="POST") label(for="username") Username: diff --git a/views/secretpage.pug b/views/secretpage.pug index a8ebc19..06e9535 100644 --- a/views/secretpage.pug +++ b/views/secretpage.pug @@ -4,6 +4,13 @@ block content h1 #{title} + if (state) + a(href="/") Home + h3 #{message} + else + a(href="/") Home + h3 #{message} + form(class="signup-form" method="POST") label(for="secretcode") input(type="text" name="secretcode") diff --git a/views/signup.pug b/views/signup.pug index eb3b394..e72475f 100644 --- a/views/signup.pug +++ b/views/signup.pug @@ -4,8 +4,8 @@ block content h1 #{title} div(class="links") - a(href="/") HOME - a(href="/login") LOGIN + a(href="/") Home + a(href="/login") Login form(class="signup-form" method='POST') label(for='firstname') First Name: