$_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 = "
${book}
${quoteJSON['quote']}
- ${quoteJSON['source']}
";
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');
}
public function updateSession(){
}
//todo 2/14
public function importItems(Request $request) {
if (Auth::user()->role != 0) { //admin
return response()->json([
'success' => false,
'message' => 'Unauthorized'
], 401);
}
if (isset($request->modelType)){ //model type must be specified as a string
$modelClass = 'App\\Models\\' . ucfirst($request->modelType);
if (class_exists($modelClass)){
$jsonFile = $request->file('jsonFile');
if ($jsonFile == null){
return response()->json([
'success' => false,
'message' => 'No file uploaded'
], 400);
}
$f = str($jsonFile->get());
$items = json_decode($f); //this should be an array
//TODO verify valid json
if (!is_array($items)) {
return response()->json([
'success' => false,
'message' => 'json in submitted file must be an array of items'
], 400);
}
$imported = 0;
$failed = 0;
$errors = [];
foreach ($items as $item) {
try {
$instance = new $modelClass();
foreach ($instance->fillable as $field) {
if (isset($item->$field)){
$instance->$field = $item->$field;
}
}
$instance->user_id = Auth::user()->id;
$instance->saveOrFail();
$imported++;
} catch (\Exception $e) {
$failed++;
$errors[] = "Failed to import item: " . $e->getMessage();
}
}
return response()->json([
'success' => $failed === 0,
'imported' => $imported,
'failed' => $failed,
'errors' => $errors
]);
} else {
return response()->json([
"success"=> false,
'error' => 'model type does not exist'
]);
}
} else {
return response()->json([
'success'=> false,
'error'=> 'no modelType specified'
]);
}
}
}