Passed
Pull Request — master (#6190)
by
unknown
07:52
created

SecuritySettingsSchema::buildSettings()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 35
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 29
nc 1
nop 1
dl 0
loc 35
rs 9.456
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Settings;
8
9
use Chamilo\CoreBundle\Form\Type\YesNoType;
10
use Sylius\Bundle\SettingsBundle\Schema\AbstractSettingsBuilder;
11
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
12
use Symfony\Component\Form\Extension\Core\Type\TextType;
13
use Symfony\Component\Form\FormBuilderInterface;
14
15
class SecuritySettingsSchema extends AbstractSettingsSchema
16
{
17
    public function buildSettings(AbstractSettingsBuilder $builder): void
18
    {
19
        $builder->setDefaults(
20
            [
21
                'filter_terms' => '',
22
                'admins_can_set_users_pass' => '',
23
                'allow_strength_pass_checker' => 'true',
24
                'allow_captcha' => 'false',
25
                'user_reset_password' => 'false',
26
                'user_reset_password_token_limit' => '3600',
27
                'captcha_number_mistakes_to_block_account' => '',
28
                'captcha_time_to_block' => '',
29
                'prevent_multiple_simultaneous_login' => 'false',
30
                'check_password' => 'false',
31
                'security_strict_transport' => 'strict-transport-security: max-age=31536000; includeSubDomains',
32
                'security_content_policy' => "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; child-src 'self' *.youtube.com yt.be *.vimeo.com *.slideshare.com;",
33
                'security_content_policy_report_only' => "default-src 'self'; script-src *://*.google.com:*",
34
                'security_public_key_pins' => '',
35
                'security_public_key_pins_report_only' => '',
36
                'security_x_frame_options' => 'SAMEORIGIN',
37
                'security_xss_protection' => '1; mode=block',
38
                'security_x_content_type_options' => 'nosniff',
39
                'security_referrer_policy' => 'origin-when-cross-origin',
40
                'security_block_inactive_users_immediately' => 'false',
41
                'password_requirements' => '',
42
                'allow_online_users_by_status' => '',
43
                'security_session_cookie_samesite_none' => 'false',
44
                'anonymous_autoprovisioning' => 'false',
45
                'access_to_personal_file_for_all' => 'false',
46
            ]
47
        );
48
        $allowedTypes = [
49
            'allow_strength_pass_checker' => ['string'],
50
        ];
51
        $this->setMultipleAllowedTypes($allowedTypes, $builder);
52
    }
53
54
    public function buildForm(FormBuilderInterface $builder): void
55
    {
56
        $builder
57
            ->add('filter_terms', TextareaType::class)
58
            ->add('admins_can_set_users_pass', YesNoType::class)
59
            ->add('allow_strength_pass_checker', YesNoType::class)
60
            ->add('allow_captcha', YesNoType::class)
61
            ->add('user_reset_password', YesNoType::class)
62
            ->add('user_reset_password_token_limit')
63
            ->add('captcha_number_mistakes_to_block_account', TextType::class)
64
            ->add('captcha_time_to_block')
65
            ->add('prevent_multiple_simultaneous_login', YesNoType::class)
66
            ->add('check_password', YesNoType::class)
67
            ->add('security_strict_transport', TextType::class)
68
            ->add('security_content_policy', TextType::class)
69
            ->add('security_content_policy_report_only', TextType::class)
70
            ->add('security_public_key_pins', TextType::class)
71
            ->add('security_public_key_pins_report_only', TextType::class)
72
            ->add('security_x_frame_options', TextType::class)
73
            ->add('security_xss_protection', TextType::class)
74
            ->add('security_x_content_type_options', TextType::class)
75
            ->add('security_referrer_policy', TextType::class)
76
            ->add('security_block_inactive_users_immediately', YesNoType::class)
77
            ->add(
78
                'password_requirements',
79
                TextareaType::class,
80
                [
81
                    'help_html' => true,
82
                    'help' => $this->settingArrayHelpValue('password_requirements'),
83
                ]
84
            )
85
            ->add(
86
                'allow_online_users_by_status',
87
                TextareaType::class,
88
                [
89
                    'help_html' => true,
90
                    'help' => $this->settingArrayHelpValue('allow_online_users_by_status'),
91
                ]
92
            )
93
            ->add('security_session_cookie_samesite_none', YesNoType::class)
94
            ->add('anonymous_autoprovisioning', YesNoType::class)
95
            ->add('access_to_personal_file_for_all', YesNoType::class)
96
        ;
97
98
        $this->updateFormFieldsFromSettingsInfo($builder);
99
    }
100
101
    private function settingArrayHelpValue(string $variable): string
102
    {
103
        $values = [
104
            'password_requirements' => "<pre>
105
                [
106
                    'min' => [
107
                        'lowercase' => 2,
108
                        'uppercase' => 2,
109
                        'numeric' => 2,
110
                        'length' => 8
111
                    ]
112
                ]
113
               </pre>",
114
            'allow_online_users_by_status' => "<pre>
115
                ['status' =>  [1, 5]]
116
                </pre>",
117
        ];
118
119
        $returnValue = [];
120
        if (isset($values[$variable])) {
121
            $returnValue = $values[$variable];
122
        }
123
124
        return $returnValue;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $returnValue could return the type array which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
125
    }
126
}
127