/**
  * Deny password resets
  * 
  * @param Member $member
  * @return boolean
  */
 public function forgotPassword($member)
 {
     if (Config::inst()->get('OpauthMemberLoginFormExtension', 'allow_password_reset')) {
         return null;
     }
     $identity = OpauthIdentity::get()->find('MemberID', $member->ID);
     if (!$member->Password && $identity) {
         $this->owner->sessionMessage(_t('OpauthMemberLoginFormExtension.NoResetPassword', 'Can\'t reset password for accounts registered through {provider}', array('provider' => $identity->Provider)), 'bad');
         return false;
     } else {
         return null;
     }
 }
 /**
  * factory
  * Returns or creates a fresh OpauthIdentity.
  * @param array $oaResponse The response object from Opauth.
  * @return OpauthIdentity instance based on $oaResponse.
  */
 public static function factory(array $oaResponse)
 {
     if (empty($oaResponse['auth'])) {
         throw new InvalidArgumentException('The auth key is required to continue.');
     }
     if (empty($oaResponse['auth']['provider'])) {
         throw new InvalidArgumentException('Unable to determine provider.');
     }
     $auth = $oaResponse['auth'];
     $do = OpauthIdentity::get()->filter(array('Provider' => $auth['provider'], 'UID' => $auth['uid']))->first();
     if (!$do || !$do->exists()) {
         $do = new OpauthIdentity();
         $do->Provider = $auth['provider'];
         $do->UID = $auth['uid'];
     }
     $do->setAuthSource($auth);
     return $do;
 }