ownerRequired.js 1.1 KB

123456789101112131415161718192021222324252627282930
  1. const cache = require('../../cache');
  2. const db = require('../../db');
  3. const stations = require('../../stations');
  4. module.exports = function(next) {
  5. return function(session, stationId) {
  6. let args = [];
  7. for (let prop in arguments) args.push(arguments[prop]);
  8. let cb = args[args.length - 1];
  9. cache.hget('sessions', session.sessionId, (err, session) => {
  10. if (err || !session || !session.userId) return cb({ status: 'failure', message: 'Login required.' });
  11. db.models.user.findOne({_id: session.userId}, (err, user) => {
  12. if (err || !user) return cb({ status: 'failure', message: 'Login required.' });
  13. if (user.role === 'admin') func();
  14. else {
  15. stations.getStation(stationId, (err, station) => {
  16. if (err || !station) return cb({ status: 'failure', message: 'Something went wrong when getting the station.' });
  17. else if (station.type === 'community' && station.owner === session.userId) func();
  18. else return cb({ status: 'failure', message: 'Invalid permissions.' });
  19. });
  20. }
  21. function func() {
  22. args.push(session.userId);
  23. next.apply(null, args);
  24. }
  25. });
  26. });
  27. }
  28. };