Passed
Push — master ( 03796d...557337 )
by Nikita
23:00 queued 11:26
created

DedicatedServersController::downloadLogs()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

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