Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ProcessGetByExternalUserId
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
2 / 2
7
100.00% covered (success)
100.00%
1 / 1
 readResponse
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
1 / 1
3
 validateExternalUserId
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3/**
4 * @package ZMS API
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsbackend\Process\Api;
9
10use BO\Slim\Render;
11use BO\Mellon\Validator;
12use BO\Zmsbackend\Process\Service\Process;
13
14/**
15 * Citizen-scoped process read for trusted backends (e.g. zmscitizenapi after JWT validation).
16 * Requires workstation/service authentication via X-Authkey and matching external user id.
17 */
18class ProcessGetByExternalUserId extends \BO\Zmsbackend\Api\BaseController
19{
20    /**
21     * @SuppressWarnings(Param)
22     * @return \Psr\Http\Message\ResponseInterface
23     */
24    public function readResponse(
25        \Psr\Http\Message\RequestInterface $request,
26        \Psr\Http\Message\ResponseInterface $response,
27        array $args
28    ) {
29        (new \BO\Zmsbackend\Helper\User($request, 2))->checkPermissions();
30
31
32        $resolveReferences = (int) (Validator::param('resolveReferences')->isNumber()->setDefault(2)->getValue() ?? 2);
33        $processId = (int) $args['id'];
34        $externalUserId = $args['externalUserId'];
35
36        $process = (new \BO\Zmsbackend\Process\Service\Process())->readEntity(
37            $processId,
38            new \BO\Zmsbackend\Helper\NoAuth(),
39            $resolveReferences
40        );
41
42        if (!$process || !$process->hasId()) {
43            $exception = new \BO\Zmsbackend\Process\Exception\ProcessNotFound();
44            $exception->data = ['processId' => $processId];
45            throw $exception;
46        }
47
48        $this->validateExternalUserId($process, $externalUserId);
49
50        $message = \BO\Zmsbackend\Api\Response\Message::create($request);
51        $message->data = $process;
52
53        $response = Render::withLastModified($response, time(), '0');
54        $response = Render::withJson($response, $message->setUpdatedMetaData(), $message->getStatuscode());
55        return $response;
56    }
57
58    protected function validateExternalUserId(\BO\Zmsentities\Process $process, string $externalUserId): void
59    {
60        $processExternalUserId = $process->getExternalUserId();
61        if (
62            $processExternalUserId === null
63            || $processExternalUserId === ''
64            || (string) $processExternalUserId !== (string) $externalUserId
65        ) {
66            throw new \BO\Zmsbackend\Process\Exception\ExternalUserIdMatchFailed();
67        }
68    }
69}