Fix SSL communication issues.

Add remote server switch in config.
Add compulsory server verification in settings.
Store the machine_id in settings for quick retrieval.
Add setup complete screen on setup wizard and increase delay.
Refresh server URL params on startup and set up 12 hourly refresh schedule.
Use outer join on history tables.
Add extra exception in http_handler to catch http requests trying to communicate with https-only server.
This commit is contained in:
Tim 2015-07-17 16:48:47 +02:00
commit 637339ea62
9 changed files with 216 additions and 32 deletions

View file

@ -146,6 +146,17 @@
<p class="help-block">Set your preferred time format. <a href="#dateTimeOptionsModal" data-toggle="modal">Click here</a> to see the parameter list.</p>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>Plex.tv Authentication</h3>
</div>
<div class="form-group">
<label for="pms_token">PMS Token</label>
<input type="text" id="pms_token" name="pms_token" value="${config['pms_token']}" size="30" data-parsley-trigger="change" required>
<p class="help-block">Token for Plex.tv authentication.</p>
</div>
<p class="help-block"><a href="#pms-auth-modal" data-toggle="modal">Fetch Token</a></p>
</fieldset>
<br/>
</div>
<div class="span4">
@ -154,21 +165,25 @@
<h3>Plex Media Server</h3>
</div>
<div class="form-group">
<label for="pms_ip">PMS IP</label>
<input type="text" id="pms_ip" name="pms_ip" value="${config['pms_ip']}" size="30" data-parsley-trigger="change" required>
<p class="help-block">IP Address for Plex Media Server.</p>
<label for="pms_ip">Plex IP or Hostname</label>
<input type="text" class="pms-settings" id="pms_ip" name="pms_ip" value="${config['pms_ip']}" size="30" data-parsley-trigger="change" required>
<p class="help-block">IP Address or hostname for Plex Media Server.</p>
</div>
<div class="checkbox">
<input type="checkbox" id="pms_is_remote" name="pms_is_remote" value="1" ${config['pms_is_remote']}> Remote Server
<p class="help-block">Check this is your Plex Server is not on the same local network as PlexPy.</p>
</div>
<div class="checkbox">
<input type="checkbox" id="pms_ssl" name="pms_ssl" value="1" ${config['pms_ssl']}> Force SSL
<p class="help-block">Force PlexPy to connect to your Plex Server via SSL. Your server needs to have remote access enabled.</p>
</div>
<div class="form-group">
<label for="pms_port">PMS Port</label>
<input data-parsley-type="integer" type="text" id="pms_port" name="pms_port" value="${config['pms_port']}" size="30" data-parsley-trigger="change" required>
<label for="pms_port">Plex Port</label>
<input data-parsley-type="integer" class="pms-settings" type="text" id="pms_port" name="pms_port" value="${config['pms_port']}" size="30" data-parsley-trigger="change" required>
<p class="help-block">Port that Plex Media Server is listening on.</p>
</div>
<div class="form-group">
<label for="pms_token">PMS Token</label>
<input type="text" id="pms_token" name="pms_token" value="${config['pms_token']}" size="30" data-parsley-trigger="change" required>
<p class="help-block">Token for Plex.tv authentication.</p>
</div>
<p class="help-block"><a href="#pms-auth-modal" data-toggle="modal">Fetch Token</a></p>
<input type="hidden" id="pms_identifier" name="pms_identifier" value="${config['pms_identifier']}">
<a class="btn btn-default btn-sm" id="verify-plex-server" href="javascript:void(0)" role="button">Verify</a><span style="margin-left: 10px; display: none;" id="pms-verify-status"></span>
</fieldset>
</div>
<div class="span4">
@ -181,12 +196,6 @@
<p class="help-block">If you have media indexing enabled on your server, use these on the activity pane.</p>
</div>
</fieldset>
<fieldset>
<div class="checkbox">
<input type="checkbox" id="pms_ssl" name="pms_ssl" value="1" ${config['pms_ssl']}> Force SSL
<p class="help-block">Force PlexPy to connect to your Plex Server via SSL.</p>
</div>
</fieldset>
<div class="wellheader">
<h3>Plex Logs</h3>
</div>
@ -825,15 +834,56 @@
$(document).ready(function () {
var configForm = $("#configUpdate");
$('.save-button').click(function() {
if (configForm.parsley().validate()) {
doAjaxCall('configUpdate',$(this),'tabs',true);
return false;
if ($("#pms_identifier").val() == "") {
showMsg('<i class="fa fa-exclamation-circle"></i>&nbspPlease verify your server.',false,true,2000)
} else {
showMsg('<i class="fa fa-exclamation-circle"></i>&nbspPlease verify your settings.',false,true,2000)
if (configForm.parsley().validate()) {
doAjaxCall('configUpdate',$(this),'tabs',true);
return false;
} else {
showMsg('<i class="fa fa-exclamation-circle"></i>&nbspPlease verify your settings.',false,true,2000)
}
}
});
});
$( ".pms-settings" ).change(function() {
$("#pms_identifier").val("");
$("#pms-verify-status").html("");
});
$("#verify-plex-server").click(function() {
var pms_ip = $("#pms_ip").val()
var pms_port = $("#pms_port").val()
if (($("#pms_ip").val() !== '') || ($("#pms_port").val() !== '')) {
$("#pms-verify-status").html('<i class="fa fa-refresh fa-spin"></i> Verifying server...');
$('#pms-verify-status').fadeIn('fast');
$.ajax({
url: 'http://' + pms_ip + ':' + pms_port + '/identity',
cache: true,
async: true,
timeout: 5000,
error: function(jqXHR, textStatus, errorThrown) {
$("#pms-verify-status").html('<i class="fa fa-exclamation-circle"></i> This is not a Plex Server!');
$('#pms-verify-status').fadeIn('fast');
},
success: function (xml) {
if ( $(xml).find('MediaContainer').attr('machineIdentifier') ) {
$("#pms_identifier").val($(xml).find('MediaContainer').attr('machineIdentifier'));
$("#pms-verify-status").html('<i class="fa fa-check"></i> Server verified!');
$('#pms-verify-status').fadeIn('fast');
} else {
$("#pms-verify-status").html('<i class="fa fa-exclamation-circle"></i> This is not a Plex Server!');
$('#pms-verify-status').fadeIn('fast');
}
}
});
} else {
$("#pms-verify-status").html('<i class="fa fa-exclamation-circle"></i> Please enter IP and port number.');
$('#pms-verify-status').fadeIn('fast');
}
});
// Plex.tv auth token fetch
$("#get-pms-auth-token").click(function() {
$("#pms-token-status").html('<i class="fa fa-refresh fa-spin"></i> Fetching token...');

View file

@ -57,9 +57,16 @@ from plexpy import version
<div class="col-xs-3">
<input type="text" class="form-control pms-settings" name="pms_port" id="pms_port" placeholder="32400" value="${config['pms_port']}" required>
</div>
<div class="col-xs-4" style="padding-top: 8px;">
<input type="checkbox" id="pms_ssl" name="pms_ssl" value="1" ${config['pms_ssl']}> Server uses SSL
</div>
<div class="col-xs-4" style="padding-top: 8px;">
<input type="checkbox" id="pms_is_remote" name="pms_is_remote" value="1" ${config['pms_is_remote']}> Remote Server
</div>
</div>
</div>
<input type="hidden" class="form-control pms-settings" id="pms_valid" data-validate="validatePMSip" value="">
<input type="hidden" class="form-control pms-settings" id="pms_identifier" name="pms_identifier" value="${config['pms_identifier']}">
<a class="btn btn-default btn-sm" id="verify-plex-server" href="#" role="button">Verify</a><span style="margin-left: 10px; display: none;" id="pms-verify-status"></span>
</div>
@ -160,6 +167,14 @@ from plexpy import version
<!-- Required fields but hidden -->
</form>
<div class="wizard-success">
<h3>Setup Complete!</h3>
<br/>
<p>Setup is now complete. For more configuration options please visit the Settings menu on the home page.</p>
<br/>
<i class="fa fa-refresh fa-spin"></i> Just configuring a few things, please wait...
</div>
</div>
</div>
</div>
@ -185,6 +200,8 @@ from plexpy import version
wizard.show();
wizard.on("submit", function(wizard) {
// Probably should not success before we know, but hopefully validation is good enough.
wizard.submitSuccess();
$.ajax({
url: "configUpdate",
type: "POST",
@ -194,7 +211,7 @@ from plexpy import version
complete: function (data) {
setTimeout(function(){
location.reload();
}, 3000);
}, 5000);
}
})
});
@ -293,6 +310,7 @@ from plexpy import version
},
success: function (xml) {
if ( $(xml).find('MediaContainer').attr('machineIdentifier') ) {
$("#pms_identifier").val($(xml).find('MediaContainer').attr('machineIdentifier'));
$("#pms-verify-status").html('<i class="fa fa-check"></i> Server found!');
$('#pms-verify-status').fadeIn('fast');
pms_verified = true;