Add HTTPS to server settings

Update cUrl request to use https
pull/9/head
Chewbaka 6 years ago
parent 5ac3a2621c
commit bf874c3d2c

@ -2,6 +2,8 @@
use Fuel\Core\Controller_Rest; use Fuel\Core\Controller_Rest;
use Fuel\Core\FuelException; use Fuel\Core\FuelException;
use Fuel\Core\Input;
use Fuel\Core\Request;
use Fuel\Core\Session; use Fuel\Core\Session;
use Fuel\Core\View; use Fuel\Core\View;
@ -9,7 +11,7 @@ class Controller_Rest_Settings extends Controller_Rest
{ {
public function get_modal_server() public function get_modal_server()
{ {
$view = View::forge('modal/modal'); $view = View::forge('modal/server');
return $this->response($view->render()); return $this->response($view->render());
} }
@ -21,10 +23,19 @@ class Controller_Rest_Settings extends Controller_Rest
$url = Input::post('url'); $url = Input::post('url');
$port = Input::post('port'); $port = Input::post('port');
$token = Input::post('token'); $token = Input::post('token');
$https = Input::post('https') === 'true' ? true : false;
//@TODO CHECK AND REMOVE HTTP AND HTTPS //@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(); $result = $curl->execute();
if(!$result) 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 = ($server_id === '' ? Model_Server::forge() : Model_Server::find_by_pk($server_id));
$server->set([ $server->set([
'user_id' => Session::get('user')->id, 'user_id' => Session::get('user')->id,
'https' => $https,
'url' => $url, 'url' => $url,
'port' => $port, 'port' => $port,
'token' => $token, 'token' => $token,
@ -40,9 +52,9 @@ class Controller_Rest_Settings extends Controller_Rest
]); ]);
$server->save(); $server->save();
return $this->response(array('error' => false)); return $this->response(['error' => false]);
} catch (FuelException $e) { } 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);
} }
} }

