123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- 'use strict';
- const db = require('../models/db');
- var config = require('config');
- module.exports = (req, res, next) => {
- let spaceId = req.params.id;
- let finalizeReq = (space, role) => {
- if (role === "none") {
- res.status(403).json({
- "error": "access denied"
- });
- } else {
- req['space'] = space;
- req['spaceRole'] = role;
- res.header("x-spacedeck-space-role", req['spaceRole']);
- next();
- }
- };
- var finalizeAnonymousLogin = function(space, spaceAuth) {
- var role = "none";
- if (spaceAuth && (spaceAuth === space.edit_hash)) {
- role = "editor";
- } else {
- if (space.access_mode == "public") {
- role = "viewer";
- } else {
- role = "none";
- }
- }
- if (req.user) {
- db.getUserRoleInSpace(space, req.user, function(newRole) {
- if (newRole == "admin" && (role == "editor" || role == "viewer")) {
- finalizeReq(space, newRole);
- } else if (newRole == "editor" && (role == "viewer")) {
- finalizeReq(space, newRole);
- } else {
- finalizeReq(space, role);
- }
- });
- } else {
- finalizeReq(space, role);
- }
- };
- var userMapping = {
- '_id': 1,
- 'nickname': 1,
- 'email': 1
- };
- db.Space.findOne({where: {
- "_id": spaceId
- }}).then(function(space) {
- //.populate("creator", userMapping)
- //if (err) {
- // res.status(400).json(err);
- //} else {
- if (space) {
- if (space.access_mode == "public") {
- if (space.password) {
- if (req.spacePassword) {
- if (req.spacePassword === space.password) {
- finalizeAnonymousLogin(space, req["spaceAuth"]);
- } else {
- res.status(403).json({
- "error": "password_wrong"
- });
- }
- } else {
- res.status(401).json({
- "error": "password_required"
- });
- }
- } else {
- finalizeAnonymousLogin(space, req["spaceAuth"]);
- }
- } else {
- // space is private
-
- // special permission for screenshot/pdf export from backend
- if (req.query['api_token'] && req.query['api_token'] == config.get('phantom_api_secret')) {
- finalizeReq(space, "viewer");
- return;
- }
- if (req.user) {
- db.getUserRoleInSpace(space, req.user, function(role) {
- if (role == "none") {
- finalizeAnonymousLogin(space, req["spaceAuth"]);
- } else {
- finalizeReq(space, role);
- }
- });
- } else {
- if (req.spaceAuth && space.edit_hash) {
- finalizeAnonymousLogin(space, req["spaceAuth"]);
- } else {
- res.status(403).json({
- "error": "auth_required"
- });
- }
- }
- }
- } else {
- res.status(404).json({
- "error": "space_not_found"
- });
- }
- });
- }
|