Overview

Namespaces

  • Comprobo
    • Verify
      • Auth
      • Exceptions
      • HTTP

Classes

  • Comprobo\Verify\Api
  • Comprobo\Verify\Auth\Server
  • Comprobo\Verify\Factory
  • Comprobo\Verify\HTTP\Request
  • Comprobo\Verify\State
  • Comprobo\Verify\User
  • Comprobo\Verify\Workflow

Exceptions

  • Comprobo\Verify\Exceptions\Auth
  • Comprobo\Verify\Exceptions\Misconfiguration
  • Comprobo\Verify\Exceptions\User
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 
<?php
namespace Comprobo\Verify;

class User
{
    private $config;
    private $factory;
    private $state;

    public function __construct(array $config, Factory $factory, State $state)
    {
        $this->config  = $config;
        $this->factory = $factory;
        $this->state   = $state;
    }

    public function create($firstName, $lastName, $email)
    {
        if (!$this->state->has('token')) {
            throw new Exceptions\Auth("Could not validate create user request");
        }
        if (!$this->state->has('organisationId')) {
            throw new Exceptions\Auth("Could not complete create user request");
        }

        $orgId = $this->state->get('organisationId');
        $url = str_replace('{orgid}', $orgId, $this->config['urls']['userCreate']);
        $details = [
            "givenNames" => $firstName,
            "familyName" => $lastName,
            "email" => $email
        ];
        $request = $this->factory->getRequest();
        $request->authorize($this->state->get('token'));
        $response = $request->post($url, ['json' => $details]);
        $body = json_decode((string) $response->getBody(), true);

        return $body;
    }

    /**
     * Ask the authentication service for a token to impersonate a test-taking user.
     * This token should be passed to the JavaScript SDK when displaying the block
     * and does not replace the API token used for normal tasks.
     *
     * @param  string $uuid the Comprobo user ID.
     * @return string       the user token
     * @throws Exceptions\User if the token cannot be requested or the service response is invalid
     * @throws Exceptions\Auth If the API has not yet been authenticated
     * @see Comprobo\Verify\Api::authenticate
     */
    public function token($uuid)
    {
        if (!$this->state->has('token')) {
            throw new Exceptions\Auth("Could not validate user token request");
        }

        $url = str_replace('{uuid}', $uuid, $this->config['urls']['userToken']);

        $request = $this->factory->getRequest();
        $request->authorize($this->state->get('token'));

        $response = $request->get($url);
        $body = json_decode((string) $response->getBody(), true);

        if ($response->getStatusCode() === 200 &&
            is_array($body) &&
            strtolower($body['status']) === 'success' &&
            $body['token']
        ) {
            return $body['token'];
        }

        throw new Exceptions\User("Token request failed");
    }

    /**
     * @throws Exceptions\Auth If the API has not yet been authenticated
     * @see Comprobo\Verify\Api::authenticate
     *
     * @param  string $userId     Comprobo user ID
     * @param  string $workflowId Comprobo workflow ID
     * @return bool               true
     */
    public function assignWorkflow($userId, $workflowId)
    {
        if (!$this->state->has('token')) {
            throw new Exceptions\Auth("Could not validate create user request");
        }

        $url = str_replace('{workflowid}', $workflowId, $this->config['urls']['workflowAssign']);
        $details = [
            "invitees" =>  [
                // deadline is one week in the future.
                ['id' => $userId, 'type' => 'User', 'deadline' => time() + 60*60*24*7]
            ],
            "notify" => false
        ];

        $request = $this->factory->getRequest();
        $request->authorize($this->state->get('token'));

        $response = $request->post($url, ['json' => $details]);
        $body = json_decode((string) $response->getBody(), true);

        //@todo verify the return or something? unused variable $body

        return true;
    }
}
API documentation generated by ApiGen