backend.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. var api_endpoint = ENV.apiEndpoint;
  2. var api_socket_endpoint = ENV.websocketsEndpoint;
  3. var api_token = null;
  4. var websocket = null;
  5. var channel_id = null;
  6. var space_auth = null;
  7. function load_resource(method, path, data, on_success, on_error, on_progress) {
  8. var req = new XMLHttpRequest();
  9. req.onload = function(evt,b,c) {
  10. if (req.status>=200 && req.status<=299) {
  11. var parsed = null;
  12. try {
  13. var parsed = JSON.parse(req.response);
  14. } catch(e) {};
  15. if (data && parsed && parsed._id) {
  16. // mutate the local object and update its _id
  17. data._id = parsed._id;
  18. }
  19. if (on_success) {
  20. on_success(parsed,req);
  21. }
  22. } else {
  23. if (on_error) {
  24. on_error(req);
  25. }
  26. }
  27. };
  28. req.onerror = function(err) {
  29. console.log(err,err.target);
  30. // window._spacedeck_location_change is a flag set by redirect / reload functions
  31. if (!window._spacedeck_location_change) {
  32. if (window.spacedeck && window.spacedeck.active_space) {
  33. window.spacedeck.offline = true;
  34. } else {
  35. alert("Could not connect to Spacedeck. Please reconnect and try again.");
  36. }
  37. }
  38. if (on_error) on_error(req);
  39. }
  40. req.withCredentials = true;
  41. req.open(method, api_endpoint+"/api"+path, true);
  42. if (api_token) {
  43. req.setRequestHeader("X-Spacedeck-Auth", api_token);
  44. }
  45. if (space_auth) {
  46. console.log("set space auth", space_auth);
  47. req.setRequestHeader("X-Spacedeck-Space-Auth", space_auth);
  48. }
  49. if (channel_id) {
  50. req.setRequestHeader("X-Spacedeck-Channel", channel_id);
  51. }
  52. if (csrf_token) {
  53. req.setRequestHeader("X-csrf-token", csrf_token);
  54. }
  55. try {
  56. if (data) {
  57. if (data.toString() == "[object File]") {
  58. req.setRequestHeader("Content-type", data.type);
  59. req.setRequestHeader("Accepts", "application/json");
  60. req.upload.onprogress = function(e) {
  61. console.log("upload progress: ",e.loaded,e.total);
  62. if (on_progress) on_progress(e);
  63. }
  64. req.send(data);
  65. } else {
  66. req.setRequestHeader("Content-type", "application/json");
  67. req.send(JSON.stringify(data));
  68. }
  69. } else {
  70. req.send();
  71. }
  72. } catch (e) {
  73. if (on_error) {
  74. on_error(req, e);
  75. } else {
  76. throw(e);
  77. }
  78. }
  79. }
  80. function get_resource(path, on_success, on_error, on_progress) {
  81. load_resource("get", path, null, on_success, on_error, on_progress);
  82. }
  83. function load_profile(name, on_success, on_error) {
  84. load_resource("get", "/users/slug?slug="+name, null, on_success, on_error);
  85. }
  86. function load_current_user(on_success, on_error) {
  87. load_resource("get", "/users/current", null, on_success, on_error);
  88. }
  89. function load_space(id, on_success, on_error) {
  90. if (!id || id=="undefined") {
  91. console.error("load_space id:", id);
  92. return;
  93. }
  94. var url = "/spaces/"+id;
  95. load_resource("get", url, null, function(space, req) {
  96. var role = req.getResponseHeader("x-spacedeck-space-role");
  97. on_success(space, role);
  98. }, on_error);
  99. }
  100. function load_space_path(id, on_success, on_error) {
  101. var url = "/spaces/"+id+"/path";
  102. load_resource("get", url, null, function(space, req) {
  103. on_success(space);
  104. }, on_error);
  105. }
  106. function load_spaces(id, is_home, on_success, on_error) {
  107. if (!id || id=="undefined") {
  108. console.error("load_spaces id:", id);
  109. return;
  110. }
  111. var q = "?parent_space_id="+id;
  112. load_resource("get", "/spaces"+q, null, function(spaces) {
  113. on_success(spaces);
  114. }, on_error);
  115. }
  116. function load_importables(user, on_success, on_error) {
  117. load_resource("get", "/users/"+user._id+"/importables", null, on_success, on_error);
  118. }
  119. function import_zip(user, filename, on_success, on_error) {
  120. load_resource("get", "/users/"+user._id+"/import?zip="+filename, null, on_success, on_error);
  121. }
  122. function load_writable_folders(on_success, on_error) {
  123. load_resource("get", "/spaces?writablefolders=true", null, on_success, on_error);
  124. }
  125. function load_history(s, on_success, on_error) {
  126. load_resource("get", "/spaces/"+ s._id +"/digest", null, on_success, on_error);
  127. }
  128. function load_filtered_spaces(filter, on_success, on_error) {
  129. load_resource("get", "/spaces?filter="+filter, null, on_success, on_error);
  130. }
  131. function load_spaces_search(query, on_success, on_error) {
  132. load_resource("get", "/spaces?search="+query, null, on_success, on_error);
  133. }
  134. function load_artifacts(id, on_success, on_error) {
  135. load_resource("get", "/spaces/"+id+"/artifacts", null, on_success, on_error);
  136. }
  137. function save_artifact(a, on_success, on_error) {
  138. if (a._id) {
  139. load_resource("put", "/spaces/"+a.space_id+"/artifacts/"+a._id,a,on_success,on_error);
  140. } else {
  141. load_resource("post", "/spaces/"+a.space_id+"/artifacts",a,on_success,on_error);
  142. }
  143. }
  144. function save_pdf_file(space, point, file, zones, on_success, on_error, on_progress) {
  145. load_resource("post", "/spaces/"+space._id+"/artifacts-pdf?filename="+file.name + "&x="+point.x+"&y="+point.y + "&zones="+zones,file,on_success,on_error,on_progress);
  146. }
  147. function save_artifact_file(a, file,filename, on_success, on_error, on_progress) {
  148. load_resource("post", "/spaces/"+a.space_id+"/artifacts/"+a._id+"/payload?filename="+filename,file,on_success,on_error,on_progress);
  149. }
  150. function save_space(s, on_success, on_error) {
  151. if (s._id) {
  152. delete s['artifacts'];
  153. load_resource("put", "/spaces/"+s._id,s,on_success,on_error);
  154. } else {
  155. load_resource("post", "/spaces",s,on_success,on_error);
  156. }
  157. }
  158. function delete_space(s, on_success, on_error) {
  159. load_resource("delete", "/spaces/"+s._id, null, on_success, on_error);
  160. }
  161. function delete_artifact(a, on_success, on_error) {
  162. load_resource("delete", "/spaces/"+a.space_id+"/artifacts/"+a._id);
  163. }
  164. function duplicate_space(s, to_space_id, on_success, on_error) {
  165. var path = "/spaces/"+s._id+"/duplicate";
  166. if(to_space_id) {
  167. path += "?parent_space_id=" + to_space_id
  168. }
  169. load_resource("post", path, null,on_success,on_error);
  170. }
  171. function load_members(space, on_success, on_error) {
  172. load_resource("get", "/spaces/"+ space._id +"/memberships", null, on_success, on_error);
  173. }
  174. function create_membership(space, m, on_success, on_error) {
  175. load_resource("post", "/spaces/"+ space._id +"/memberships", m, on_success, on_error);
  176. }
  177. function save_membership(space, m, on_success, on_error) {
  178. load_resource("put", "/spaces/"+ space._id +"/memberships/" + m._id, m, on_success, on_error);
  179. }
  180. function delete_membership(space, m, on_success, on_error) {
  181. load_resource("delete", "/spaces/"+ space._id +"/memberships/"+m._id, m, on_success, on_error);
  182. }
  183. function accept_invitation(id, code, on_success, on_error) {
  184. load_resource("get", "/memberships/"+ id +"/accept?code="+code, null, on_success, on_error);
  185. }
  186. function get_join_link(space_id, on_success, on_error) {
  187. load_resource("get", "/invitation_codes?space_id="+space_id, null, on_success, on_error);
  188. }
  189. function create_join_link(space_id, role, on_success, on_error) {
  190. load_resource("post", "/invitation_codes", {join_role:role, sticky:true, space_id:space_id}, on_success, on_error);
  191. }
  192. function delete_join_link(link_id, on_success, on_error) {
  193. load_resource("delete", "/invitation_codes/"+link_id, null, on_success, on_error);
  194. }
  195. function load_team_members(id, on_success, on_error) {
  196. load_resource("get", "/teams/"+ id +"/memberships", null, function(team) {
  197. on_success(team);
  198. }, on_error);
  199. }
  200. function save_avatar_file(type, o, file, on_success, on_error) {
  201. load_resource("post", "/"+type+"s/"+o._id+"/avatar", file, on_success,on_error);
  202. }
  203. function remove_avatar_file(type, o, on_success, on_error) {
  204. load_resource("delete", "/"+type+"s/"+o._id+"/avatar", null, on_success,on_error);
  205. }
  206. function save_space_background_file(space, file, on_success, on_error) {
  207. load_resource("post", "/spaces/"+space._id+"/background?filename="+file.name, file, on_success,on_error);
  208. }
  209. function save_user_background_file(user, file, on_success, on_error) {
  210. load_resource("post", "/users/"+user._id+"/background", file, on_success,on_error);
  211. }
  212. function save_user_password(u, pass, newPass, on_success, on_error) {
  213. load_resource("post", "/users/" + u._id + "/password", {old_password:pass, new_password:newPass}, on_success, on_error);
  214. }
  215. function get_featured_users(on_success, on_error) {
  216. load_resource("get", "/users/featured", null, on_success, on_error);
  217. }
  218. function save_user(u, on_success, on_error) {
  219. load_resource("put", "/users/"+u._id,u,on_success,on_error);
  220. }
  221. function delete_user(u, password, on_success, on_error) {
  222. load_resource("delete", "/users/"+u._id +"?password="+password,null,on_success,on_error);
  223. }
  224. function create_user(name, email, password, password_confirmation, on_success, on_error) {
  225. load_resource("post", "/users", {email:email, nickname:name, password:password, password_confirmation: password_confirmation}, on_success, on_error);
  226. }
  227. function create_session(email, password, on_success, on_error) {
  228. load_resource("post", "/sessions", {email:email, password:password}, on_success, on_error);
  229. }
  230. function delete_session(on_success, on_error) {
  231. load_resource("delete", "/sessions/current", null, on_success, on_error);
  232. }
  233. function create_oauthtoken(on_success, on_error) {
  234. load_resource("get", "/users/oauth2callback/url", null, on_success, on_error);
  235. }
  236. function create_session_for_oauthtoken(token, on_success, on_error) {
  237. load_resource("get", "/users/loginorsignupviagoogle?code="+token, null, on_success, on_error);
  238. }
  239. function create_password_reset(email, on_success, on_error) {
  240. load_resource("post", "/users/password_reset_requests?email=" + encodeURIComponent(email), null, on_success, on_error);
  241. }
  242. function confirm_password_reset(password, confirm, on_success, on_error) {
  243. load_resource("post", "/users/password_reset_requests/"+confirm+"/confirm", {password:password}, on_success, on_error);
  244. }
  245. function confirm_user(user, token, on_success, on_error) {
  246. load_resource("put", "/users/"+user._id+"/confirm", {token:token}, on_success, on_error);
  247. }
  248. function resent_confirm_mail(user, on_success, on_error) {
  249. load_resource("post", "/users/"+user._id+"/confirm", {}, on_success, on_error);
  250. }
  251. function create_feedback(user, m, on_success, on_error) {
  252. load_resource("post", "/users/feedback", {text: m}, on_success, on_error);
  253. }
  254. function save_team(u, on_success, on_error) {
  255. load_resource("put", "/teams/"+u._id,u,on_success,on_error);
  256. }
  257. function load_comments(space_id, on_success, on_error) {
  258. load_resource("get", "/spaces/"+space_id+"/messages", null, on_success, on_error);
  259. }
  260. function save_comment(space_id, data, on_success, on_error) {
  261. load_resource("post", "/spaces/"+space_id +"/messages", data, on_success, on_error);
  262. }
  263. function delete_comment(space_id, message_id,on_success, on_error) {
  264. load_resource("delete", "/spaces/"+space_id +"/messages/"+ message_id, null , on_success, on_error);
  265. }
  266. function update_comment(space_id, data, on_success, on_error) {
  267. load_resource("post", "/spaces/"+space_id+"/messages/" + data._id , data, on_success, on_error);
  268. }
  269. function load_notifications(u, on_success, on_error) {
  270. load_resource("get", "/notifications", null, on_success, on_error);
  271. }