12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Sandstorm context is detected using the METEOR_SETTINGS environment variable
- // in the package definition.
- var isSandstorm = Meteor.settings && Meteor.settings.public &&
- Meteor.settings.public.sandstorm;
- // In sandstorm we only have one board per sandstorm instance. Since we want to
- // keep most of our code unchanged, we simply hard-code a board `_id` and
- // redirect the user to this particular board.
- var sandstormBoard = {
- _id: 'sandstorm',
- slug: 'board',
- // XXX Should be shared with the grain instance name.
- title: 'LibreBoard',
- permission: 'public',
- background: {
- type: 'color',
- color: '#16A085'
- },
- // XXX Not certain this is a bug, but we except these fields to get inserted
- // by the `Lists.before.insert` collection-hook. Since this hook is not called
- // in this case, we have to duplicate the logic and set them here.
- archived: false,
- createdAt: new Date()
- };
- // On the first launch of the instance a user is automatically created thanks to
- // the `accounts-sandstorm` package. After its creation we insert the unique
- // board document. Note that when the `Users.after.insert` hook is called, the
- // user is inserted into the database but not connected. So despite the
- // appearances `userId` is null in this block.
- //
- // If the hard-coded board already exists and we are inserting a new user, we
- // assume that the owner of the board want to share write privileges with the
- // new user.
- // XXX Improve that when the Sandstorm sharing model (“Powerbox”) arrives.
- if (isSandstorm && Meteor.isServer) {
- Users.after.insert(function(userId, doc) {
- if (! Boards.findOne(sandstormBoard._id)) {
- Boards.insert(_.extend(sandstormBoard, { userId: doc._id }));
- Boards.update(sandstormBoard._id, {
- $set: {
- 'members.0.userId': doc._id
- }
- });
- Activities.update({
- activityTypeId: sandstormBoard._id
- }, {
- $set: {
- userId: doc._id
- }
- });
- } else {
- Boards.update({
- _id: sandstormBoard._id,
- permission: 'public'
- }, {
- $push: {
- members: doc._id
- }
- });
- }
- });
- }
- // On the client, redirect the user to the hard-coded board. On the first launch
- // the user will be redirected to the board before its creation. But that’s not
- // a problem thanks to the reactive board publication.
- if (isSandstorm && Meteor.isClient) {
- Router.go('Board', {
- boardId: sandstormBoard._id,
- slug: getSlug(sandstormBoard.title)
- });
- // XXX Hack. `Meteor.absoluteUrl` doesn't work in Sandstorm, since every
- // session has a different URL whereas Meteor computes absoluteUrl based on
- // the ROOT_URL environment variable. So we overwrite this function on a
- // sandstorm client to return relative paths instead of absolutes.
- var _absoluteUrl = Meteor.absoluteUrl;
- var _defaultOptions = Meteor.absoluteUrl.defaultOptions;
- Meteor.absoluteUrl = function(path, options) {
- var url = _absoluteUrl(path, options);
- return url.replace(/^https?:\/\/127\.0\.0\.1:[0-9]{2,5}/, '');
- };
- Meteor.absoluteUrl.defaultOptions = _defaultOptions;
- }
- // We use this blaze helper in the UI to hide some template that does not make
- // sense in the context of sandstorm, like board staring, board archiving, user
- // name edition, etc.
- Blaze.registerHelper('isSandstorm', function() {
- return isSandstorm;
- });
|