mirror of
https://github.com/spacedeck/spacedeck-open.git
synced 2025-12-15 17:37:30 +01:00
Allow embedding of folders and access to folders to anonymous editors with edit_hash/spaceAuth links (#63)
* add subspaces to be listed with edit_hash/spaceAuth authorization * remove dead code from api_helpers.js * add edit_hash authorization for requested space thumbnails * handle /s/:hash links in frontend router * set space_auth via a function, allow passing it to load_space * rename variable in /s/:hash router in backend * hide search, profile, breadcrumb in folders if not logged in, construct links to subspaces differently for anonymous editors
This commit is contained in:
@@ -42,7 +42,52 @@ var spaceMapping = {
|
||||
thumbnail_url: 1
|
||||
};
|
||||
|
||||
function listSpacesInFolder(req, res, parent_space_id) {
|
||||
db.Space
|
||||
.findOne({where: {
|
||||
_id: parent_space_id
|
||||
}})
|
||||
.then(function(space) {
|
||||
if (space) {
|
||||
function spacesForRole(role) {
|
||||
if (role == "none") {
|
||||
if (space.access_mode == "public") {
|
||||
role = "viewer";
|
||||
}
|
||||
}
|
||||
if (role != "none") {
|
||||
db.Space
|
||||
.findAll({where:{
|
||||
parent_space_id: parent_space_id
|
||||
}, include:[db.CreatorSafeInclude(db)]})
|
||||
.then(function(spaces) {
|
||||
res.status(200).json(spaces);
|
||||
});
|
||||
} else {
|
||||
res.status(403).json({"error": "not authorized"});
|
||||
}
|
||||
}
|
||||
|
||||
if (req["spaceAuth"] && space.edit_hash) {
|
||||
// TODO could be editor, too
|
||||
spacesForRole("none");
|
||||
} else {
|
||||
db.getUserRoleInSpace(space, req.user, spacesForRole);
|
||||
}
|
||||
} else {
|
||||
res.status(404).json({"error": "space not found"});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
router.get('/', function(req, res, next) {
|
||||
|
||||
if (req.query.parent_space_id && req["spaceAuth"]) {
|
||||
// list subspaces of a space authorized anonymously
|
||||
listSpacesInFolder(req, res, req.query.parent_space_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!req.user) {
|
||||
res.status(403).json({
|
||||
error: "auth required"
|
||||
@@ -83,36 +128,7 @@ router.get('/', function(req, res, next) {
|
||||
} else if (req.query.parent_space_id && req.query.parent_space_id != req.user.home_folder_id) {
|
||||
// list spaces in a folder
|
||||
|
||||
db.Space
|
||||
.findOne({where: {
|
||||
_id: req.query.parent_space_id
|
||||
}})
|
||||
.then(function(space) {
|
||||
if (space) {
|
||||
db.getUserRoleInSpace(space, req.user, function(role) {
|
||||
if (role == "none") {
|
||||
if (space.access_mode == "public") {
|
||||
role = "viewer";
|
||||
}
|
||||
}
|
||||
|
||||
if (role != "none") {
|
||||
db.Space
|
||||
.findAll({where:{
|
||||
parent_space_id: req.query.parent_space_id
|
||||
}, include:[db.CreatorSafeInclude(db)]})
|
||||
.then(function(spaces) {
|
||||
res.status(200).json(spaces);
|
||||
});
|
||||
} else {
|
||||
res.status(403).json({"error": "no authorized"});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
res.status(404).json({"error": "space not found"});
|
||||
}
|
||||
});
|
||||
|
||||
listSpacesInFolder(req, res, req.query.parent_space_id);
|
||||
} else {
|
||||
// list home folder and spaces/folders that the user is a member of
|
||||
|
||||
|
||||
@@ -115,16 +115,16 @@ router.get('/t/:id', (req, res) => {
|
||||
res.redirect(path);
|
||||
});
|
||||
|
||||
router.get('/s/:token', (req, res) => {
|
||||
var token = req.params.token;
|
||||
if (token.split("-").length > 0) {
|
||||
token = token.split("-")[0];
|
||||
router.get('/s/:hash', (req, res) => {
|
||||
var hash = req.params.hash;
|
||||
if (hash.split("-").length > 0) {
|
||||
hash = hash.split("-")[0];
|
||||
}
|
||||
|
||||
db.Space.findOne({where: {"edit_hash": token}}).then(function (space) {
|
||||
db.Space.findOne({where: {"edit_hash": hash}}).then(function (space) {
|
||||
if (space) {
|
||||
if (req.accepts('text/html')){
|
||||
res.redirect("/spaces/"+space._id + "?spaceAuth=" + token);
|
||||
res.redirect("/spaces/"+space._id + "?spaceAuth=" + hash);
|
||||
} else {
|
||||
res.status(200).json(space);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user