Passed
Push — develop ( 7e8ba4...bf1554 )
by Nikita
06:23
created

DedicatedServersController::update()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 23
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 4.679

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 13
dl 0
loc 23
ccs 6
cts 14
cp 0.4286
rs 9.8333
c 1
b 0
f 0
cc 3
nc 3
nop 2
crap 4.679
1
<?php
2
3
namespace Gameap\Http\Controllers\Admin;
4
5
use Gameap\Http\Controllers\AuthController;
6
use Gameap\Http\Requests\Request;
7
use Gameap\Models\ClientCertificate;
8
use Gameap\Models\DedicatedServer;
9
use Gameap\Repositories\DedicatedServersRepository;
10
use Gameap\Http\Requests\Admin\DedicatedServerRequest;
11
use Illuminate\Support\Facades\Cache;
12
use Illuminate\Support\Str;
13
use Illuminate\Support\Facades\Storage;
14
use Knik\Gameap\GdaemonStatus;
15
use RuntimeException;
16
17
class DedicatedServersController extends AuthController
18
{
19
    /**
20
     * The DedicatedServersRepository instance.
21
     *
22
     * @var \Gameap\Repositories\DedicatedServersRepository
23
     */
24
    protected $repository;
25
26
    /**
27
     * Create a new DedicatedServersController instance.
28
     *
29
     * @param  \Gameap\Repositories\DedicatedServersRepository $repository
30
     */
31 30
    public function __construct(DedicatedServersRepository $repository)
32
    {
33 30
        parent::__construct();
34
35 30
        $this->repository = $repository;
36 30
    }
37
38
    /**
39
     * Display a listing of the resource.
40
     *
41
     * @return \Illuminate\View\View
42
     */
43 6
    public function index()
44
    {
45 6
        $dedicatedServers = $this->repository->getAll();
46
47 6
        return view('admin.dedicated_servers.list', [
48 6
            'dedicatedServers' => $dedicatedServers
49
        ]);
50
    }
51
52
    /**
53
     * Show the form for creating a new resource.
54
     *
55
     * @return \Illuminate\View\View
56
     */
57 3
    public function create()
58
    {
59
        // Add auto setup token
60 3
        $autoSetupToken = Str::random(24);
61 3
        Cache::put('gdaemonAutoSetupToken', $autoSetupToken, 300);
62
63 3
        $clientCertificates = ClientCertificate::all(['id', 'fingerprint'])->pluck('fingerprint', 'id');
64 3
        return view('admin.dedicated_servers.create', compact('clientCertificates', 'autoSetupToken'));
65
    }
66
67
    /**
68
     * Store a newly created resource in storage.
69
     *
70
     * @param  \Gameap\Http\Requests\Admin\DedicatedServerRequest  $request
71
     * @return \Illuminate\Http\RedirectResponse
72
     */
73 3
    public function store(DedicatedServerRequest $request)
74
    {
75 3
        $attributes = $request->all();
76
77 3
        if ($request->hasFile('gdaemon_server_cert')) {
78
            $attributes['gdaemon_server_cert'] = $request->file('gdaemon_server_cert')->store(
79
                'certs/server', 'local'
80
            );
81
        }
82
83 3
        $this->repository->store($attributes);
84
85 3
        return redirect()->route('admin.dedicated_servers.index')
86 3
            ->with('success', __('dedicated_servers.create_success_msg'));
87
    }
88
89
    /**
90
     * Display the specified resource.
91
     *
92
     * @param \Gameap\Models\DedicatedServer $dedicatedServer
93
     * @param GdaemonStatus $gdaemonStatus
94
     * @return \Illuminate\View\View
95
     */
96 6
    public function show(DedicatedServer $dedicatedServer, GdaemonStatus $gdaemonStatus)
97
    {
98 6
        $gdaemonStatus->setConfig($dedicatedServer->gdaemonSettings());
99
100
        try {
101 6
            $gdaemonVersion = $gdaemonStatus->version();
102 3
            $baseInfo = $gdaemonStatus->infoBase();
103 3
        } catch (RuntimeException $e) {
104 3
            $gdaemonVersion = [];
105 3
            $baseInfo = [];
106
        }
107
108 6
        return view('admin.dedicated_servers.view',
109 4
            compact(
110 6
                'dedicatedServer',
111 6
                'gdaemonVersion',
112 6
                'baseInfo'
113
            )
114
        );
115
    }
116
117
    /**
118
     * Show the form for editing the specified resource.
119
     *
120
     * @param  \Gameap\Models\DedicatedServer  $dedicatedServer
121
     * @return \Illuminate\View\View
122
     */
123 6
    public function edit(DedicatedServer $dedicatedServer)
124
    {
125 6
        $clientCertificates = ClientCertificate::all(['id', 'fingerprint'])->pluck('fingerprint', 'id');
126 6
        return view('admin.dedicated_servers.edit', compact('dedicatedServer', 'clientCertificates'));
127
    }
128
129
    /**
130
     * Update the specified resource in storage.
131
     *
132
     * @param  \Gameap\Http\Requests\Admin\DedicatedServerRequest  $request
133
     * @param  \Gameap\Models\DedicatedServer  $dedicatedServer
134
     * @return \Illuminate\Http\RedirectResponse
135
     */
136 3
    public function update(DedicatedServerRequest $request, DedicatedServer $dedicatedServer)
137
    {
138 3
        $attributes = $request->all();
139
        
140 3
        if ($request->hasFile('gdaemon_server_cert')) {
141
            $attributes['gdaemon_server_cert'] = $request->file('gdaemon_server_cert')->store(
142
                'certs/server', 'local'
143
            );
144
145
            $certificateFile = Storage::disk('local')
146
                ->getDriver()
147
                ->getAdapter()
148
                ->applyPathPrefix($dedicatedServer->gdaemon_server_cert);
149
            
150
            if (file_exists($certificateFile)) {
151
                unlink($certificateFile);
152
            }
153
        }
154
        
155 3
        $this->repository->update($dedicatedServer, $attributes);
156
157 3
        return redirect()->route('admin.dedicated_servers.index')
158 3
            ->with('success',  __('dedicated_servers.update_success_msg'));
159
    }
160
161
    /**
162
     * Remove the specified resource from storage.
163
     *
164
     * @param  \Gameap\Models\DedicatedServer  $dedicatedServer
165
     * @return \Illuminate\Http\RedirectResponse
166
     */
167 3
    public function destroy(DedicatedServer $dedicatedServer)
168
    {
169 3
        $this->repository->destroy($dedicatedServer);
170
171 3
        return redirect()->route('admin.dedicated_servers.index')
172 3
            ->with('success',  __('dedicated_servers.delete_success_msg'));
173
    }
174
}
175