예제 #1
0
 /**
  * @param $user
  */
 private function extractUserData($user)
 {
     \Log::debug('Extracting Data for user - ', [$user]);
     // Get an existing Duo User or create a new one
     $duoUser = User::where(['user_id' => $user['user_id']])->withTrashed()->first() ?: new User(['user_id' => $user['user_id']]);
     // If this user was somehow previously trashed then restore the account
     if ($duoUser->trashed()) {
         $duoUser->restore();
     }
     \Log::debug('Local DuoUser found or created - ', [$duoUser]);
     //Update Duo User specific fields
     $duoUser->username = $user['username'];
     $duoUser->email = $user['email'];
     $duoUser->status = $user['status'];
     $duoUser->realname = $user['realname'];
     $duoUser->notes = $user['notes'];
     $duoUser->last_login = $user['last_login'];
     //Save Duo User
     $duoUser->touch();
     $duoUser->save();
     \Log::debug('Local DuoUser saved - ', [$duoUser]);
     if (count($user['tokens']) > 0) {
         \Log::debug('This user has tokens registered - ', [$user['tokens']]);
         //Loop Duo User Desktop Tokens
         $tokenList = [];
         foreach ($user['tokens'] as $token) {
             $localToken = Token::firstOrCreate(['serial' => $token['serial'], 'token_id' => $token['token_id'], 'totp_step' => $token['totp_step'], 'type' => $token['type']]);
             $tokenList[] = $localToken->id;
         }
         $duoUser->duoTokens()->sync($tokenList);
         \Log::debug('Finished Processing User tokens');
         unset($tokenList);
     }
     //Get the Duo groups that the user is assigned to
     //in UC Insight for reporting purposes
     $userGroupList = $duoUser->duoGroups()->wherePivot('duo_assigned', false)->lists('id')->toArray();
     \Log::debug('Syncing Duo User groups ', [$userGroupList]);
     //Loop Duo-assigned User Groups
     foreach ($user['groups'] as $group) {
         //Get the ID of the group that was created
         //locally during the Duo Group sync
         $localGroup = Group::where('group_id', $group['group_id'])->first();
         //Set the duo_assigned attribute to true
         //since we got this pairing from the Duo API
         $userGroupList[$localGroup->id] = ['duo_assigned' => true];
     }
     $duoUser->duoGroups()->sync($userGroupList);
     \Log::debug('Finished Processing User Groups');
     unset($userGroupList);
     //Hand off to process the Duo User phone data
     $this->extractUserPhoneData($duoUser, $user);
     \Log::debug('Completed User data extraction process', [$duoUser]);
 }