sso.js 2.2 KB

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