1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Storage;
use Carbon\Carbon;
class SiteController extends Controller
{
//returns an env mapping to be used by client. pretty much a subset of laravel app's env, but might also have addition things
public static function jsenv(){
$vars = [
'API_URL' => $_ENV['API_URL'],
'WS_URL' => $_ENV['WS_URL'],
'FILEUPLOAD_URL' => $_ENV['FILEUPLOAD_URL'] ?? '', //these 3 file vars are from old 'thesite'. fileup_url might end up being same as api_url
'FILEUPLOAD_MAX_MB' => $_ENV['FILEUPLOAD_MAX_MB'] ?? 10,
'FILEUPLOAD_CHUNK_MB' => $_ENV['FILEUPLOAD_CHUNK_MB'] ?? ''
];
return $vars;
}
//get a random dune quote
public static function duneQuote(){
$jsonFile = Storage::disk('local')->get('duneprechapterquotes.json');
$quotes = json_decode($jsonFile, true);
$book = array_rand($quotes); //random book
$quoteJSON = $quotes[$book][array_rand($quotes[$book])];
$html = "<h5>${book}</h5><p><i>${quoteJSON['quote']}</i><br> - <small>${quoteJSON['source']}</small></p>";
return $html;
}
public function uploadFiles(Request $req){
$files = $req->file('f');
$dir = $_ENV['FILEUPLOAD_DIR'] ?? 'uploads';
$returnJSON = true;
if ($req->input('response_format') == 'html'){
$returnJSON = false;
}
$res = [
'num_files' => sizeof($files),
'num_failed'=> 0,
'num_uploaded' => 0,
'success' => false,
'files' => []
];
//validate file
$maxsize = $_ENV['FILEUPLOAD_MAX_MB'] * 1024 ?? 10240; //SiteController::env()['FILEUPLOAD_MAX_MB'] * 1024;
$validated = $req->validate([
'f' => "required|array|max:${maxsize}",
'f.*' => "required|file|max:${maxsize}"
]);
foreach ($files as $f){
$filename = $f->getClientOriginalName();
if (Storage::disk('public')->fileExists("${dir}/${filename}")){
$filename = Carbon::now()->timestamp.'_'.$filename;
}
$path = $f->storeAs(
$dir,
$filename,
'public'
);
if ($path){
$res['num_uploaded'] += 1;
array_push($res['files'], $path);
} else {
$res['num_failed'] += 1;
}
}
if ($res['num_uploaded'] == sizeof($files)){
$res['success'] = true;
}
if ($returnJSON){
return $res;
} else {
//return "File uploaded: ${filename} ";
return redirect("f/${filename}"); //TODO homepage with data flashing (->with())
}
}
public function search4chan(Request $req){
$query = $req->input('query');
$board = "";
if ( $req->input('board') != null) {
$board = $req->input('board').'/'.$query;
}
$shellcmd = escapeshellcmd("python ./search4chan.py ${query} ${board}");
exec($shellcmd, $res, $ret);
return $res;
}
//used for testing various things, from /test routes
public function test(Request $req){
return $req->header('user_agent');
}
}
|