Esempio n. 1
0
 /**
  * Creates a native user in Omegaup and returns the DAO populated
  *
  * @param string $username optional
  * @param string $password optional
  * @param string $email optional
  * @return user (DAO)
  */
 public static function createUser($username = null, $password = null, $email = null, $verify = true)
 {
     // If data is not provided, generate it randomly
     if (is_null($username)) {
         $username = Utils::CreateRandomString();
     }
     if (is_null($password)) {
         $password = Utils::CreateRandomString();
     }
     if (is_null($email)) {
         $email = Utils::CreateRandomString() . '@mail.com';
     }
     // Populate a new Request to pass to the API
     UserController::$permissionKey = uniqid();
     $r = new Request(array('username' => $username, 'name' => $username, 'password' => $password, 'email' => $email, 'permission_key' => UserController::$permissionKey));
     // Call the API
     $response = UserController::apiCreate($r);
     // If status is not OK
     if (strcasecmp($response['status'], 'ok') !== 0) {
         throw new Exception('UserFactory::createUser failed');
     }
     // Get user from db
     $user = UsersDAO::FindByUsername($username);
     if ($verify) {
         UserController::$redirectOnVerify = false;
         $user = self::verifyUser($user);
     } else {
         $user->verified = 0;
         UsersDAO::save($user);
     }
     // Password came hashed from DB. Set password in plaintext
     $user->setPassword($password);
     return $user;
 }
 public function LoginViaFacebook()
 {
     //ok, the user does not have any auth token
     //if he wants to test facebook login
     //Facebook must send me the state=something
     //query, so i dont have to be testing
     //facebook sessions on every single petition
     //made from the front-end
     if (!isset($_GET['state'])) {
         return false;
     }
     //if that is not true, may still be logged with
     //facebook, lets test that
     $facebook = self::getFacebookInstance();
     // Get User ID
     $fb_user = $facebook->getUser();
     if ($fb_user == 0) {
         self::$log->info('FB session unavailable.');
         return false;
     }
     // We may or may not have this data based on whether the user is logged in.
     // If we have a $fb_user id here, it means we know the user is logged into
     // Facebook, but we don't know if the access token is valid. An access
     // token is invalid if the user logged out of Facebook.
     try {
         // Proceed knowing you have a logged in user who's authenticated.
         $fb_user_profile = $facebook->api('/me');
     } catch (FacebookApiException $e) {
         $fb_user = null;
         self::$log->error('FacebookException:' . $e);
         return false;
     }
     //ok we know the user is logged in,
     //lets look for his information on the database
     //if there is none, it means that its the first
     //time the user has been here, lets register his info
     self::$log->info('User is logged in via facebook !!');
     $results = UsersDAO::FindByEmail($fb_user_profile['email']);
     if (!is_null($results)) {
         //user has been here before with facebook!
         $vo_User = $results;
         self::$log->info('user has been here before with facebook!');
     } else {
         // The user has never been here before, let's register him
         // I have a problem with this:
         $username = self::getUniqueUsernameFromEmail($fb_user_profile['email']);
         // Even if the user gave us his/her email, we should not
         // just go ahead and assume its ok to share with the world
         // maybe we could do:
         // $username = str_replace(" ", "_", $fb_user_profile["name"] ),
         UserController::$permissionKey = uniqid();
         $r = new Request(array('name' => $fb_user_profile['name'], 'username' => $username, 'email' => $fb_user_profile['email'], 'facebook_user_id' => $fb_user_profile['id'], 'password' => null, 'permission_key' => UserController::$permissionKey, 'ignore_password' => true));
         try {
             $res = UserController::apiCreate($r);
         } catch (ApiException $e) {
             self::$log->error('Unable to login via Facebook ' . $e);
             return false;
         }
         $vo_User = UsersDAO::getByPK($res['user_id']);
     }
     //since we got here, this user does not have
     //any auth token, lets give him one
     //so we dont have to call facebook to see
     //if he is still logged in, and he can call
     //the api
     $this->RegisterSession($vo_User);
 }
 /**
  * Tests usernames with invalid chars. Exception is expected
  *
  * @expectedException InvalidParameterException
  */
 public function testUsernameWithInvalidChars()
 {
     UserController::$permissionKey = uniqid();
     // Inflate request
     $r = new Request(array('username' => 'ínvalid username', 'password' => Utils::CreateRandomString(), 'email' => Utils::CreateRandomString() . '@' . Utils::CreateRandomString() . '.com', 'permission_key' => UserController::$permissionKey));
     // Call API
     $response = UserController::apiCreate($r);
 }
Esempio n. 4
0
 /**
  * Tests usernames with invalid chars. Exception is expected
  * 
  * @expectedException InvalidParameterException
  */
 public function testUsernameWithInvalidChars()
 {
     UserController::$permissionKey = uniqid();
     // Inflate request
     $r = new Request(array("username" => "ínvalid username", "password" => Utils::CreateRandomString(), "email" => Utils::CreateRandomString() . "@" . Utils::CreateRandomString() . ".com", "permission_key" => UserController::$permissionKey));
     // Call API
     $response = UserController::apiCreate($r);
 }