route('login'); } $userLogged = User::where('id', '=', Auth::id())->get()->first(); $allNotifications = DB::table('notifications')->orderBy('id', 'desc')->limit('3')->get(); $siteData = SiteContext::current(); $getStreamDetails = DB::table('streamings')->where('port','=',$siteData->stream_port)->get()->first(); $getServerDetails = DB::table('servers')->where('id','=',$getStreamDetails->server_id)->get()->first(); return view('radio.file-manager', ['userLogged' => $userLogged , 'allNotifications' => $allNotifications, 'topHref' => 'radio', 'siteData' => $siteData, 'streamData' => $getStreamDetails, 'getServerDetails' => $getServerDetails]); } public function doMusicCover(Request $request) { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $siteData = SiteContext::current(); $validatedData = $request->validate([ 'file.*' => 'required|image|mimes:jpg,jpeg|max:102400', ]); $client = new Client(); try { $response = $client->request("POST", env('STORAGE_URL').'_SERVERAPI_/upload.php', [ 'decode_content' => false, 'multipart' => [ [ 'name' => 'file', 'filename' => $request->file('music_cover')->getClientOriginalName(), 'Mime-Type'=> $request->file('music_cover')->getMimeType(), 'contents' => fopen($request->file('music_cover')->path(), 'r'), ], [ 'name' => 'ext', 'contents' => $request->file('music_cover')->extension() ], [ 'name' => 'music_name', 'contents' => $request->music_name ], [ 'name' => 'port', 'contents' => $siteData->stream_port ], ] ]); } catch (\GuzzleHttp\Exception\BadResponseException $e) { return $e->getResponse()->getBody()->getContents(); } $response = $response->getBody(); $finalResp = json_decode($response,true); return $response; if(!isset($finalResp) && $finalResp->status){ return response()->json(array('status' => false), 200); } return response()->json(array('status' => true), 200); } /** * O endereco do player publico de um audio. * * A porta e o caminho do arquivo vao cifrados num parametro so, para o * codigo que o cliente cola no site dele nao revelar nem a porta do * streaming nem a pasta em que o audio esta. */ public function embed(Request $request) { if (Auth::check() === false) { return response()->json(['ok' => false], 401); } $siteData = SiteContext::current(); $stream = DB::table('streamings')->where('port', '=', $siteData->stream_port)->first(); if (! $stream) { return response()->json(['ok' => false], 404); } $file = (string) $request->input('file'); if ($file === '' || ! str_ends_with($file, '.mp3') || str_contains($file, '..')) { return response()->json(['ok' => false], 422); } $server = DB::table('servers')->where('id', '=', $stream->server_id)->first(); return response()->json([ 'ok' => true, /* Token reescrito para caber no endereco: + vira -, / vira _ e o = do fim sai */ 'url' => 'https://' . $server->name . '.' . env('BASE_SERVER_URL', 'brascast.com') . '/library/p/' . rtrim(strtr(EncryptBras($stream->port . '|' . $file), '+/', '-_'), '='), ]); } public function inject(Request $request) { $getStreamDetails = DB::table('streamings')->where('port','=',$request->port)->get()->first(); $getServerDetails = DB::table('servers')->where('id','=',$getStreamDetails->server_id)->get()->first(); $post = [ 'port' => $request->port, 'file' => $request->file ]; $ch = curl_init('https://'.$getServerDetails->name.'.'.env('BASE_SERVER_URL','brascast.com').'/bras_api/stream/Inject.php'); /* sem limite, servidor mudo segura o processo ate o teto do PHP */ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "CURL"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Hash: 4BEAD0A3736F606092EADB5540B277966C2735F98294BD50547DB391ABB37E99", "Secret: streamingbrascastsrvr" ]); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $response = curl_exec($ch); curl_close($ch); if($response){ return true; } } public function diskSpace(Request $request, $ac = null, $port = null) { if(!$ac || !$port){ return response()->json(array('status' => false), 200); } if($ac == 'add'){ DB::table('streamings')->where('port','=',$port)->increment('plan_space_used',$request->kb); return response()->json(array('status' => true), 200); }elseif($ac == 'remove'){ DB::table('streamings')->where('port','=',$port)->update(['plan_space_used' => DB::raw('GREATEST(plan_space_used - '.$request->kb.', 0)')]); return response()->json(array('status' => true), 200); /* Prefent negatives */ }elseif($ac == 'set'){ DB::table('streamings')->where('port','=',$port)->update(['plan_space_used' => ($request->kb <= 16 ? '0' : $request->kb)]); return response()->json(array('status' => true), 200); }else{ $details = DB::table('streamings')->where('port', $port)->first(); return response()->json([ 'status' => true, 'usedKB' => $details->plan_space_used, 'plan_spaceKB' => $details->plan_space, 'total' => round(($details->plan_space_used / $details->plan_space) * 100) ], 200); } } }