Ejemplo n.º 1
0
 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();
             }
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * 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');
     });
 }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
 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']]);
     }
 }
Ejemplo n.º 7
0
 public function testUser()
 {
     $slack = SlackUser::where('user_id', '=', 3)->first();
     $artifact = User::find(3);
     $this->assertEquals($artifact, $slack->user);
 }
Ejemplo n.º 8
0
 /**
  * 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();
 }