/** * Retrieves a link and associates a user (will lazily * create one) for the given slug, provider and token. * * @param string $slug * @param mixed $provider * @param mixed $token * @return \Cartalyst\SentrySocial\Links\LinkInterface */ protected function linkLoggedOut($slug, $provider, $token) { $uid = $provider->getUserUid($token); $link = $this->retrieveLink($slug, $uid, $token); if (!($user = $link->getUser())) { $userProvider = $this->sentry->getUserProvider(); $login = $provider->getUserEmail($token) ?: $uid . '@' . $slug; try { $user = $userProvider->findByLogin($login); $link->setUser($user); $this->fireEvent('existing', $link, $provider, $token, $slug); } catch (UserNotFoundException $e) { $emptyUser = $userProvider->getEmptyUser(); // Create a dummy password for the user $passwordParams = array($slug, $login, time(), mt_rand()); shuffle($passwordParams); // Setup an array of attributes we'll add onto // so we can create our user. $attributes = array($emptyUser->getLoginName() => $login, $emptyUser->getPasswordName() => implode('', $passwordParams)); // Some providers give a first / last name, some don't. // If we only have one name, we'll just put it in the // "first_name" attribute. if (is_array($name = $provider->getUserScreenName($token))) { $attributes['first_name'] = $name[0]; $attributes['last_name'] = $name[1]; } elseif (is_string($name)) { $attributes['first_name'] = $name; } $user = $userProvider->create($attributes); $user->attemptActivation($user->getActivationCode()); $link->setUser($user); $this->fireEvent('registering', $link, $provider, $token, $slug); } } else { $this->fireEvent('existing', $link, $provider, $token, $slug); } $this->fireEvent('linking', $link, $provider, $token, $slug); return $link; }
/** * Gets the user provider for Sentry. * * @return \Cartalyst\Sentry\Users\ProviderInterface * @static */ public static function getUserProvider() { return \Cartalyst\Sentry\Sentry::getUserProvider(); }