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

Passed
Pull Request — 0.11 (#435)
by Jérémiah
13:02
created

AclConfigProcessor::process()   A

Complexity

Conditions 3
Paths 1

Size

Total Lines 15
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 15
ccs 7
cts 7
cp 1
rs 10
c 0
b 0
f 0
cc 3
nc 1
nop 1
crap 3
1
<?php
2
3
namespace Overblog\GraphQLBundle\Definition\ConfigProcessor;
4
5
use GraphQL\Type\Definition\ResolveInfo;
6
use Overblog\GraphQLBundle\Definition\LazyConfig;
7
use Overblog\GraphQLBundle\Error\UserWarning;
8
use Overblog\GraphQLBundle\Resolver\AccessResolver;
9
10
final class AclConfigProcessor implements ConfigProcessorInterface
11
{
12
    /** @var AccessResolver */
13
    private $accessResolver;
14
15
    /** @var callable */
16
    private $defaultResolver;
17
18 96
    public function __construct(AccessResolver $accessResolver, callable $defaultResolver)
19
    {
20 96
        $this->accessResolver = $accessResolver;
21 96
        $this->defaultResolver = $defaultResolver;
22 96
    }
23
24 85
    public static function acl(array $fields, AccessResolver $accessResolver, callable $defaultResolver)
25
    {
26
        $deniedAccess = static function () {
27 1
            throw new UserWarning('Access denied to this field.');
28 85
        };
29 85
        foreach ($fields as &$field) {
30 85
            if (isset($field['access']) && true !== $field['access']) {
31 15
                $accessChecker = $field['access'];
32 15
                if (false === $accessChecker) {
33 14
                    $field['resolve'] = $deniedAccess;
34 15
                } elseif (\is_callable($accessChecker)) {
35
                    $field['resolve'] = function ($value, $args, $context, ResolveInfo $info) use ($field, $accessChecker, $accessResolver, $defaultResolver) {
36 14
                        $resolverCallback = self::findFieldResolver($field, $info, $defaultResolver);
37
38 14
                        return $accessResolver->resolve($accessChecker, $resolverCallback, [$value, $args, $context, $info], $field['useStrictAccess']);
39 85
                    };
40
                }
41
            }
42
        }
43
44 85
        return $fields;
45
    }
46
47 95
    public function process(LazyConfig $lazyConfig)
48
    {
49
        $lazyConfig->addPostLoader(function ($config) {
50 95
            if (isset($config['fields']) && \is_callable($config['fields'])) {
51
                $config['fields'] = function () use ($config) {
52 85
                    $fields = $config['fields']();
53
54 85
                    return static::acl($fields, $this->accessResolver, $this->defaultResolver);
55
                };
56
            }
57
58 95
            return $config;
59 95
        });
60
61 95
        return $lazyConfig;
62
    }
63
64
    /**
65
     * @param array       $field
66
     * @param ResolveInfo $info
67
     * @param callable    $defaultResolver
68
     *
69
     * @return callable
70
     */
71 14
    private static function findFieldResolver(array $field, ResolveInfo $info, callable $defaultResolver)
72
    {
73 14
        if (isset($field['resolve'])) {
74 11
            $resolver = $field['resolve'];
75 6
        } elseif (isset($info->parentType->config['resolveField'])) {
76 1
            $resolver = $info->parentType->config['resolveField'];
77
        } else {
78 5
            $resolver = $defaultResolver;
79
        }
80
81 14
        return $resolver;
82
    }
83
}
84