| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- import async from "async";
 
- import moduleManager from "../../../index";
 
- const DBModule = moduleManager.modules.db;
 
- const CacheModule = moduleManager.modules.cache;
 
- const UtilsModule = moduleManager.modules.utils;
 
- const StationsModule = moduleManager.modules.stations;
 
- export default destination =>
 
- 	async function ownerRequired(session, stationId, ...args) {
 
- 		const userModel = await DBModule.runJob("GET_MODEL", { modelName: "user" }, this);
 
- 		const cb = args[args.length - 1];
 
- 		async.waterfall(
 
- 			[
 
- 				next => {
 
- 					CacheModule.runJob(
 
- 						"HGET",
 
- 						{
 
- 							table: "sessions",
 
- 							key: session.sessionId
 
- 						},
 
- 						this
 
- 					)
 
- 						.then(session => next(null, session))
 
- 						.catch(next);
 
- 				},
 
- 				(session, next) => {
 
- 					if (!session || !session.userId) return next("Login required.");
 
- 					return userModel.findOne({ _id: session.userId }, next);
 
- 				},
 
- 				(user, next) => {
 
- 					if (!user) return next("Login required.");
 
- 					if (user.role === "admin") return next(true);
 
- 					if (!stationId) return next("Please provide a stationId.");
 
- 					return StationsModule.runJob("GET_STATION", { stationId }, this)
 
- 						.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);
 
- 					return next("Invalid permissions.");
 
- 				}
 
- 			],
 
- 			async err => {
 
- 				if (err !== true) {
 
- 					err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
 
- 					this.log(
 
- 						"INFO",
 
- 						"OWNER_REQUIRED",
 
- 						`User failed to pass owner required check for station "${stationId}". "${err}"`
 
- 					);
 
- 					return cb({ status: "error", message: err });
 
- 				}
 
- 				this.log(
 
- 					"INFO",
 
- 					"OWNER_REQUIRED",
 
- 					`User "${session.userId}" passed owner required check for station "${stationId}"`,
 
- 					false
 
- 				);
 
- 				return destination.apply(this, [session, stationId].concat(args));
 
- 			}
 
- 		);
 
- 	};
 
 
  |