sso.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Cause an error on startup if the Drupal server is unreachable.
  2. Meteor.startup(function () {
  3. sso = new DrupalSSO();
  4. sso.initServerState(Meteor.settings);
  5. if (!sso.state.online) {
  6. throw new Meteor.Error('startup', "Could not reach the Drupal server.");
  7. }
  8. });
  9. Meteor.methods({
  10. /**
  11. * Parse Meteor settings to initialize the SSO state from the server.
  12. */
  13. "drupal-sso.initState": function () {
  14. var settings = Meteor.settings['drupal-sso'];
  15. var site = settings.site;
  16. var appToken = settings.appToken;
  17. if (!settings) {
  18. throw new Meteor.Error('invalid-settings', "Invalid settings: 'drupal-sso' key not found.");
  19. }
  20. if (!site) {
  21. throw new Meteor.Error('invalid-settings', "Invalid settings: 'drupal-sso.site' key not found.");
  22. }
  23. if (!appToken) {
  24. throw new Meteor.Error('invalid-settings', "Invalid settings: 'drupal-sso.appToken' key not found.");
  25. }
  26. var options = {
  27. params: {
  28. appToken: settings.appToken
  29. }
  30. };
  31. try {
  32. var ret = HTTP.get(site + "/meteor/siteInfo", options);
  33. info = JSON.parse(ret.content);
  34. info.online = true;
  35. }
  36. catch (err) {
  37. info = {
  38. cookieName: undefined,
  39. anonymousName: undefined,
  40. online: false
  41. };
  42. Meteor._debug("Error: ", err);
  43. }
  44. return info;
  45. },
  46. /**
  47. *
  48. * @param {string} cookieBlob
  49. * @returns {*}
  50. */
  51. "drupal-sso.whoami": function (cookieBlob) {
  52. // sso is a package global, initialized in server/sso.js Meteor.startup().
  53. var cookieName = sso.state.cookieName;
  54. var cookieValue = sso.getSessionCookie(cookieBlob);
  55. var url = sso.settings['drupal-sso'].site + "/meteor/whoami";
  56. var options = {
  57. headers: {
  58. 'cookie': cookieName + '=' + cookieValue
  59. }
  60. };
  61. Meteor._debug('Checking ' + cookieName + "=" + cookieValue + ' on ' + url);
  62. try {
  63. var ret = HTTP.get(url, options);
  64. info = JSON.parse(ret.content);
  65. }
  66. catch (err) {
  67. info = {
  68. 'uid': 0,
  69. 'name': 'Unresolved',
  70. 'roles': []
  71. };
  72. Meteor._debug("Error: ", err);
  73. }
  74. return info;
  75. }
  76. });