web.php 13.9 KB
Newer Older
Dominik Hebeler's avatar
Dominik Hebeler committed
1
2
<?php

3
use Illuminate\Support\Facades\Redis;
4
use Jenssegers\Agent\Agent;
Dominik Hebeler's avatar
Dominik Hebeler committed
5
use Prometheus\RenderTextFormat;
6

Dominik Hebeler's avatar
Dominik Hebeler committed
7
8
/*
|--------------------------------------------------------------------------
9
| Web Routes
Dominik Hebeler's avatar
Dominik Hebeler committed
10
11
|--------------------------------------------------------------------------
|
12
13
14
| This file is where you may define all of the routes that are handled
| by your application. Just tell Laravel the URIs it should respond
| to using a Closure or controller method. Build something great!
Dominik Hebeler's avatar
Dominik Hebeler committed
15
|
16
 */
17
18
19
20
21
22
23
24
25
26
27

Route::get("robots.txt", function(Request $request){
    $responseData = "";
    if(App::environment("production")){
        $responseData = view("robots.production");
    }else{
        $responseData = view("robots.development");
    }
    return response($responseData, 200, ["Content-Type" => "text/plain"]);
});

28
29
30
31
32
33
34
Route::group(
    [
        'prefix' => LaravelLocalization::setLocale(), /*,
    'middleware' => [ 'localeSessionRedirect', 'localizationRedirect' ]*/
    ],
    function () {
        /** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
35

36
        Route::get('/', 'StartpageController@loadStartPage')->name("startpage")->middleware("removekey");
37

38
        Route::get('asso', function () {
39
40
41
            return view('assoziator.asso')
                ->with('title', trans('titles.asso'))
                ->with('navbarFocus', 'dienste');
42
43
        });
        Route::post('asso', 'Assoziator@asso');
44

45
46
47
48
49
50
51
52
        Route::get('impressum', function () {
            return view('impressum')
                ->with('title', trans('titles.impressum'))
                ->with('navbarFocus', 'kontakt');
        });
        Route::get('impressum.html', function () {
            return redirect(url('impressum'));
        });
53

54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
        Route::get('about', function () {
            return view('about')
                ->with('title', trans('titles.about'))
                ->with('navbarFocus', 'kontakt');
        });
        Route::get('team', function () {
            return view('team.team')
                ->with('title', trans('titles.team'))
                ->with('navbarFocus', 'kontakt');
        });
        Route::get('team/pubkey-wsb', function () {
            return view('team.pubkey-wsb')
                ->with('title', trans('titles.team'))
                ->with('navbarFocus', 'kontakt');
        });
69

70
        Route::get('kontakt/{url?}', function ($url = "") {
71
72
            return view('kontakt.kontakt')
                ->with('title', trans('titles.kontakt'))
73
                ->with('navbarFocus', 'kontakt')
74
                ->with('url', $url);
Dominik Hebeler's avatar
Dominik Hebeler committed
75
        })->name("contact");
Dominik Hebeler's avatar
Dominik Hebeler committed
76

77
        Route::post('kontakt', 'MailController@contactMail');
78

79
80
81
82
83
84
85
86
        Route::get('tor', function () {
            return view('tor')
                ->with('title', 'tor hidden service - MetaGer')
                ->with('navbarFocus', 'dienste');
        });
        Route::get('spende', function () {
            return view('spende.spende')
                ->with('title', trans('titles.spende'))
87
                ->with('js', [mix('/js/donation.js')])
88
89
                ->with('navbarFocus', 'foerdern');
        });
90
        Route::get('spende/danke/{data}', ['as' => 'danke', function ($data) {
91
92
93
94
            return view('spende.danke')
                ->with('title', trans('titles.spende'))
                ->with('navbarFocus', 'foerdern')
                ->with('data', unserialize(base64_decode($data)));
95
        }]);
96
97
98
        Route::get('partnershops', function () {
            return view('spende.partnershops')
                ->with('title', trans('titles.partnershops'))
99
                ->with('navbarFocus', 'foerdern');
100
        });
101

102
        Route::get('beitritt', function () {
103
            if (LaravelLocalization::getCurrentLocale() === "de") {
104
                return response()->download(storage_path('app/public/aufnahmeantrag-de.pdf'), "SUMA-EV_Beitrittsformular_" . (new \DateTime())->format("Y_m_d") . ".pdf", ["Content-Type" => "application/pdf"]);
105
            } else {
106
                return response()->download(storage_path('app/public/aufnahmeantrag-en.pdf'), "SUMA-EV_Membershipform_" . (new \DateTime())->format("Y_m_d") . ".pdf", ["Content-Type" => "application/pdf"]);
107
            }
108
        });
109

110
111
112
        Route::get('bform1.htm', function () {
            return redirect('beitritt');
        });
113

114
        Route::post('spende', 'MailController@donation');
115

116
        Route::get('datenschutz', function () {
117
            return view('datenschutz/datenschutz')
118
119
120
                ->with('title', trans('titles.datenschutz'))
                ->with('navbarFocus', 'datenschutz');
        });
Dominik Hebeler's avatar
Dominik Hebeler committed
121

Dominik Hebeler's avatar
Dominik Hebeler committed
122
        Route::get('transparency', function () {
123
124
125
            return view('transparency')
                 ->with('title', trans('titles.transparency'))
                 ->with('navbarFocus', 'kontakt');
Dominik Hebeler's avatar
Dominik Hebeler committed
126
        });
127

128
129
130
        Route::get('hilfe', function () {
            return view('hilfe')
                ->with('title', trans('titles.hilfe'))
131
132
                ->with('navbarFocus', 'hilfe');
        });
133

Karl Hasselbring's avatar
Karl Hasselbring committed
134
        Route::get('hilfe/faktencheck', function () {
135
136
137
138
139
            return view('faktencheck')
                ->with('title', trans('titles.faktencheck'))
                ->with('navbarFocus', 'hilfe');
        });

140
        Route::get('faq', function () {
Dominik Hebeler's avatar
Dominik Hebeler committed
141
            return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), '/hilfe'));
142
        });
143

144
        Route::get('widget', function () {
145
            return view('widget.widget')
146
147
                ->with('title', trans('titles.widget'))
                ->with('navbarFocus', 'dienste');
karl's avatar
karl committed
148
        });
149
150
151

        Route::get('sitesearch', 'SitesearchController@loadPage');

152
        Route::get('websearch', function () {
153
154
            return view('widget.websearch')
                ->with('title', trans('titles.websearch'))
Dominik Hebeler's avatar
Dominik Hebeler committed
155
156
                ->with('navbarFocus', 'dienste')
                ->with('template', view('widget.websearch-template')->render());
157
158
        });

159
160
        Route::get('zitat-suche', 'ZitatController@zitatSuche');

Karl Hasselbring's avatar
Karl Hasselbring committed
161
162
163
164
165
        Route::get('jugendschutz', function () {
            return view('jugendschutz')
                ->with('title', trans('titles.jugendschutz'));
        });

Karl Hasselbring's avatar
Karl Hasselbring committed
166
167
168
169
170
        Route::get('ad-info', function () {
            return view('ad-info')
                ->with('title', trans('titles.ad-info'));
        });

Karl Hasselbring's avatar
Karl Hasselbring committed
171
172
173
174
175
176
177
178
179
180
181
182
        Route::get('age.xml', function () {
            $response = Response::make(file_get_contents(resource_path('age/age.xml')));
            $response->header('Content-Type', "application/xml");
            return $response;
        });

        Route::get('age-de.xml', function () {
            $response = Response::make(file_get_contents(resource_path('age/age-de.xml')));
            $response->header('Content-Type', "application/xml");
            return $response;
        });

183
184
185
186
        Route::get('plugin', function () {
            return view('plugin-page')
                ->with('title', trans('titles.plugin'))
                ->with('navbarFocus', 'dienste')
187
                ->with('agent', new Agent())
188
                ->with('browser', (new Agent())->browser())
Davide's avatar
Davide committed
189
                ->with('request', $this->input('request', 'GET'));
190
191
        });

Dominik Hebeler's avatar
Dominik Hebeler committed
192
        Route::group(['middleware' => ['auth.basic'], 'prefix' => 'admin'], function () {
193
            Route::get('/', 'AdminInterface@index');
Karl Hasselbring's avatar
Karl Hasselbring committed
194
            Route::match(['get', 'post'], 'count', 'AdminInterface@count');
Dominik Hebeler's avatar
Dominik Hebeler committed
195
            Route::get('timings', 'MetaGerSearch@searchTimings');
Dominik Hebeler's avatar
Dominik Hebeler committed
196
            Route::get('count/graphtoday.svg', 'AdminInterface@countGraphToday');
Dominik Hebeler's avatar
Dominik Hebeler committed
197
            Route::get('engine/stats.json', 'AdminInterface@engineStats');
198
199
            Route::get('check', 'AdminInterface@check');
            Route::get('engines', 'AdminInterface@engines');
Dominik Hebeler's avatar
Dominik Hebeler committed
200
            Route::get('ip', function () {
Dominik Hebeler's avatar
Dominik Hebeler committed
201
                dd(Request::ip(), $_SERVER["AGENT"]);
Dominik Hebeler's avatar
Dominik Hebeler committed
202
            });
203
204
            Route::get('bot', 'HumanVerification@botOverview');
            Route::post('bot', 'HumanVerification@botOverviewChange');
205
206
207
208
209
210
211
            Route::group(['prefix' => 'spam'], function () {
                Route::get('/', 'AdminSpamController@index');
                Route::post('/', 'AdminSpamController@ban');
                Route::get('jsonQueries', 'AdminSpamController@jsonQueries');
                Route::post('queryregexp', 'AdminSpamController@queryregexp');
                Route::post('deleteRegexp', 'AdminSpamController@deleteRegexp');
            });
Dominik Hebeler's avatar
Dominik Hebeler committed
212
            Route::post('service-desk', 'ServiceDesk@webhook');
213
            Route::get('stress', 'Stresstest@index');
Davide Aprea's avatar
Davide Aprea committed
214
            Route::get('stress/verify', 'Stresstest@index')->middleware('browserverification', 'humanverification');
215
216
217
            Route::get('adgoal', 'AdgoalTestController@index')->name("adgoal-index");
            Route::post('adgoal', 'AdgoalTestController@post')->name("adgoal-generate");
            Route::post('adgoal/generate-urls', 'AdgoalTestController@generateUrls')->name("adgoal-urls");
218
        });
Dominik Hebeler's avatar
Dominik Hebeler committed
219

220
221
222
        Route::get('settings', function () {
            return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), '/'));
        });
karl's avatar
karl committed
223

224
        Route::match(['get', 'post'], 'meta/meta.ger3', 'MetaGerSearch@search')->middleware('removekey', 'browserverification', 'humanverification', 'useragentmaster')->name("resultpage");
Dominik Hebeler's avatar
Dominik Hebeler committed
225

226
        Route::get('meta/loadMore', 'MetaGerSearch@loadMore');
227
        Route::post('img/cat.png', 'HumanVerification@remove');
228
        Route::get('verify/metager/{id}/{uid}', ['as' => 'captcha', 'uses' => 'HumanVerification@captcha']);
Dominik Hebeler's avatar
Dominik Hebeler committed
229
        Route::get('r/metager/{mm}/{pw}/{url}', ['as' => 'humanverification', 'uses' => 'HumanVerification@removeGet']);
230
        Route::post('img/dog.jpg', 'HumanVerification@whitelist');
Dominik Hebeler's avatar
Dominik Hebeler committed
231
        Route::get('index.css', 'HumanVerification@browserVerification');
232
233
234
235
236
237
238
239
240
241
242
243
244
        Route::get('index.js', function () {
            $key = Request::input("id", "");

            // Verify that key is a md5 checksum
            if (!preg_match("/^[a-f0-9]{32}$/", $key)) {
                abort(404);
            }

            Redis::connection("cache")->pipeline(function ($redis) use ($key) {
                $redis->rpush("js" . $key, true);
                $redis->expire($key, 30);
            });

Dominik Hebeler's avatar
Dominik Hebeler committed
245
            return response("", 200)->header("Content-Type", "application/javascript");
246
        });
Karl Hasselbring's avatar
Karl Hasselbring committed
247

248
249
250
251
        Route::get('meta/picture', 'Pictureproxy@get');
        Route::get('clickstats', 'LogController@clicklog');
        Route::get('pluginClose', 'LogController@pluginClose');
        Route::get('pluginInstall', 'LogController@pluginInstall');
252

253
        Route::get('qt', 'MetaGerSearch@quicktips');
254
        Route::get('tips', 'MetaGerSearch@tips');
255
        Route::get('/plugins/opensearch.xml', 'StartpageController@loadPlugin');
256
257
258
        Route::get('owi', function () {
            return redirect('https://metager.de/klassik/en/owi/');
        });
Dominik Hebeler's avatar
Dominik Hebeler committed
259
260
261
262
263
264
        Route::get('MG20', function () {
            return redirect('https://metager.de/klassik/MG20');
        });
        Route::get('databund', function () {
            return redirect('https://metager.de/klassik/databund');
        });
265
        Route::get('languages', 'LanguageController@createOverview');
266
        Route::get('synoptic/{exclude?}/{chosenFile?}', 'LanguageController@createSynopticEditPage');
267
        Route::post('synoptic/{exclude?}/{chosenFile?}', 'LanguageController@processSynopticPageInput');
268
        Route::get('languages/edit/{from}/{to}/{exclude?}/{email?}', 'LanguageController@createEditPage');
Aria Givi's avatar
Aria Givi committed
269
        Route::post('languages/edit/{from}/{to}/{exclude?}/{email?}', 'MailController@sendLanguageFile');
270
271
272
273
274
275
276
277

        Route::group(['prefix' => 'app'], function () {
            Route::get('/', function () {
                return view('app')
                    ->with('title', trans('titles.app'))
                    ->with('navbarFocus', 'dienste');
            });
            Route::get('metager', function () {
278
279
                return response()->streamDownload(function () {
                    $fh = null;
Dominik Hebeler's avatar
Dominik Hebeler committed
280
                    try {
Dominik Hebeler's avatar
Dominik Hebeler committed
281
                        $fh = fopen("https://gitlab.metager.de/open-source/app-en/-/raw/latest/app/release_manual/app-release_manual.apk", "r");
Dominik Hebeler's avatar
Dominik Hebeler committed
282
                        while (!feof($fh)) {
Dominik Hebeler's avatar
Dominik Hebeler committed
283
                            echo(fread($fh, 1024));
284
                        }
Dominik Hebeler's avatar
Dominik Hebeler committed
285
                    } catch (\Exception $e) {
286
                        abort(404);
Dominik Hebeler's avatar
Dominik Hebeler committed
287
288
                    } finally {
                        if ($fh != null) {
289
290
291
292
                            fclose($fh);
                        }
                    }
                }, 'MetaGerSearch.apk', ["Content-Type" => "application/vnd.android.package-archive"]);
293
294
            });
            Route::get('maps', function () {
295
296
                return response()->streamDownload(function () {
                    $fh = null;
Dominik Hebeler's avatar
Dominik Hebeler committed
297
                    try {
Dominik Hebeler's avatar
Dominik Hebeler committed
298
                        $fh = fopen("https://gitlab.metager.de/open-source/metager-maps-android/raw/latest/app/release/app-release.apk?inline=false", "r");
Dominik Hebeler's avatar
Dominik Hebeler committed
299
                        while (!feof($fh)) {
Dominik Hebeler's avatar
Dominik Hebeler committed
300
                            echo(fread($fh, 1024));
301
                        }
Dominik Hebeler's avatar
Dominik Hebeler committed
302
                    } catch (\Exception $e) {
303
                        abort(404);
Dominik Hebeler's avatar
Dominik Hebeler committed
304
305
                    } finally {
                        if ($fh != null) {
306
307
308
309
                            fclose($fh);
                        }
                    }
                }, 'MetaGerMaps.apk', ["Content-Type" => "application/vnd.android.package-archive"]);
310
            });
Dominik Hebeler's avatar
Dominik Hebeler committed
311

Dominik Hebeler's avatar
Dominik Hebeler committed
312
            Route::get('maps/version', function () {
313
                $filePath = env('maps_version');
Dominik Hebeler's avatar
Dominik Hebeler committed
314
315
316
317
                $fileContents = file_get_contents($filePath);
                return response($fileContents, 200)
                    ->header('Content-Type', 'text/plain');
            });
318
        });
319

Dominik Hebeler's avatar
Dominik Hebeler committed
320
        Route::get('metrics', function () {
321
322
323
324
325
326
            $registry = \Prometheus\CollectorRegistry::getDefault();

            $renderer = new RenderTextFormat();
            $result = $renderer->render($registry->getMetricFamilySamples());

            return response($result, 200)
Dominik Hebeler's avatar
Dominik Hebeler committed
327
                ->header('Content-Type', RenderTextFormat::MIME_TYPE);
328
        });
Dominik Hebeler's avatar
Dominik Hebeler committed
329
330
    }
);