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
Push — annotations ( 582d88...d84805 )
by Jérémiah
28:13 queued 19:34
created

AclConfigProcessor   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 13
eloc 31
dl 0
loc 72
ccs 31
cts 31
cp 1
rs 10
c 0
b 0
f 0

4 Methods

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