summaryrefslogtreecommitdiff
path: root/app/Http/Controllers/SiteController.php
blob: a3f3fec1cbd7dc53e52f64399608075f2a07cdba (plain)
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
<?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;
    }

    public static function duneQuote(){
        return '<b>todo</b>';
    }

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

}