1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- const async = require("async");
- const moduleManager = require("../../../index");
- const db = require("../../db");
- const cache = require("../../cache");
- const utils = require("../../utils");
- const stations = require("../../stations");
- module.exports = function(next) {
- return async function(session, stationId) {
- const userModel = await db.runJob("GET_MODEL", { modelName: "user" });
- let args = [];
- for (let prop in arguments) args.push(arguments[prop]);
- let cb = args[args.length - 1];
- async.waterfall(
- [
- (next) => {
- cache
- .runJob("HGET", {
- table: "sessions",
- key: session.sessionId,
- })
- .then((session) => next(null, session))
- .catch(next);
- },
- (session, next) => {
- if (!session || !session.userId)
- return next("Login required.");
- this.session = session;
- userModel.findOne({ _id: session.userId }, next);
- },
- (user, next) => {
- if (!user) return next("Login required.");
- if (user.role === "admin") return next(true);
- stations
- .runJob("GET_STATION", { stationId })
- .then((station) => next(null, station))
- .catch(next);
- },
- (station, next) => {
- if (!station) return next("Station not found.");
- if (
- station.type === "community" &&
- station.owner === session.userId
- )
- return next(true);
- next("Invalid permissions.");
- },
- ],
- async (err) => {
- if (err !== true) {
- err = await utils.runJob("GET_ERROR", { error: err });
- console.log(
- "INFO",
- "OWNER_REQUIRED",
- `User failed to pass owner required check for station "${stationId}". "${err}"`
- );
- return cb({ status: "failure", message: err });
- }
- console.log(
- "INFO",
- "OWNER_REQUIRED",
- `User "${session.userId}" passed owner required check for station "${stationId}"`,
- false
- );
- next.apply(null, args);
- }
- );
- };
- };
|