Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
95.65% covered (success)
95.65%
22 / 23
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
GetWebdavAccessTokenEndpoint
95.65% covered (success)
95.65%
22 / 23
50.00% covered (danger)
50.00%
1 / 2
4
0.00% covered (danger)
0.00%
0 / 1
 handle
100.00% covered (success)
100.00%
22 / 22
100.00% covered (success)
100.00%
1 / 1
3
 generateRandomAccessToken
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Olz\Apps\Files\Endpoints;
4
5use Olz\Api\OlzTypedEndpoint;
6use Olz\Entity\AccessToken;
7
8/**
9 * @extends OlzTypedEndpoint<
10 *   ?array{},
11 *   array{status: 'OK'|'ERROR', token?: ?non-empty-string}
12 * >
13 */
14class GetWebdavAccessTokenEndpoint extends OlzTypedEndpoint {
15    protected function handle(mixed $input): mixed {
16        $this->checkPermission('webdav');
17
18        $current_user = $this->authUtils()->getCurrentUser();
19
20        $access_token_repo = $this->entityManager()->getRepository(AccessToken::class);
21        $access_token = $access_token_repo->findOneBy([
22            'user' => $current_user,
23            'purpose' => 'WebDAV',
24        ]);
25
26        if (!$access_token) {
27            $now = new \DateTime($this->dateUtils()->getIsoNow());
28            $token = $this->generateRandomAccessToken();
29
30            $access_token = new AccessToken();
31            $access_token->setUser($current_user);
32            $access_token->setPurpose('WebDAV');
33            $access_token->setToken($token);
34            $access_token->setCreatedAt($now);
35            $access_token->setExpiresAt(null);
36
37            $this->entityManager()->persist($access_token);
38            $this->entityManager()->flush();
39        }
40
41        return [
42            'status' => 'OK',
43            'token' => $access_token->getToken() ?: null,
44        ];
45    }
46
47    protected function generateRandomAccessToken(): string {
48        return $this->generalUtils()->base64EncodeUrl(openssl_random_pseudo_bytes(18));
49    }
50}