|
@@ -22,8 +22,8 @@ if (isSandstorm && Meteor.isServer) {
|
|
|
};
|
|
|
|
|
|
function updateUserPermissions(userId, permissions) {
|
|
|
- const isActive = permissions.includes('participate');
|
|
|
- const isAdmin = permissions.includes('configure');
|
|
|
+ const isActive = permissions.indexOf('participate') > -1;
|
|
|
+ const isAdmin = permissions.indexOf('configure') > -1;
|
|
|
const permissionDoc = { userId, isActive, isAdmin };
|
|
|
|
|
|
const boardMembers = Boards.findOne(sandstormBoard._id).members;
|
|
@@ -78,17 +78,40 @@ if (isSandstorm && Meteor.isServer) {
|
|
|
// 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.
|
|
|
- //
|
|
|
- // XXX We should support the `preferredHandle` exposed by Sandstorm
|
|
|
Users.after.insert((userId, doc) => {
|
|
|
if (!Boards.findOne(sandstormBoard._id)) {
|
|
|
- Boards.insert(sandstormBoard, {validate: false});
|
|
|
+ Boards.insert(sandstormBoard, { validate: false });
|
|
|
Activities.update(
|
|
|
{ activityTypeId: sandstormBoard._id },
|
|
|
{ $set: { userId: doc._id }}
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ // We rely on username uniqueness for the user mention feature, but
|
|
|
+ // Sandstorm doesn't enforce this property -- see #352. Our strategy to
|
|
|
+ // generate unique usernames from the Sandstorm `preferredHandle` is to
|
|
|
+ // append a number that we increment until we generate a username that no
|
|
|
+ // one already uses (eg, 'max', 'max1', 'max2').
|
|
|
+ function generateUniqueUsername(username, appendNumber) {
|
|
|
+ return username + String(appendNumber === 0 ? '' : appendNumber);
|
|
|
+ }
|
|
|
+
|
|
|
+ const username = doc.services.sandstorm.preferredHandle;
|
|
|
+ let appendNumber = 0;
|
|
|
+ while (Users.findOne({
|
|
|
+ _id: { $ne: doc._id },
|
|
|
+ username: generateUniqueUsername(username, appendNumber),
|
|
|
+ })) {
|
|
|
+ appendNumber += 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ Users.update(doc._id, {
|
|
|
+ $set: {
|
|
|
+ username: generateUniqueUsername(username, appendNumber),
|
|
|
+ 'profile.fullname': doc.services.sandstorm.name,
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
updateUserPermissions(doc._id, doc.services.sandstorm.permissions);
|
|
|
});
|
|
|
|