SettingController::saveAdldapKeyFormat()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 33
ccs 0
cts 29
cp 0
rs 9.392
c 0
b 0
f 0
cc 3
nc 4
nop 1
crap 12
1
<?php
2
3
namespace SET\Http\Controllers;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Config;
7
use SET\Setting;
8
use SET\User;
9
10
class SettingController extends Controller
11
{
12
    /**
13
     * Display a listing of the resource.
14
     *
15
     * @return \Illuminate\Http\Response
16
     */
17
    public function index()
18
    {
19
        $this->authorize('edit');
20
21
        $settings = Setting::getAll();
22
        $ldapControllers = $settings['adldap.connections.default.connection_settings.domain_controllers'] ?? config('adldap.connections.default.connection_settings.domain_controllers');
23
        $settings['ldap_controller1'] = $ldapControllers[0];
24
        $settings['ldap_controller2'] = $ldapControllers[1];
25
        //$settings['summary_recipient'] = explode(',', $settings['summary_recipient']);
26
        $settings['summary_recipient'] = User::whereIn('id', $settings['summary_recipient'])->pluck('id')->all();
27
28
        $users = User::skipSystem()->active()->get()->sortBy('UserFullName');
29
        $userList = $users->pluck('UserFullName', 'id');
30
        $admins = $users->where('role', 'edit')->pluck('id')->all();
31
        $viewers = $users->where('role', 'view')->pluck('id')->all();
32
        $configAdmins = User::whereIn('username', Config::get('auth.admin'))
33
            ->get()->pluck('userFullName')->implode('; ');
34
35
        return view('setting.index', compact('settings', 'userList', 'admins', 'configAdmins', 'viewers'));
36
    }
37
38
    /**
39
     * Update the specified resource in storage.
40
     *
41
     * @param \Illuminate\Http\Request $request
42
     *
43
     * @return \Illuminate\Http\RedirectResponse
44
     */
45
    public function update(Request $request)
46
    {
47
        $this->authorize('edit');
48
49
        $data = $request->all();
50
        $data = $this->updateUserRoles($data);
51
        $data = $this->saveAdldapKeyFormat($data);
52
53
        unset($data['_method']);
54
        unset($data['_token']);
55
56
        foreach ($data as $key => $value) {
57
            Setting::set($key, $value);
58
        }
59
60
        return redirect()->action('SettingController@index');
61
    }
62
63
    /**
64
     * @param $data
65
     *
66
     * @return mixed
67
     */
68
    private function updateUserRoles($data)
69
    {
70
        User::where('role', '!=', '')->update(['role' => '']);
71
        if (isset($data['viewer'])) {
72
            User::whereIn('id', $data['viewer'])->update(['role' => 'view']);
73
            unset($data['viewer']);
74
        }
75
        if (isset($data['admin'])) {
76
            User::whereIn('id', $data['admin'])->update(['role' => 'edit']);
77
            unset($data['admin']);
78
        }
79
80
        return $data;
81
    }
82
83
    /**
84
     * PHP converts our periods to underscores.
85
     * This causes issues where adldap can't figure out the ADLDAP settings.
86
     * As such, we need to convert the correct underscores back to their dot notation.
87
     * Note: some underscores must be retained.
88
     *
89
     * @param $data
90
     */
91
    private function saveAdldapKeyFormat($data)
92
    {
93
        $adldapData = [
94
            'auth.providers.users.driver'                                   => 'auth_driver',
95
            'adldap.connections.default.connection_settings.base_dn'        => 'adldap_connections_default_connection_settings_base_dn',
96
            'adldap.connections.default.connection_settings.admin_username' => 'adldap_connections_default_connection_settings_admin_username',
97
            'adldap.connections.default.connection_settings.admin_password' => 'adldap_connections_default_connection_settings_admin_password',
98
            'adldap.connections.default.connection_settings.account_prefix' => 'adldap_connections_default_connection_settings_account_prefix',
99
            'adldap.connections.default.connection_settings.account_suffix' => 'adldap_connections_default_connection_settings_account_suffix',
100
            'adldap_auth.limitation_filter'                                 => 'adldap_auth_limitation_filter',
101
            'mail.driver'                                                   => 'mail_driver',
102
            'mail.username'                                                 => 'mail_username',
103
            'mail.password'                                                 => 'mail_password',
104
            'mail.port'                                                     => 'mail_port',
105
            'mail.encryption'                                               => 'mail_encryption',
106
            'mail.host'                                                     => 'mail_host',
107
        ];
108
109
        foreach ($adldapData as $correctKey => $formKey) {
110
            $data[$correctKey] = $data[$formKey];
111
            unset($data[$formKey]);
112
        }
113
114
        $data['adldap.connections.default.connection_settings.domain_controllers'] = [$data['ldap_controller1'], $data['ldap_controller2']];
115
        unset($data['ldap_controller1']);
116
        unset($data['ldap_controller2']);
117
118
        if ($data['adldap.connections.default.connection_settings.admin_password'] == '') {
119
            $data['adldap.connections.default.connection_settings.admin_password'] = Setting::get('adldap.connections.default.connection_settings.admin_password');
120
        }
121
122
        return $data;
123
    }
124
}
125