diff --git a/fuel/app/classes/controller/rest/settings.php b/fuel/app/classes/controller/rest/settings.php index a8bf92b..4edbac9 100644 --- a/fuel/app/classes/controller/rest/settings.php +++ b/fuel/app/classes/controller/rest/settings.php @@ -2,6 +2,8 @@ use Fuel\Core\Controller_Rest; use Fuel\Core\FuelException; +use Fuel\Core\Input; +use Fuel\Core\Request; use Fuel\Core\Session; use Fuel\Core\View; @@ -9,7 +11,7 @@ class Controller_Rest_Settings extends Controller_Rest { public function get_modal_server() { - $view = View::forge('modal/modal'); + $view = View::forge('modal/server'); return $this->response($view->render()); } @@ -21,10 +23,19 @@ class Controller_Rest_Settings extends Controller_Rest $url = Input::post('url'); $port = Input::post('port'); $token = Input::post('token'); + $https = Input::post('https') === 'true' ? true : false; //@TODO CHECK AND REMOVE HTTP AND HTTPS - $curl = Request::forge('http://' . $url . ($port ? ':' . $port : '') . '/?X-Plex-Token=' . $token, 'curl'); + $curl = Request::forge(($https ? 'https' : 'http') . '://' . $url . ($port ? ':' . $port : '') . '/?X-Plex-Token=' . $token, 'curl'); + + if($https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $result = $curl->execute(); if(!$result) @@ -33,6 +44,7 @@ class Controller_Rest_Settings extends Controller_Rest $server = ($server_id === '' ? Model_Server::forge() : Model_Server::find_by_pk($server_id)); $server->set([ 'user_id' => Session::get('user')->id, + 'https' => $https, 'url' => $url, 'port' => $port, 'token' => $token, @@ -40,9 +52,9 @@ class Controller_Rest_Settings extends Controller_Rest ]); $server->save(); - return $this->response(array('error' => false)); + return $this->response(['error' => false]); } catch (FuelException $e) { - return $this->response(array('error' => true, 'message' => $e->getMessage() ?: 'Wrong parameters'), $e->getCode()); + return $this->response(['error' => true, 'message' => $e->getMessage() ?: 'Wrong parameters'], $e->getCode() > 100 ? $e->getCode() : null); } } diff --git a/fuel/app/classes/model/library.php b/fuel/app/classes/model/library.php index 96de899..4ec58ba 100644 --- a/fuel/app/classes/model/library.php +++ b/fuel/app/classes/model/library.php @@ -58,7 +58,15 @@ class Model_Library extends Model_Overwrite try { $libraries_id_array = []; - $curl = Request::forge('http://' . $server->url . ($server->port ? ':' . $server->port : '') . '/library/sections?X-Plex-Token=' . $server->token, 'curl'); + $curl = Request::forge(($server->https ? 'https' : 'http') . '://' . $server->url . ($server->port ? ':' . $server->port : '') . '/library/sections?X-Plex-Token=' . $server->token, 'curl'); + + if($server->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); if ($curl->response()->status !== 200) @@ -114,7 +122,15 @@ class Model_Library extends Model_Overwrite */ public static function getSectionsContent($server, $library) { - $curl = Request::forge('http://' . $server->url . ($server->port? ':' . $server->port : '') . '/library/sections/' . $library->plex_key . '/all?X-Plex-Token=' . $server->token, 'curl'); + $curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port? ':' . $server->port : '') . '/library/sections/' . $library->plex_key . '/all?X-Plex-Token=' . $server->token, 'curl'); + + if($server->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); if($curl->response()->status !== 200) diff --git a/fuel/app/classes/model/movie.php b/fuel/app/classes/model/movie.php index 41ec472..42f2187 100644 --- a/fuel/app/classes/model/movie.php +++ b/fuel/app/classes/model/movie.php @@ -129,11 +129,22 @@ class Model_Movie extends Model_Overwrite $curl = null; if (!$width && !$height) - $curl = Request::forge('http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $path . '?X-Plex-Token=' . $this->_server->token, 'curl'); + $curl = Request::forge(($this->_server->https === '1' ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $path . '?X-Plex-Token=' . $this->_server->token, 'curl'); else - $curl = Request::forge('http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/photo/:/transcode?width=' . $width . '&height=' . $height . '&minSize=1&url=' . $path . '&X-Plex-Token=' . $this->_server->token, 'curl'); + $curl = Request::forge(($this->_server->https === '1' ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/photo/:/transcode?width=' . $width . '&height=' . $height . '&minSize=1&url=' . $path . '&X-Plex-Token=' . $this->_server->token, 'curl'); - $curl->execute(); + if($this->_server->https === '1') { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + + try { + $curl->execute(); + } catch (Exception $exception) { + Cache::set($this->id . $path_cache, null); + } if ($curl->response()->status !== 200) return false; @@ -164,6 +175,29 @@ class Model_Movie extends Model_Overwrite } } + public function getArt($width = null, $height = null) + { + $path_cache = null; + $art = null; + + if(!$width && !$height) + $path_cache = '.art'; + else + $path_cache = '.art_' . $width . '_' . $height; + + try { + $art = Cache::get($this->id . $path_cache); + + if ($art) + return $art; + } catch (CacheNotFoundException $e) { + $this->getPicture($this->art, $path_cache, $width, $height); + + $art = Cache::get($this->id . $path_cache); + return $art; + } + } + /** * @return array|mixed * @throws FuelException @@ -178,7 +212,15 @@ class Model_Movie extends Model_Overwrite if(!$this->_server) $this->getServer(); - $curl = Request::forge('http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $this->plex_key . '?X-Plex-Token=' . $this->_server->token, 'curl'); + $curl = Request::forge(($this->_server->https === '1' ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $this->plex_key . '?X-Plex-Token=' . $this->_server->token, 'curl'); + + if($this->_server->https === '1') { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); $array = Format::forge($curl->response()->body, 'xml')->to_array(); @@ -258,7 +300,8 @@ class Model_Movie extends Model_Overwrite $subtitleSize = isset($user_settings->subtitle) ? $user_settings->subtitle : 100; $language = isset($user_settings->language) ? $user_settings->language : false; - $request = 'http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : ''); + $request = $this->_server->https === '1' ? 'https' : 'http'; + $request .= '://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : ''); //$request .= '/video/:/transcode/universal/decision?hasMDE=1'; // DASH $request .= '/video/:/transcode/universal/start.m3u8'; // HLS $request .= '?identifier=[PlexShare]'; @@ -281,6 +324,13 @@ class Model_Movie extends Model_Overwrite $curl = Request::forge($request, 'curl'); + if($this->_server->https === '1') { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); if ($curl->response()->status !== 200) @@ -298,9 +348,12 @@ class Model_Movie extends Model_Overwrite $this->_session = $split[1]; - return 'http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/video/:/transcode/universal/session/' . $this->_session . '/base/index.m3u8'; + return ($this->_server->https === '1' ? 'https' : 'http') . '://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/video/:/transcode/universal/session/' . $this->_session . '/base/index.m3u8'; } catch (Exception $exception) { - throw new FuelException('Cannot connect to the server.
The token must be outdated!',$exception->getCode()); + if($exception->getCode() === 403) + throw new FuelException('Cannot connect to the server.
The token must be outdated!',$exception->getCode()); + else + throw new FuelException($exception->getMessage(),$exception->getCode()); } } @@ -387,12 +440,10 @@ class Model_Movie extends Model_Overwrite public static function getThirtyLastedTvShows($server) { - $conf = Config::get('db'); - - return self::find(function ($query) use ($server, $conf) { + return self::find(function ($query) use ($server) { /** @var Database_Query_Builder_Select $query */ return $query - ->select('movie.*', DB::expr('COUNT(' . $conf['default']['table_prefix'] . 'movie.type) AS count')) + ->select('movie.*', DB::expr('COUNT(' . DB::table_prefix('movie') . '.type) AS count')) ->join('season', 'LEFT') ->on('movie.season_id', '=', 'season.id') ->join('tvshow', 'LEFT') @@ -404,7 +455,7 @@ class Model_Movie extends Model_Overwrite ->where('server.id', $server->id) ->and_where('movie.type', 'episode') ->order_by('movie.addedAt', 'DESC') - ->order_by(DB::expr('MAX(' . $conf['default']['table_prefix'] .'movie.addedAt)'), 'DESC ')//'movie.addedAt', 'DESC') + ->order_by(DB::expr('MAX(' . DB::table_prefix('movie') .'.addedAt)'), 'DESC ')//'movie.addedAt', 'DESC') ->group_by('movie.season_id') ->limit(30) ; diff --git a/fuel/app/classes/model/season.php b/fuel/app/classes/model/season.php index 51f59c8..f3424ec 100644 --- a/fuel/app/classes/model/season.php +++ b/fuel/app/classes/model/season.php @@ -88,9 +88,16 @@ class Model_Season extends Model_Overwrite $curl = null; if(!$width && !$height) - $curl = Request::forge('http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $path . '?X-Plex-Token=' . $this->_server->token, 'curl'); + $curl = Request::forge(($this->_server->https ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $path . '?X-Plex-Token=' . $this->_server->token, 'curl'); else - $curl = Request::forge('http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/photo/:/transcode?width='.$width.'&height='.$height.'&minSize=1&url='.$path.'&X-Plex-Token='.$this->_server->token, 'curl'); + $curl = Request::forge(($this->_server->https ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/photo/:/transcode?width='.$width.'&height='.$height.'&minSize=1&url='.$path.'&X-Plex-Token='.$this->_server->token, 'curl'); + + if($this->_server->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } $curl->execute(); @@ -164,7 +171,15 @@ class Model_Season extends Model_Overwrite public static function getMovies($server, $season) { try { - $curl = Request::forge('http://' . $server->url . ($server->port ? ':' . $server->port : '') . $season->plex_key . '?X-Plex-Token=' . $server->token, 'curl'); + $curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . $season->plex_key . '?X-Plex-Token=' . $server->token, 'curl'); + + if($server->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); if ($curl->response()->status !== 200) diff --git a/fuel/app/classes/model/server.php b/fuel/app/classes/model/server.php index 600cdee..bfe2a51 100755 --- a/fuel/app/classes/model/server.php +++ b/fuel/app/classes/model/server.php @@ -11,6 +11,7 @@ class Model_Server extends Model_Overwrite protected static $_properties = array( 'id', 'user_id', + 'https', 'url', 'port', 'token', @@ -61,7 +62,15 @@ class Model_Server extends Model_Overwrite if($server->disable) continue; - $curl = Request::forge('http://' . $server->url . ($server->port? ':' . $server->port : '') . '/?X-Plex-Token=' . $server->token, 'curl'); + $curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port? ':' . $server->port : '') . '/?X-Plex-Token=' . $server->token, 'curl'); + + if($server->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); $dataServer = Format::forge($curl->response()->body, 'xml')->to_array(); diff --git a/fuel/app/classes/model/tvshow.php b/fuel/app/classes/model/tvshow.php index 71ed80c..e5123bf 100644 --- a/fuel/app/classes/model/tvshow.php +++ b/fuel/app/classes/model/tvshow.php @@ -87,9 +87,16 @@ class Model_Tvshow extends Model_Overwrite $curl = null; if(!$width && !$height) - $curl = Request::forge('http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $path . '?X-Plex-Token=' . $this->_server->token, 'curl'); + $curl = Request::forge(($this->_server->https ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $path . '?X-Plex-Token=' . $this->_server->token, 'curl'); else - $curl = Request::forge('http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/photo/:/transcode?width='.$width.'&height='.$height.'&minSize=1&url='.$path.'&X-Plex-Token='.$this->_server->token, 'curl'); + $curl = Request::forge(($this->_server->https ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/photo/:/transcode?width='.$width.'&height='.$height.'&minSize=1&url='.$path.'&X-Plex-Token='.$this->_server->token, 'curl'); + + if($this->_server->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } $curl->execute(); @@ -112,7 +119,15 @@ class Model_Tvshow extends Model_Overwrite $plex_key = preg_split('/\/children/', $this->plex_key)[0]; - $curl = Request::forge('http://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $plex_key . '?X-Plex-Token=' . $this->_server->token, 'curl'); + $curl = Request::forge(($this->_server->https ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $plex_key . '?X-Plex-Token=' . $this->_server->token, 'curl'); + + if($this->_server->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); $array = Format::forge($curl->response()->body, 'xml')->to_array(); @@ -197,7 +212,15 @@ class Model_Tvshow extends Model_Overwrite public static function getTvShowSeasons($server, $tvshow) { try { - $curl = Request::forge('http://' . $server->url . ($server->port ? ':' . $server->port : '') . $tvshow->plex_key . '?X-Plex-Token=' . $server->token, 'curl'); + $curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . $tvshow->plex_key . '?X-Plex-Token=' . $server->token, 'curl'); + + if($server->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); if ($curl->response()->status !== 200) diff --git a/fuel/app/tasks/server.php b/fuel/app/tasks/server.php index 78ef4a7..9927327 100644 --- a/fuel/app/tasks/server.php +++ b/fuel/app/tasks/server.php @@ -10,23 +10,28 @@ use Model_Server; use Model_Tvshow; use function time; use Fuel\Core\Request; -use function var_dump; class Server { - - public function run($message = 'Hello!') - { - echo $message; - } - public function ping() { $servers = Model_Server::find(); foreach ($servers as $server) { try { - $curl = Request::forge('http://' . $server->url . ($server->port ? ':' . $server->port : '') . '?X-Plex-Token=' . $server->token, 'curl'); + $curl = Request::forge(($this->_server->https === '1' ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . '?X-Plex-Token=' . $server->token, 'curl'); + + $curl->set_options([ + CURLOPT_CONNECTTIMEOUT => 1 + ]); + + if($this->_server->https === '1') { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + $curl->execute(); if ($curl->response()->status !== 200) diff --git a/fuel/app/views/modal/modal.php b/fuel/app/views/modal/server.php old mode 100755 new mode 100644 similarity index 82% rename from fuel/app/views/modal/modal.php rename to fuel/app/views/modal/server.php index 4b544d0..e3db95d --- a/fuel/app/views/modal/modal.php +++ b/fuel/app/views/modal/server.php @@ -12,6 +12,17 @@
Plex server information:
+
+ +
+ +
+