123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- "use strict";
- var config = require('config');
- const db = require('../../models/db');
- const Sequelize = require('sequelize');
- const Op = Sequelize.Op;
- const uuidv4 = require('uuid/v4');
- var redis = require('../../helpers/redis');
- var mailer = require('../../helpers/mailer');
- var async = require('async');
- var fs = require('fs');
- var _ = require("underscore");
- var request = require('request');
- var url = require("url");
- var path = require("path");
- var glob = require('glob');
- var crypto = require('crypto');
- var express = require('express');
- var router = express.Router({mergeParams: true});
- router.get('/', function(req, res, next) {
- db.Membership
- .findAll({where: {
- space_id: req.space._id
- }, include: ['user']})
- .then(memberships => {
- res.status(200).json(memberships);
- });
- });
- router.post('/', function(req, res, next) {
- if (req.spaceRole == "admin") {
- var attrs = req.body;
- attrs.space_id = req.space._id;
- attrs.state = "pending";
- attrs._id = uuidv4();
- var membership = attrs;
-
- var msg = attrs.personal_message;
- if (membership.email_invited != req.user.email) {
- db.User.findOne({where:{
- "email": membership.email_invited
- }}).then(function(user) {
- if (user) {
- membership.user_id = user._id;
- membership.state = "active";
- } else {
- membership.code = crypto.randomBytes(64).toString('hex').substring(0, 12);
- }
- db.Membership.create(membership).then(function() {
- var accept_link = config.endpoint + "/accept/" + membership._id + "?code=" + membership.code;
- if (user) {
- accept_link = config.endpoint + "/" + req.space.space_type + "s/" + req.space._id;
- }
- var openText = req.i18n.__("space_invite_membership_action");
- if (user) {
- req.i18n.__("open");
- }
- const name = req.user.nickname || req.user.email
- const subject = (req.space.space_type == "space") ? req.i18n.__("space_invite_membership_subject", name, req.space.name) : req.i18n.__("folder_invite_membership_subject", req.user.nickname, req.space.name)
- const body = (req.space.space_type == "space") ? req.i18n.__("space_invite_membership_body", name, req.space.name) : req.i18n.__("folder_invite_membership_body", req.user.nickname, req.space.name)
- mailer.sendMail(
- membership.email_invited, subject, body, {
- messsage: msg,
- action: {
- link: accept_link,
- name: openText
- }
- });
- res.status(201).json(membership);
- });
- });
- } else {
- res.status(400).json({
- "error": "user already in space"
- });
- }
- } else {
- res.status(403).json({
- "error": "not_permitted"
- });
- }
- });
- router.put('/:membership_id', function(req, res, next) {
- if (req.user) {
- if (req.spaceRole == "admin") {
- db.Membership.findOne({ where: {
- _id: req.params.membership_id
- }}).then(function(mem) {
- if (mem) {
- var attrs = req.body;
- mem.role = attrs.role;
- mem.save(function() {
- res.status(201).json(mem);
- });
- }
- });
- } else {
- res.sendStatus(403);
- }
- } else {
- res.sendStatus(403);
- }
- });
- router.delete('/:membership_id', function(req, res, next) {
- if (req.user) {
- db.Membership.findOne({ where: {
- _id: req.params.membership_id
- }}).then(function(mem) {
- mem.destroy().then(function() {
- res.sendStatus(204);
- });
- });
- } else {
- res.sendStatus(403);
- }
- });
- module.exports = router;
|