Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Completed
Pull Request — master (#73)
by Jérémiah
05:36
created

AccessResolver::filterResultUsingAccess()   C

Complexity

Conditions 7
Paths 2

Size

Total Lines 34
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 21
CRAP Score 7.0046

Importance

Changes 0
Metric Value
dl 0
loc 34
ccs 21
cts 22
cp 0.9545
rs 6.7272
c 0
b 0
f 0
cc 7
eloc 20
nc 2
nop 3
crap 7.0046
1
<?php
2
3
/*
4
 * This file is part of the OverblogGraphQLBundle package.
5
 *
6
 * (c) Overblog <http://github.com/overblog/>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Overblog\GraphQLBundle\Resolver;
13
14
use GraphQL\Executor\Promise\Promise;
15
use Overblog\GraphQLBundle\Error\UserError;
16
use Overblog\GraphQLBundle\Error\UserWarning;
17
use Overblog\GraphQLBundle\Relay\Connection\Output\Connection;
18
use Overblog\GraphQLBundle\Relay\Connection\Output\Edge;
19
20
class AccessResolver
21
{
22 9
    public function resolve(callable $accessChecker, callable $resolveCallback, array $resolveArgs = [], $isMutation = false)
23
    {
24
        // operation is mutation and is mutation field
25 9
        if ($isMutation) {
26 3
            if (!$this->hasAccess($accessChecker, null, $resolveArgs)) {
27 1
                throw new UserError('Access denied to this field.');
28
            }
29
30 2
            $result = call_user_func_array($resolveCallback, $resolveArgs);
31 2
        } else {
32 8
            $result = $this->filterResultUsingAccess($accessChecker, $resolveCallback, $resolveArgs);
33
        }
34
35 7
        return $result;
36
    }
37
38 8
    private function filterResultUsingAccess(callable $accessChecker, callable $resolveCallback, array $resolveArgs = [])
39
    {
40 8
        $result = call_user_func_array($resolveCallback, $resolveArgs);
41
42
        $onFulFilled = function ($result) use ($accessChecker, $resolveArgs) {
43 8
            if (is_array($result)) {
44 3
                $result = array_map(
45
                        function ($object) use ($accessChecker, $resolveArgs) {
46 3
                            return $this->hasAccess($accessChecker, $object, $resolveArgs) ? $object : null;
47 3
                        },
48
                        $result
49 3
                    );
50 8
            } elseif ($result instanceof Connection) {
51 1
                $result->edges = array_map(
52 1
                        function (Edge $edge) use ($accessChecker, $resolveArgs) {
53 1
                            $edge->node = $this->hasAccess($accessChecker, $edge->node, $resolveArgs) ? $edge->node : null;
54
55 1
                            return $edge;
56 1
                        },
57 1
                        $result->edges
58 1
                    );
59 5
            } elseif (!$this->hasAccess($accessChecker, $result, $resolveArgs)) {
60 2
                throw new UserWarning('Access denied to this field.');
61
            }
62
63 6
            return $result;
64 8
        };
65
66 8
        if ($result instanceof Promise) {
67
            return $result->then($onFulFilled);
68
        }
69
70 8
        return $onFulFilled($result);
71
    }
72
73 9
    private function hasAccess(callable $accessChecker, $object, array $resolveArgs = [])
74
    {
75 9
        $resolveArgs[] = $object;
76 9
        $access = (bool) call_user_func_array($accessChecker, $resolveArgs);
77
78 9
        return $access;
79
    }
80
}
81