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
28:46
created

AccessResolver::filterResultUsingAccess()   C

Complexity

Conditions 7
Paths 2

Size

Total Lines 34
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 24
CRAP Score 7

Importance

Changes 0
Metric Value
dl 0
loc 34
ccs 24
cts 24
cp 1
rs 6.7272
c 0
b 0
f 0
cc 7
eloc 20
nc 2
nop 3
crap 7
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 9
{
22
    public function resolve(callable $accessChecker, callable $resolveCallback, array $resolveArgs = [], $isMutation = false)
23
    {
24 9
        // operation is mutation and is mutation field
25 3
        if ($isMutation) {
26 1
            if (!$this->hasAccess($accessChecker, null, $resolveArgs)) {
27
                throw new UserError('Access denied to this field.');
28
            }
29 2
30 2
            $result = call_user_func_array($resolveCallback, $resolveArgs);
31 8
        } else {
32
            $result = $this->filterResultUsingAccess($accessChecker, $resolveCallback, $resolveArgs);
33
        }
34 7
35
        return $result;
36
    }
37 8
38
    private function filterResultUsingAccess(callable $accessChecker, callable $resolveCallback, array $resolveArgs = [])
39 8
    {
40
        $result = call_user_func_array($resolveCallback, $resolveArgs);
41 8
42 8
        $onFulFilled = function ($result) use ($accessChecker, $resolveArgs) {
43 3
            if (is_array($result)) {
44
                $result = array_map(
45 3
                        function ($object) use ($accessChecker, $resolveArgs) {
46 3
                            return $this->hasAccess($accessChecker, $object, $resolveArgs) ? $object : null;
47
                        },
48 3
                        $result
49 3
                    );
50 5
            } 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 1
            } elseif (!$this->hasAccess($accessChecker, $result, $resolveArgs)) {
60 5
                throw new UserWarning('Access denied to this field.');
61 5
            }
62 2
63
            return $result;
64 3
        };
65 5
66
        if ($result instanceof Promise) {
67 6
            return $result->then($onFulFilled);
68
        }
69
70 9
        return $onFulFilled($result);
71
    }
72 9
73 9
    private function hasAccess(callable $accessChecker, $object, array $resolveArgs = [])
74
    {
75 9
        $resolveArgs[] = $object;
76
        $access = (bool) call_user_func_array($accessChecker, $resolveArgs);
77
78
        return $access;
79
    }
80
}
81