space_memberships.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. "use strict";
  2. var config = require('config');
  3. const db = require('../../models/db');
  4. const Sequelize = require('sequelize');
  5. const Op = Sequelize.Op;
  6. const uuidv4 = require('uuid/v4');
  7. var redis = require('../../helpers/redis');
  8. var mailer = require('../../helpers/mailer');
  9. var async = require('async');
  10. var fs = require('fs');
  11. var _ = require("underscore");
  12. var request = require('request');
  13. var url = require("url");
  14. var path = require("path");
  15. var glob = require('glob');
  16. var crypto = require('crypto');
  17. var express = require('express');
  18. var router = express.Router({mergeParams: true});
  19. router.get('/', function(req, res, next) {
  20. db.Membership
  21. .findAll({where: {
  22. space_id: req.space._id
  23. }, include: ['user']})
  24. .then(memberships => {
  25. res.status(200).json(memberships);
  26. });
  27. });
  28. router.post('/', function(req, res, next) {
  29. if (req.spaceRole == "admin") {
  30. var attrs = req.body;
  31. attrs.space_id = req.space._id;
  32. attrs.state = "pending";
  33. attrs._id = uuidv4();
  34. var membership = attrs;
  35. var msg = attrs.personal_message;
  36. if (membership.email_invited != req.user.email) {
  37. db.User.findOne({where:{
  38. "email": membership.email_invited
  39. }}).then(function(user) {
  40. if (user) {
  41. membership.user_id = user._id;
  42. membership.state = "active";
  43. } else {
  44. membership.code = crypto.randomBytes(64).toString('hex').substring(0, 12);
  45. }
  46. db.Membership.create(membership).then(function() {
  47. var accept_link = config.endpoint + "/accept/" + membership._id + "?code=" + membership.code;
  48. if (user) {
  49. accept_link = config.endpoint + "/" + req.space.space_type + "s/" + req.space._id;
  50. }
  51. var openText = req.i18n.__("space_invite_membership_action");
  52. if (user) {
  53. req.i18n.__("open");
  54. }
  55. const name = req.user.nickname || req.user.email
  56. 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)
  57. 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)
  58. mailer.sendMail(
  59. membership.email_invited, subject, body, {
  60. messsage: msg,
  61. action: {
  62. link: accept_link,
  63. name: openText
  64. }
  65. });
  66. res.status(201).json(membership);
  67. });
  68. });
  69. } else {
  70. res.status(400).json({
  71. "error": "user already in space"
  72. });
  73. }
  74. } else {
  75. res.status(403).json({
  76. "error": "not_permitted"
  77. });
  78. }
  79. });
  80. router.put('/:membership_id', function(req, res, next) {
  81. if (req.user) {
  82. if (req.spaceRole == "admin") {
  83. db.Membership.findOne({ where: {
  84. _id: req.params.membership_id
  85. }}).then(function(mem) {
  86. if (mem) {
  87. var attrs = req.body;
  88. mem.role = attrs.role;
  89. mem.save(function() {
  90. res.status(201).json(mem);
  91. });
  92. }
  93. });
  94. } else {
  95. res.sendStatus(403);
  96. }
  97. } else {
  98. res.sendStatus(403);
  99. }
  100. });
  101. router.delete('/:membership_id', function(req, res, next) {
  102. if (req.user) {
  103. db.Membership.findOne({ where: {
  104. _id: req.params.membership_id
  105. }}).then(function(mem) {
  106. mem.destroy().then(function() {
  107. res.sendStatus(204);
  108. });
  109. });
  110. } else {
  111. res.sendStatus(403);
  112. }
  113. });
  114. module.exports = router;