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