예제 #1
0
 /**
  * Get the {@link OAuth2Providers} for the Github
  * authentication handler.
  *
  * @param $redirect the `redirectUri` to provide the provider.
  * @return A {@link OAuth2Providers}
  */
 static function github($redirect)
 {
     if (!$redirect) {
         throw new \InvalidArgumentException("No redirect provided.");
     }
     return new OAuth2Providers('github', OAuth2Providers::loadProvider("github", $redirect));
 }
예제 #2
0
 /**
  * @throws UserSignupException if the user could not be signed up, with a reason
  * @throws UserAlreadyExistsException if the identity already exists in the database
  */
 static function addIdentity(\Db\Connection $db, User $user, OAuth2Providers $provider)
 {
     if (!$user) {
         throw new \InvalidArgumentException("No user provided.");
     }
     $identity = UserOAuth2::auth($provider->getProvider());
     if (!$identity) {
         throw new UserSignupException("Could not login with OAuth2.");
     }
     $uid = $identity->uid;
     if (!$uid) {
         throw new UserSignupException("No UID found.");
     }
     // does such an identity already exist?
     $q = $db->prepare("SELECT * FROM user_oauth2_identities WHERE provider=? AND uid=? LIMIT 1");
     $q->execute(array($provider->getKey(), $uid));
     if ($q->fetch()) {
         throw new UserAlreadyExistsException("That OAuth2 identity is already in use.");
     }
     // create a new identity
     $q = $db->prepare("INSERT INTO user_oauth2_identities SET user_id=?, provider=?, uid=?");
     $q->execute(array($user->getId(), $provider->getKey(), $uid));
     return true;
 }