@ -58,7 +58,15 @@ class Model_Library extends Model_Overwrite
try { try {
$libraries_id_array = []; $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(); $curl->execute();
if ($curl->response()->status !== 200) if ($curl->response()->status !== 200)
@ -114,7 +122,15 @@ class Model_Library extends Model_Overwrite
*/ */
public static function getSectionsContent($server, $library) 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(); $curl->execute();
if($curl->response()->status !== 200) if($curl->response()->status !== 200)

@ -129,11 +129,22 @@ class Model_Movie extends Model_Overwrite
$curl = null; $curl = null;
if (!$width && !$height) 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 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) if ($curl->response()->status !== 200)
return false; 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 * @return array|mixed
* @throws FuelException * @throws FuelException
@ -178,7 +212,15 @@ class Model_Movie extends Model_Overwrite
if(!$this->_server) if(!$this->_server)
$this->getServer(); $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(); $curl->execute();
$array = Format::forge($curl->response()->body, 'xml')->to_array(); $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; $subtitleSize = isset($user_settings->subtitle) ? $user_settings->subtitle : 100;
$language = isset($user_settings->language) ? $user_settings->language : false; $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/decision?hasMDE=1'; // DASH
$request .= '/video/:/transcode/universal/start.m3u8'; // HLS $request .= '/video/:/transcode/universal/start.m3u8'; // HLS
$request .= '?identifier=[PlexShare]'; $request .= '?identifier=[PlexShare]';
@ -281,6 +324,13 @@ class Model_Movie extends Model_Overwrite
$curl = Request::forge($request, 'curl'); $curl = Request::forge($request, 'curl');
if($this->_server->https === '1') {
$curl->set_options([
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false
]);
}
$curl->execute(); $curl->execute();
if ($curl->response()->status !== 200) if ($curl->response()->status !== 200)
@ -298,9 +348,12 @@ class Model_Movie extends Model_Overwrite
$this->_session = $split[1]; $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) { } catch (Exception $exception) {
throw new FuelException('Cannot connect to the server.<br/>The token must be outdated!',$exception->getCode()); if($exception->getCode() === 403)
throw new FuelException('Cannot connect to the server.<br/>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) public static function getThirtyLastedTvShows($server)
{ {
$conf = Config::get('db'); return self::find(function ($query) use ($server) {
return self::find(function ($query) use ($server, $conf) {
/** @var Database_Query_Builder_Select $query */ /** @var Database_Query_Builder_Select $query */
return $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') ->join('season', 'LEFT')
->on('movie.season_id', '=', 'season.id') ->on('movie.season_id', '=', 'season.id')
->join('tvshow', 'LEFT') ->join('tvshow', 'LEFT')
@ -404,7 +455,7 @@ class Model_Movie extends Model_Overwrite
->where('server.id', $server->id) ->where('server.id', $server->id)
->and_where('movie.type', 'episode') ->and_where('movie.type', 'episode')
->order_by('movie.addedAt', 'DESC') ->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') ->group_by('movie.season_id')
->limit(30) ->limit(30)
; ;

@ -88,9 +88,16 @@ class Model_Season extends Model_Overwrite
$curl = null; $curl = null;
if(!$width && !$height) 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 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(); $curl->execute();
@ -164,7 +171,15 @@ class Model_Season extends Model_Overwrite
public static function getMovies($server, $season) public static function getMovies($server, $season)
{ {
try { 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(); $curl->execute();
if ($curl->response()->status !== 200) if ($curl->response()->status !== 200)

@ -11,6 +11,7 @@ class Model_Server extends Model_Overwrite
protected static $_properties = array( protected static $_properties = array(
'id', 'id',
'user_id', 'user_id',
'https',
'url', 'url',
'port', 'port',
'token', 'token',
@ -61,7 +62,15 @@ class Model_Server extends Model_Overwrite
if($server->disable) if($server->disable)
continue; 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(); $curl->execute();
$dataServer = Format::forge($curl->response()->body, 'xml')->to_array(); $dataServer = Format::forge($curl->response()->body, 'xml')->to_array();

@ -87,9 +87,16 @@ class Model_Tvshow extends Model_Overwrite
$curl = null; $curl = null;
if(!$width && !$height) 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 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(); $curl->execute();
@ -112,7 +119,15 @@ class Model_Tvshow extends Model_Overwrite
$plex_key = preg_split('/\/children/', $this->plex_key)[0]; $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(); $curl->execute();
$array = Format::forge($curl->response()->body, 'xml')->to_array(); $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) public static function getTvShowSeasons($server, $tvshow)
{ {
try { 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(); $curl->execute();
if ($curl->response()->status !== 200) if ($curl->response()->status !== 200)

@ -10,23 +10,28 @@ use Model_Server;
use Model_Tvshow; use Model_Tvshow;
use function time; use function time;
use Fuel\Core\Request; use Fuel\Core\Request;
use function var_dump;
class Server class Server
{ {
public function run($message = 'Hello!')
{
echo $message;
}
public function ping() public function ping()
{ {
$servers = Model_Server::find(); $servers = Model_Server::find();
foreach ($servers as $server) { foreach ($servers as $server) {
try { 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(); $curl->execute();
if ($curl->response()->status !== 200) if ($curl->response()->status !== 200)

@ -12,6 +12,17 @@
<div class="PageHeader-pageHeader-18RSw"> <div class="PageHeader-pageHeader-18RSw">
Plex server information: Plex server information:
</div> </div>
<div>
<label class="FormLabel-label-1sr1f" style="width: 50px; display: inline-block;" for="https">
HTTPS:
</label>
<div style="display: inline-block;">
<label class="switch">
<input id="https" name="https" type="checkbox" />
<span class="slider round"></span>
</label>
</div>
</div>
<div> <div>
<label class="FormLabel-label-1sr1f " for="url"> <label class="FormLabel-label-1sr1f " for="url">
Plex URL: Plex URL:

@ -78,13 +78,14 @@
// ADD OR EDIT SERVER // ADD OR EDIT SERVER
$(document).on('click', '#add-plex button', function () { $(document).on('click', '#add-plex button', function () {
var server_id = $('#add-plex #server_id').val(); var server_id = $('#add-plex #server_id').val();
var https = $('#add-plex #https').is(':checked');
var url = $('#add-plex #url').val(); var url = $('#add-plex #url').val();
var port = $('#add-plex #port').val(); var port = $('#add-plex #port').val();
var token = $('#add-plex #token').val(); var token = $('#add-plex #token').val();
$.ajax({ $.ajax({
method: 'post', method: 'post',
url: '/rest/settings/server.json', url: '/rest/settings/server.json',
data: {server_id: server_id, url: url, port: port, token: token} data: {server_id: server_id,https: https, url: url, port: port, token: token}
}).done(function (data) { }).done(function (data) {
show_alert('success', 'Server save succesfully!'); show_alert('success', 'Server save succesfully!');
$('.media-server-modal button.close').click(); $('.media-server-modal button.close').click();
@ -124,6 +125,8 @@
$('body').append(modal); $('body').append(modal);
setTimeout(function(){ setTimeout(function(){
$('#add-plex #server_id').val(server[0].id); $('#add-plex #server_id').val(server[0].id);
if(parseInt(server[0].https) === 1)
$('#add-plex #https').attr('checked', 'checked');
$('#add-plex #url').val(server[0].url); $('#add-plex #url').val(server[0].url);
$('#add-plex #port').val(server[0].port); $('#add-plex #port').val(server[0].port);
$('#add-plex #token').val(server[0].token); $('#add-plex #token').val(server[0].token);

Loading…
Cancel
Save