@ -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 ) ;
} ) ;