Add HTTPS to server settings

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

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

@ -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)

@ -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.<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)
{
$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)
;

@ -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)

@ -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();

@ -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)

@ -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)

@ -12,6 +12,17 @@
<div class="PageHeader-pageHeader-18RSw">
Plex server information:
</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>
<label class="FormLabel-label-1sr1f " for="url">
Plex URL:

@ -78,13 +78,14 @@
// ADD OR EDIT SERVER
$(document).on('click', '#add-plex button', function () {
var server_id = $('#add-plex #server_id').val();
var https = $('#add-plex #https').is(':checked');
var url = $('#add-plex #url').val();
var port = $('#add-plex #port').val();
var token = $('#add-plex #token').val();
$.ajax({
method: 'post',
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) {
show_alert('success', 'Server save succesfully!');
$('.media-server-modal button.close').click();
@ -124,6 +125,8 @@
$('body').append(modal);
setTimeout(function(){
$('#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 #port').val(server[0].port);
$('#add-plex #token').val(server[0].token);

Loading…
Cancel
Save