public function handle() { $token = Seat::get('slack_token'); if ($token == null) { throw new SlackSettingException("missing slack_token in settings"); } // get members list from slack team $api = new SlackApi($token); $members = $api->members(); // iterate over each member, check if the user mail match with a seat account and update the relation table foreach ($members as $m) { if ($m['id'] != 'USLACKBOT' && $m['deleted'] == false && $m['is_bot'] == false && !key_exists('api_app_id', $m['profile'])) { $user = User::where('email', '=', $m['profile']['email'])->first(); if ($user != null) { $slackUser = SlackUser::find($user->id); if ($slackUser == null) { $slackUser = new SlackUser(); $slackUser->user_id = $user->id; $slackUser->invited = true; } $slackUser->slack_id = $m['id']; $slackUser->save(); } } } }
/** * Invite the user to a slack team * * @param User $user * @throws SlackMailException * @throws SlackTeamInvitationException */ private function processMemberInvitation(User $user) { try { $this->getSlackApi()->inviteToTeam($user->email); // update Slack user relation SlackUser::create(['user_id' => $user->id, 'invited' => true]); } catch (SlackMailException $e) { $this->logEvent('mail'); } catch (SlackTeamInvitationException $e) { $this->logEvent('sync'); } }
/** * Run the migrations. * * @return void */ public function up() { $last_user = ''; $users = SlackUser::all(); foreach ($users as $user) { if ($user->slack_id == $last_user) { $user->delete(); } $last_user = $user->slack_id; } Schema::table('slack_users', function (Blueprint $table) { $table->unique('slack_id'); }); }
public function testUserUpdate() { // pre test Seat::set('slack_token', getenv('slack_token')); $artifacts = [new SlackUser(['user_id' => 1, 'slack_id' => 'U1Z9LT9NM']), new SlackUser(['user_id' => 2, 'slack_id' => 'U1Z9QVCJW']), new SlackUser(['user_id' => 3, 'slack_id' => 'U1Z9LT9NK'])]; // test $job = new SlackUsersUpdate(); $job->handle(); $inDatabaseMember = SlackUser::all(['user_id', 'slack_id']); $result = []; foreach ($inDatabaseMember as $member) { $result[] = new SlackUser(['user_id' => $member->user_id, 'slack_id' => $member->slack_id]); } // compare both array $this->assertEquals($artifacts, $result); }
public function call() { // call the parent call method in order to load the Slack Api Token parent::call(); // get all Api Key owned by the user $keys = ApiKey::where('user_id', $this->user->id)->get(); // get the Slack Api User $slackUser = SlackUser::where('user_id', $this->user->id)->where('invited', true)->whereNotNull('slack_id')->first(); if ($slackUser != null) { // get channels into which current user is already member $channels = $this->getSlackApi()->member($slackUser->slack_id, false); $groups = $this->getSlackApi()->member($slackUser->slack_id, true); // if key are not valid OR account no longer paid // kick the user from all channels to which he's member if ($this->isEnabledKey($keys) == false || $this->isActive($keys) == false) { if (!empty($channels)) { $this->processChannelsKick($slackUser, $channels); $this->logEvent('kick', $channels); } if (!empty($groups)) { $this->processGroupsKick($slackUser, $groups); $this->logEvent('kick', $groups); } return; } // in other way, compute the gap and kick only the user // to channel from which he's no longer granted to be in $allowedChannels = $this->allowedChannels($slackUser, false); $extraChannels = array_diff($channels, $allowedChannels); // remove channels in which user is already in from all granted channels and invite him if (!empty($extraChannels)) { $this->processChannelsKick($slackUser, $extraChannels); $this->logEvent('kick', $extraChannels); } // remove granted channels from channels in which user is already in and kick him $allowedGroups = $this->allowedChannels($slackUser, true); $extraGroups = array_diff($groups, $allowedGroups); if (!empty($extraGroups)) { $this->processGroupsKick($slackUser, array_diff($groups, $extraGroups)); $this->logEvent('kick', $extraGroups); } } return; }
private function newMember($userInformation) { $slackUser = SlackUser::join('users', 'users.id', '=', 'slack_users.user_id')->where('email', $userInformation['profile']['email'])->first(); if ($slackUser != null) { $slackUser->update(['slack_id' => $userInformation['id']]); } }
public function testUser() { $slack = SlackUser::where('user_id', '=', 3)->first(); $artifact = User::find(3); $this->assertEquals($artifact, $slack->user); }
/** * Determine if an user has already been invited * * @param User $user * @return bool */ protected function isInvited(User $user) { return (bool) SlackUser::where('user_id', $user->id)->where('invited', true)->count(); }