From ffa8b5322a45486061f7aa258e6525e9c7144a1f Mon Sep 17 00:00:00 2001 From: James Shiffer Date: Thu, 11 Jun 2020 10:51:09 -0700 Subject: [PATCH] authoring restrictions --- README.md | 25 +- src/client.js | 4 +- src/components/FakeTweet.svelte | 1705 ++++++++++++++++++++++++++++++- src/components/Nav.svelte | 2 + src/models/user.js | 3 +- src/routes/cms/index.svelte | 18 +- src/server.js | 46 +- src/template.html | 6 +- static/ct.jpg | Bin 0 -> 22517 bytes webpack.config.js | 6 +- 10 files changed, 1786 insertions(+), 29 deletions(-) create mode 100644 static/ct.jpg diff --git a/README.md b/README.md index 2893d02..561a4a1 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,30 @@ A satirical blog with its own lightweight CMS, which all runs on [Sapper](https: Requires Node.js and MongoDB -Create a MongoDB database for howfeed +Create a MongoDB database for howfeed: + +```sh +$ mongo +> use howfeed; +``` Set up `.env.example` as `.env` +Then install dependencies and start a local server: + ```sh -npm i -npm run dev +$ npm i +$ npm run dev ``` + +## Usage + +Anyone can sign up for an account, but to designate a certain account as an author so they can publish articles, you will need to set the `author` field to `true` in Mongo: + +```sh +$ mongo +> use howfeed; +> db.users.updateOne({username: 'myuser1'}, {$set:{author: true}}) +``` + +Then the user should logout and log back in. diff --git a/src/client.js b/src/client.js index cec9172..7769029 100644 --- a/src/client.js +++ b/src/client.js @@ -1,5 +1,5 @@ import * as sapper from '@sapper/app'; sapper.start({ - target: document.querySelector('#sapper') -}); \ No newline at end of file + target: document.querySelector('#hydrate') +}); diff --git a/src/components/FakeTweet.svelte b/src/components/FakeTweet.svelte index 1f35fe9..f073135 100644 --- a/src/components/FakeTweet.svelte +++ b/src/components/FakeTweet.svelte @@ -3,7 +3,7 @@ export let author; export let handle; export let avatar; - export let media; + export let media = null; export let likes = 100; export let replies = 100; export let verified; @@ -20,7 +20,1708 @@
diff --git a/src/components/Nav.svelte b/src/components/Nav.svelte index 688ad7c..88e8415 100644 --- a/src/components/Nav.svelte +++ b/src/components/Nav.svelte @@ -56,6 +56,8 @@ {#if !$session.user} {:else} + +
{/if}
diff --git a/src/models/user.js b/src/models/user.js index 721bdb0..cad2bd3 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -8,7 +8,8 @@ const { Schema } = mongoose; const UserSchema = new Schema({ username: { type: String, required: true, index: { unique: true } }, password: { type: String, required: true }, - realname: { type: String, required: true } + realname: { type: String, required: true }, + author: { type: Boolean, default: false } }); diff --git a/src/routes/cms/index.svelte b/src/routes/cms/index.svelte index b6acdf7..2a9581b 100644 --- a/src/routes/cms/index.svelte +++ b/src/routes/cms/index.svelte @@ -12,9 +12,19 @@ Dashboard | HOWFEED.BIZ + +
-

HowFeed Publisher Dashboard

-

Publish a new article

-

Edit an existing article

-

Delete an article

+ {#if user.author} +

HowFeed Publisher Dashboard

+

Publish a new article

+

Edit an existing article

+

Delete an article

+ {:else} + + {/if}
diff --git a/src/server.js b/src/server.js index 52b3fa5..51c08ec 100644 --- a/src/server.js +++ b/src/server.js @@ -8,6 +8,7 @@ import mongoose from 'mongoose'; import passport from 'passport'; import { Strategy } from 'passport-local'; import sessionFileStore from 'session-file-store'; +import Article from './models/article.js'; import User from './models/user.js'; require('dotenv').config(); @@ -52,7 +53,6 @@ passport.use(new Strategy((username, password, done) => { })); express() - .use(passport.initialize()) .use(bodyParser.json()) .use(bodyParser.urlencoded({ extended: true })) .use(session({ @@ -67,9 +67,11 @@ express() path: '.sessions' }) })) + .use(passport.initialize()) + .use(passport.session()) .post('/cms/register', - (req, res, next) => { + function(req, res, next) { if (!req.user) { next(); } else { @@ -109,6 +111,15 @@ express() })); return false; } + if (!/^[a-z0-9.]+$/i.test(username)) { + res.writeHead(422, { + 'Content-Type': 'application/json' + }); + res.end(JSON.stringify({ + message: `The username can only contain letters, numbers, and periods.` + })); + return false; + } try { const user = await User.findOne({ username: req.body.username }); if (user) { @@ -167,7 +178,27 @@ express() }) .post('/cms/article', - passport.authenticate('local'), + function(req, res, next) { + if (req.user) { + if (req.user.author) { + next(); + } else { + res.writeHead(401, { + 'Content-Type': 'application/json' + }); + res.end(JSON.stringify({ + message: `You are not designated as an author.` + })); + } + } else { + res.writeHead(401, { + 'Content-Type': 'application/json' + }); + res.end(JSON.stringify({ + message: `You are not logged in` + })); + } + }, function(req, res, next) { res.writeHead(200, { 'Content-Type': 'application/json' @@ -175,15 +206,6 @@ express() res.end(JSON.stringify({ message: `ur a faget lol` })); - }, - function(err, req, res, next) { - // handle error - res.writeHead(err.status || 500, { - 'Content-Type': 'application/json' - }); - res.end(JSON.stringify({ - message: err.message - })); } ) diff --git a/src/template.html b/src/template.html index fbcfffb..b388f9d 100644 --- a/src/template.html +++ b/src/template.html @@ -3,7 +3,9 @@ - + + + %sapper.base% @@ -11,7 +13,7 @@ %sapper.head% -
%sapper.html%
+
%sapper.html%
%sapper.scripts% diff --git a/static/ct.jpg b/static/ct.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55dc0f5c624c564b48947ada53f3990d4fa5fcb8 GIT binary patch literal 22517 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�C%5HDxv#;Ri^!=FP@fwUZAN3cZH2m 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 literal 0 HcmV?d00001 diff --git a/webpack.config.js b/webpack.config.js index 9613292..1ccbda1 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -24,7 +24,7 @@ module.exports = { options: { dev, hydratable: true, - hotReload: false // pending https://github.com/sveltejs/svelte/issues/2377 + hotReload: true, } } } @@ -39,7 +39,7 @@ module.exports = { 'process.env.NODE_ENV': JSON.stringify(mode) }), ].filter(Boolean), - devtool: dev && 'inline-source-map' + devtool: dev && 'inline-source-map', }, server: { @@ -66,7 +66,7 @@ module.exports = { mode: process.env.NODE_ENV, performance: { hints: false // it doesn't matter if server.js is large - } + }, }, serviceworker: {