Initial Commit
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
const express = require("express")
|
||||
const passport = require("../middleware/passport")
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
function saveReferer(req, res, next) {
|
||||
req.session.loginReferrer = req.get("Referer")
|
||||
req.session.save()
|
||||
|
||||
next()
|
||||
}
|
||||
|
||||
// Perform the login, after login Auth0 will redirect to callback
|
||||
router.get("/login", saveReferer, passport.authenticate("auth0", {scope: "openid username profile"}), (req, res) => {
|
||||
res.redirect("/")
|
||||
})
|
||||
|
||||
router.get("/callback", passport.authenticate("auth0", { failureRedirect: "/auth/login" }), (req, res) => {
|
||||
if (req.user == null) {
|
||||
throw new Error("user null");
|
||||
}
|
||||
|
||||
res.redirect(req.session.loginReferrer || "/");
|
||||
})
|
||||
|
||||
router.get("/user", (req, res) => {
|
||||
if (req.user == null) {
|
||||
return res.status(401).json({error: {message: "Unauthorized"}})
|
||||
}
|
||||
|
||||
const name = req.user._json.name
|
||||
|
||||
// TODO: Grab data from rpdata-api user database
|
||||
|
||||
res.json({data: {
|
||||
name
|
||||
}})
|
||||
})
|
||||
|
||||
router.get("/logout", saveReferer, (req, res) => {
|
||||
req.logout()
|
||||
|
||||
res.redirect(req.session.loginReferrer || "/");
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
@@ -0,0 +1,56 @@
|
||||
const express = require("express")
|
||||
const jwt = require("jsonwebtoken")
|
||||
|
||||
const config = require("../config")
|
||||
const { query } = require("../rpdata/client")
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
router.post("/", (req, res) => {
|
||||
if (!req.header("Content-Type").startsWith("application/json")) {
|
||||
res.status(400).json({errors: [{message: "Incorrect input type, expected application/json"}]})
|
||||
return
|
||||
}
|
||||
|
||||
const user = res.locals.user
|
||||
const permissions = (req.header("X-Permissions") || "").split(",").filter(t => t != "" && t != "undefined" && t != "null")
|
||||
let authorization = req.header("Authorization")
|
||||
if (authorization == "null") {
|
||||
authorization = ""
|
||||
}
|
||||
|
||||
if (!authorization && permissions.length > 0 && user.loggedIn) {
|
||||
authorization = `Bearer ${generateToken(user.name, permissions)}`
|
||||
}
|
||||
|
||||
fetch(config.graphqlEndpoint, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": authorization,
|
||||
},
|
||||
body: JSON.stringify(req.body),
|
||||
credentials: "include",
|
||||
}).then(fetchRes => {
|
||||
res.setHeader("Content-Type", fetchRes.headers.get("Content-Type"))
|
||||
res.status(fetchRes.status)
|
||||
|
||||
return fetchRes.json()
|
||||
}).then(json => {
|
||||
res.json(json)
|
||||
}).catch(err => {
|
||||
res.status(500).text(err)
|
||||
return null
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} user
|
||||
* @param {string[]} permissions
|
||||
*/
|
||||
function generateToken(user, permissions) {
|
||||
return jwt.sign({user, permissions, exp: Math.floor((Date.now() / 1000) + 1200)}, config.backend.secret, {header: {kid: config.backend.kid}})
|
||||
}
|
||||
|
||||
module.exports = router
|
||||
@@ -0,0 +1,19 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
|
||||
const {logHeaderApi} = require("../../rpdata/api/LogHeader")
|
||||
|
||||
const listTemplate = require("../../marko/page/logs/list.marko")
|
||||
|
||||
router.get("/", async(req, res) => {
|
||||
try {
|
||||
res.markoAsync(listTemplate, {
|
||||
logs: logHeaderApi.list({limit: 0}),
|
||||
selected: {index: true},
|
||||
})
|
||||
} catch(err) {
|
||||
console.error(err)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
@@ -0,0 +1,13 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
|
||||
const {storyApi} = require("../../rpdata/api/Story")
|
||||
|
||||
const viewTemplate = require("../../marko/page/story-content/view.marko")
|
||||
|
||||
module.exports = async(req, res, next) => {
|
||||
res.markoAsync(viewTemplate, {
|
||||
story: storyApi.find(req.params.id),
|
||||
selected: {index: true},
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
|
||||
const common = require("./common")
|
||||
const {storyApi} = require("../../rpdata/api/Story")
|
||||
const {Tag} = require("../../rpdata/api/Tag")
|
||||
|
||||
const listTemplate = require("../../marko/page/story/list.marko")
|
||||
|
||||
router.get("/:category", common, async(req, res) => {
|
||||
try {
|
||||
res.markoAsync(listTemplate, {
|
||||
stories: storyApi.list({category: req.params.category}),
|
||||
selected: {category: req.params.category},
|
||||
})
|
||||
} catch(err) {
|
||||
console.error(err)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
|
||||
const common = require("./common")
|
||||
const {storyApi} = require("../../rpdata/api/Story")
|
||||
const {Tag} = require("../../rpdata/api/Tag")
|
||||
|
||||
const listTemplate = require("../../marko/page/story/list.marko")
|
||||
|
||||
router.get("/:tagkind/:tagname", common, async(req, res) => {
|
||||
try {
|
||||
const tag = new Tag(req.params.tagkind, req.params.tagname)
|
||||
|
||||
res.markoAsync(listTemplate, {
|
||||
stories: storyApi.list({tags: tag}),
|
||||
menuTags: [tag],
|
||||
selected: {tag: `${tag.kind}:${tag.name}`},
|
||||
})
|
||||
} catch(err) {
|
||||
console.error(err)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
@@ -0,0 +1,7 @@
|
||||
const {storyApi} = require("../../rpdata/api/Story")
|
||||
|
||||
module.exports = (req, res, next) => {
|
||||
res.locals.categories = storyApi.categories()
|
||||
|
||||
next()
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
|
||||
const common = require("./common")
|
||||
const {storyApi} = require("../../rpdata/api/Story")
|
||||
|
||||
const listTemplate = require("../../marko/page/story/list.marko")
|
||||
|
||||
router.get("/", common, (req, res) => {
|
||||
try {
|
||||
res.markoAsync(listTemplate, {
|
||||
stories: storyApi.list(),
|
||||
selected: {index: true},
|
||||
})
|
||||
} catch(err) {
|
||||
console.error(err)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
@@ -0,0 +1,20 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
|
||||
const common = require("./common")
|
||||
const {tagApi} = require("../../rpdata/api/Tag")
|
||||
|
||||
const tagListTemplate = require("../../marko/page/story/tag-list.marko")
|
||||
|
||||
router.get("/", common, (req, res) => {
|
||||
try {
|
||||
res.markoAsync(tagListTemplate, {
|
||||
tags: tagApi.list(),
|
||||
selected: {tags: true},
|
||||
})
|
||||
} catch(err) {
|
||||
console.error(err)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
Reference in New Issue
Block a user