/**
  * password can be checked for
  * validity
  **/
 public function testPasswordCheck()
 {
     $user = new UserModel();
     $user->password = '******';
     // the password must be hashed
     $this->assertNotEquals('zoom', $user->password);
     $this->assertEquals(true, $user->checkPassword('zoom'));
 }
 /**
  * a token can be found by it's key
  **/
 public function testFindToken()
 {
     $user = new UserModel();
     $user->username = '******';
     $user->password = '******';
     $user->save();
     $key = TokenModel::makeKey();
     $token = TokenModel::generate($user, $key);
     $token->save();
     $token2 = TokenModel::findToken($key);
     $this->assertNotNull($token2);
 }
 /**
  * Assigns a new authentication token
  *
  * This route will assign the user a new
  * authentication token, if they provide
  * valid credentials.
  *
  * this token can be used on further
  * requests to authenticate the user.
  *
  **/
 public function login($app)
 {
     $username = $app->request->post('username');
     $password = $app->request->post('password');
     if ($username === null || $password === null) {
         $app->response->setStatus(403);
         $app->response->write('username and password required');
         return $app->response->finalize();
     }
     $users = UserModel::findWhere(['username' => $username]);
     if (count($users) == 0) {
         $app->response->setStatus(401);
         $app->response->write('invalid credentials');
         return $app->response->finalize();
     }
     $user = $users[0];
     if ($user->checkPassword($password)) {
         $previous_token = $app->getCookie(self::TOKEN_COOKIE);
         if ($previous_token != null) {
             TokenModel::invalidate($previous_token);
         }
         $key = TokenModel::makeKey();
         $token = TokenModel::generate($user, $key);
         $token->save();
         $app->setCookie(self::TOKEN_COOKIE, $key);
         $app->response->write("logged in");
         return $app->response->finalize();
     } else {
         $app->response->setStatus(403);
         $app->response->write('invalid credentials');
         return $app->response->finalize();
     }
 }
 function it_is_initializable()
 {
     $this->shouldHaveType('Kagia\\EmojiApi\\Models\\TokenModel');
     $user = UserModel::find(1);
     $this->getUserID()->shouldReturn($user->getID());
 }
<?php

require "vendor/autoload.php";
use Kagia\EmojiApp\Kernel;
use Kagia\EmojiApi\Models\UserModel;
$kernel = new Kernel();
$kernel->boot();
if (count($argv) == 3) {
    $username = $argv[1];
    $password = $argv[2];
    $user = new UserModel();
    $user->username = $username;
    $user->password = $password;
    $user->save();
    echo "user {$username} created!\n";
} else {
    echo "usage: create-user <username> <mypassword>\n";
}