Skip to content

Commit

Permalink
user api paths
Browse files Browse the repository at this point in the history
  • Loading branch information
Dragon1320 committed Jun 26, 2018
1 parent 0db9b74 commit f7172f9
Show file tree
Hide file tree
Showing 6 changed files with 415 additions and 188 deletions.
13 changes: 7 additions & 6 deletions src/db/schemas/session.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ const Schema = mongoose.Schema;
const SessionSchema = new Schema({

// _id: ObjectId,
nonce: String,
nonce: { type: String, default: null },
discord: {
access_token: String,
token_type: String,
expires_in: String,
refresh_token: String,
scope: String,
id: { type: String, default: null },
access_token: { type: String, default: null },
token_type: { type: String, default: null },
expires_in: { type: String, default: null },
refresh_token: { type: String, default: null },
scope: { type: String, default: null },
}
});

Expand Down
2 changes: 1 addition & 1 deletion src/db/schemas/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const UserSchema = new Schema({

// _id: ObjectId,
discord_id: { type: String, required: true, unique: true, maxlength: 18, minlength: 18 },
api_token: { type: Schema.Types.ObjectId, required: false },
admin: { type: Boolean, default: false },
scripts: [ Schema.Types.ObjectId ]
});

Expand Down
1 change: 0 additions & 1 deletion src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,4 @@ db.on("open", () => {

// do stuff
//require("./bot");
//require("./api");
require("./web");
85 changes: 85 additions & 0 deletions src/web/middlewares/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
"use strict";

const fs = require("fs");
const path = require("path");

const jwt = require("jsonwebtoken");

const schemas = require("../../db");
const Logger = require("../../logger");

const apiLogger = new Logger();

let config;
try {

config = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "..", "..", "config.json")));
} catch(err) {

apiLogger.fatalError(`Could not read config file: ${err}`);
}

// Promise wrapper for jwt.verify().
const jwtVerify = (token, secret) => {
return new Promise((resolve, reject) => {

jwt.verify(token, secret, (err, decoded) => {
if (err === null) {
return resolve(decoded);
}

reject(err);
});
});
}

// Retrieves a session from the database.
const fetchSession = (req, res, next) => {

let token = null;

if (req.cookies !== undefined && req.cookies.session !== undefined) {
token = req.cookies.session;
}

if (req.headers["xxx-access-token"] !== undefined) {
token = req.headers["xxx-access-token"];
}

if (token === null) {
return next();
}

jwtVerify(token, config.rawrxd).then(decoded => {

schemas.SessionSchema.findOne({ _id: decoded.id }).then(doc => {
if (doc === null) {
return next();
}

req.session = doc;
next();

}).catch(err => {

res.json({ status: 401, message: "Unauthorized", error: err });
});
}).catch(err => {

res.json({ status: 401, message: "Unauthorized", error: err });
});
}

// Checks if the user is logged in.
const authLogin = (req, res, next) => {
if (req.session !== undefined && req.session.discord.id !== null) {
return next();
}
res.json({ status: 403, message: "Forbidden", error: null });
}

module.exports = {

fetchSession,
authLogin
};

0 comments on commit f7172f9

Please sign in to comment.