$_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' ]); } } }