mirror of
https://github.com/nextcloud/nextcloudpi.git
synced 2026-01-09 14:42:01 -03:30
wizard: chain configurations and improved feedback
This commit is contained in:
parent
0a3289e654
commit
0bc5e091b9
18
changelog.md
18
changelog.md
@ -1,7 +1,19 @@
|
||||
|
||||
[v0.31.15](https://github.com/nextcloud/nextcloudpi/commit/ca48e82) (2017-10-19) ncp-web: improve password prompt permissions
|
||||
[v0.31.22](https://github.com/nextcloud/nextcloudpi/commit/0c7a7b8) (2017-10-25) wizard: chain configurations and improved feedback
|
||||
|
||||
[v0.31.14](https://github.com/nextcloud/nextcloudpi/commit/2217045) (2017-10-09) ncp-web: integrate ncp-wizard with ncp-web
|
||||
[v0.31.20](https://github.com/nextcloud/nextcloudpi/commit/df86a6f) (2017-10-26) nc-notify-updates: fix repeated lines
|
||||
|
||||
[v0.31.19](https://github.com/nextcloud/nextcloudpi/commit/7fb7e07) (2017-10-25) samba: disable homes share by default
|
||||
|
||||
[v0.31.18](https://github.com/nextcloud/nextcloudpi/commit/d958f0e) (2017-10-25) letsencrypt: fix return value
|
||||
|
||||
[v0.31.17](https://github.com/nextcloud/nextcloudpi/commit/81e8066) (2017-10-25) noip: make possible to reconfigure while running
|
||||
|
||||
[v0.31.16](https://github.com/nextcloud/nextcloudpi/commit/12e7a1d) (2017-10-22) freeDNS: fix periodic update typo
|
||||
|
||||
[v0.31.15](https://github.com/nextcloud/nextcloudpi/commit/cfd99d6) (2017-10-19) ncp-web: improve password prompt permissions
|
||||
|
||||
[v0.31.14](https://github.com/nextcloud/nextcloudpi/commit/5e8dba5) (2017-10-09) ncp-web: integrate ncp-wizard with ncp-web
|
||||
|
||||
[v0.31.13](https://github.com/nextcloud/nextcloudpi/commit/583d1b6) (2017-10-07) letsencrypt: fix workaround for old images
|
||||
|
||||
@ -15,7 +27,7 @@
|
||||
|
||||
[v0.31.8 ](https://github.com/nextcloud/nextcloudpi/commit/03f39b2) (2017-09-30) ncp-web: small fixes
|
||||
|
||||
[v0.31.7, tag: v0.31.17](https://github.com/nextcloud/nextcloudpi/commit/2601df3) (2017-10-03) letsencrypt: dont change config if not successful
|
||||
[v0.31.7 ](https://github.com/nextcloud/nextcloudpi/commit/2601df3) (2017-10-03) letsencrypt: dont change config if not successful
|
||||
|
||||
[v0.31.6 ](https://github.com/nextcloud/nextcloudpi/commit/7a95cc1) (2017-10-03) letsencrypt: fix external bug (Closes #230)
|
||||
|
||||
|
||||
1
ncp-web/img/menu.svg
Normal file
1
ncp-web/img/menu.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2 2v2h12V2zm0 5v2h12V7zm0 5v2h12v-2z"/></svg>
|
||||
|
After Width: | Height: | Size: 118 B |
@ -66,10 +66,10 @@
|
||||
<h2 id="config-box-title">NextCloudPi First Run</h2>
|
||||
<p>Click to start the configuration wizard</p>
|
||||
<br>
|
||||
<a href="wizard"><img id="ncp-welcome-logo" src="wizard/img/ncp-logo.png" class="wizard"></a>
|
||||
<a href="wizard"><img class="wizard-btn" src="wizard/img/ncp-logo.png" class="wizard"></a>
|
||||
<br>
|
||||
<a href="wizard"><button type="button" class="wizard">run</button></a>
|
||||
<button type="button" class="first-run-close" id="skip-wizard">skip</button>
|
||||
<button type="button" class="wizard-btn" id="go-wizard" >run </button>
|
||||
<button type="button" class="first-run-close" id="skip-wizard" >skip </button>
|
||||
<button type="button" class="first-run-close" id="close-wizard">close</button>
|
||||
<br><br>
|
||||
</div>
|
||||
@ -92,14 +92,14 @@ HTML;
|
||||
</a>
|
||||
</div>
|
||||
<div id="header-right">
|
||||
<div id="wizard">
|
||||
<div class="wizard-btn">
|
||||
<div id="expand">
|
||||
<div id="expandDisplayName" class="icon-wizard-white"></div>
|
||||
<div class="icon-wizard-white"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="poweroff">
|
||||
<div id="expand">
|
||||
<div id="expandDisplayName" class="icon-power-white"></div>
|
||||
<div class="icon-power-white"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -99,6 +99,7 @@ else if ( $_POST['action'] == "launch" && $_POST['config'] )
|
||||
|
||||
// Get new token
|
||||
echo '{ "token": "' . getCSRFToken() . '",';
|
||||
echo ' "ref": "' . $_POST['ref'] . '",';
|
||||
echo ' "output": "" , ';
|
||||
echo ' "ret": ';
|
||||
|
||||
|
||||
@ -1193,3 +1193,7 @@ a#versionlink{
|
||||
text-indent: -9999px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#wizard-btn {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@ -169,7 +169,7 @@ $(function()
|
||||
} );
|
||||
|
||||
// Wizard button
|
||||
$( '#wizard' ).on('click', function(e)
|
||||
$( '.wizard-btn' ).on('click', function(e)
|
||||
{
|
||||
window.location = 'wizard';
|
||||
} );
|
||||
|
||||
@ -1,62 +1,63 @@
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
a:hover, a:active, a:link {
|
||||
outline: 0px none;
|
||||
}
|
||||
|
||||
.sidebar-nav {
|
||||
padding: 9px 0;
|
||||
padding: 9px 0;
|
||||
}
|
||||
#rootwizard {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
#ncp-nav {
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
}
|
||||
#bar {
|
||||
margin: 5px 0 0 0;
|
||||
margin: 5px 0 0 0;
|
||||
}
|
||||
.ncp-tab-pane {
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.ncp-tab-pane p {
|
||||
text-align: center;
|
||||
text-align: center;
|
||||
}
|
||||
.ncp-tab-pane h1 {
|
||||
text-align: center;
|
||||
.ncp-tab-pane h1, h3 {
|
||||
text-align: center;
|
||||
}
|
||||
.tab-pane {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#ncp-pager {
|
||||
width: 50%;
|
||||
margin: 0 auto;
|
||||
width: 50%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.previous {
|
||||
float: left;
|
||||
float: left;
|
||||
}
|
||||
.next {
|
||||
float: right;
|
||||
float: right;
|
||||
}
|
||||
.ncp-hidden {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
.instructions {
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
.buttons-area {
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.ddns-form form {
|
||||
display: table;
|
||||
text-align: center;
|
||||
}
|
||||
.btn {
|
||||
margin:5px 0;
|
||||
margin:5px 0;
|
||||
}
|
||||
|
||||
div.linkbox {
|
||||
@ -65,7 +66,85 @@ div.linkbox {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.expand {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 7px 20px 6px 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.menu-icon {
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
min-width: 16px;
|
||||
min-height: 16px;
|
||||
background-image:url("../../../img/menu.svg");
|
||||
}
|
||||
|
||||
#ncp-welcome-logo {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#notifications{
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.notification {
|
||||
color: white;
|
||||
padding: 10px 15px;
|
||||
margin: 5px;
|
||||
border-radius: 4px;
|
||||
width: 20em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.green-bg {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
.orange-bg {
|
||||
background-color: darkorange;
|
||||
}
|
||||
|
||||
.gray-bg {
|
||||
background-color: lightgray;
|
||||
}
|
||||
|
||||
#output-wrapper {
|
||||
position:fixed;
|
||||
top:0;
|
||||
bottom:0;
|
||||
height:100%;
|
||||
width:100%;
|
||||
z-index:9000;
|
||||
text-align:center;
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
#output-box {
|
||||
display:block;
|
||||
background: white;
|
||||
position:relative;
|
||||
width:40em;
|
||||
height:100%;
|
||||
}
|
||||
|
||||
#output-btn {
|
||||
position:fixed;
|
||||
top:5px;
|
||||
left:5px;
|
||||
}
|
||||
|
||||
td {
|
||||
width: 7em;
|
||||
}
|
||||
|
||||
.buttons-area label{
|
||||
margin: 0;
|
||||
font-weight: 100;
|
||||
};
|
||||
|
||||
@ -2,31 +2,79 @@
|
||||
/*global $, jQuery, alert*/
|
||||
$(document).ready(function(){
|
||||
|
||||
function addNotification( txt, tclass )
|
||||
{
|
||||
// limit to 9 notifications
|
||||
if ( $('#notifications').children().length > 8 )
|
||||
$('#notifications').children().last().remove();
|
||||
|
||||
$('#notifications').prepend( '<div class="notification ' + tclass + '">' + txt + '</div>' );
|
||||
}
|
||||
|
||||
function logOutput( txt )
|
||||
{
|
||||
var textarea = $('#output-box');
|
||||
textarea.val( textarea.val() + txt );
|
||||
textarea[0].scrollTop = textarea[0].scrollHeight;
|
||||
}
|
||||
|
||||
function showLog()
|
||||
{
|
||||
$('#output-wrapper').show();
|
||||
var textarea = $('#output-box');
|
||||
textarea[0].scrollTop = textarea[0].scrollHeight;
|
||||
}
|
||||
|
||||
// launch an request for launch action to the backend
|
||||
function launch_action( action /* string */, args /* object */, next /* callback */ )
|
||||
function launch_action( action /* string */, args /* object */, callback /* callback */ )
|
||||
{
|
||||
$('input').prop('disabled', true);
|
||||
$('button').prop('disabled', true);
|
||||
addNotification( action, 'gray-bg' ) ;
|
||||
|
||||
logOutput( '\n[ ' + action + ' ]' + '\n' );
|
||||
|
||||
$.post('../ncp-launcher.php',
|
||||
{ action:'launch',
|
||||
ref: action,
|
||||
config: JSON.stringify( args ),
|
||||
csrf_token: document.getElementById( 'csrf-token' ).value
|
||||
}
|
||||
).fail( errorMsg ).done( next );
|
||||
).fail( errorMsg ).done( callback );
|
||||
}
|
||||
|
||||
function nextTabOnSuccess( data )
|
||||
{
|
||||
function nextOnSuccess( data, nextfunc, failfunc )
|
||||
{
|
||||
$('input').prop('disabled', false);
|
||||
$('button').prop('disabled', false);
|
||||
|
||||
var res = JSON.parse( data );
|
||||
if ( res.ret && res.ret == 0 )
|
||||
$('#rootwizard').bootstrapWizard('next');
|
||||
else
|
||||
alert( 'error ' + res.output );
|
||||
|
||||
// save next single use token
|
||||
if ( res.token )
|
||||
$('#csrf-token').val( res.token );
|
||||
|
||||
// remove gray (loading) notification
|
||||
$('#notifications').children().first().remove();
|
||||
|
||||
// continue if ok
|
||||
var msg = res.ref || res.output || 'error';
|
||||
if ( res.ret && res.ret == 0 )
|
||||
{
|
||||
addNotification( msg, 'green-bg' );
|
||||
nextfunc();
|
||||
}
|
||||
else
|
||||
{
|
||||
addNotification( msg, 'orange-bg' );
|
||||
showLog();
|
||||
failfunc && failfunc();
|
||||
}
|
||||
}
|
||||
|
||||
function nextTabOnSuccess( data )
|
||||
{
|
||||
nextOnSuccess( data, function(){ $('#rootwizard').bootstrapWizard('next') } );
|
||||
}
|
||||
|
||||
function show_with_animation( elemid )
|
||||
@ -43,6 +91,46 @@ $(document).ready(function(){
|
||||
alert('There was an error with the request');
|
||||
}
|
||||
|
||||
function post_ddns_hook( data )
|
||||
{
|
||||
nextOnSuccess( data, function(){
|
||||
launch_action( 'nc-autoupdate-ncp', { "ACTIVE":"yes" },
|
||||
|
||||
function( data ){
|
||||
nextOnSuccess( data, function(){
|
||||
launch_action( 'dnsmasq', { "ACTIVE":"yes", "DOMAIN":$("#ddns-domain").val() },
|
||||
|
||||
// keep this last, because it restarts the httpd server
|
||||
function( data ){
|
||||
nextOnSuccess( data, function(){
|
||||
launch_action( 'letsencrypt', { "DOMAIN":$("#ddns-domain").val() },
|
||||
|
||||
nextTabOnSuccess
|
||||
|
||||
) } ) }
|
||||
) } ) }
|
||||
) } )
|
||||
}
|
||||
// Event source to receive process output in real time
|
||||
if (!!window.EventSource)
|
||||
var source = new EventSource('../ncp-output.php');
|
||||
else
|
||||
$('#config-box-title').val( "Browser not supported" );
|
||||
|
||||
source.addEventListener('message', function(e)
|
||||
{
|
||||
if ( e.origin != 'https://' + window.location.hostname + ':4443')
|
||||
{
|
||||
$('#output-box').val( "Invalid origin" );
|
||||
return;
|
||||
}
|
||||
|
||||
logOutput( e.data + '\n' );
|
||||
}, false);
|
||||
|
||||
// start wizard clicking logo
|
||||
$('#ncp-welcome-logo ').on('click', function(){ $('#rootwizard').bootstrapWizard('next'); } );
|
||||
|
||||
// This must be first or it breaks
|
||||
$('#rootwizard').bootstrapWizard({onTabShow: function(tab, navigation, index){
|
||||
var $total = navigation.find('li').length - 1;
|
||||
@ -53,184 +141,157 @@ $(document).ready(function(){
|
||||
|
||||
// This is required or the tabs aren't styled
|
||||
$('#rootwizard').bootstrapWizard({'tabClass': 'nav nav-pills'});
|
||||
|
||||
// Enable Automount step
|
||||
$('#enable-Automount').on('click', function() {
|
||||
show_with_animation( 'plug-usb' );
|
||||
dataTable[0] = {
|
||||
automount: 'yes'
|
||||
};
|
||||
$('#enable-automount').on('click', function() {
|
||||
show_with_animation( 'plug-usb-pane' );
|
||||
});
|
||||
|
||||
// Disable Automount step
|
||||
$('#disable-Automount').on('click', function() {
|
||||
$("#plug-usb").hide();
|
||||
$('#disable-automount').on('click', function() {
|
||||
$("#plug-usb-pane").hide();
|
||||
$('#rootwizard').bootstrapWizard('next');
|
||||
dataTable[0] = {
|
||||
automount: 'no'
|
||||
};
|
||||
dataTable[1] = {
|
||||
plugUSB: 'no'
|
||||
};
|
||||
});
|
||||
|
||||
// Enable format-usb step
|
||||
$('#plugUSB').on('click', function() {
|
||||
dataTable[1] = {
|
||||
plugUSB: 'yes'
|
||||
};
|
||||
|
||||
launch_action( 'nc-automount', {"ACTIVE":"yes"},
|
||||
function ( data )
|
||||
{
|
||||
$('input').prop('disabled', false);
|
||||
var res = JSON.parse( data );
|
||||
if ( res.ret && res.ret == 0 ) // action ran ok
|
||||
show_with_animation( 'format-usb' );
|
||||
else // action failed
|
||||
alert( 'error: ' + res.output );
|
||||
|
||||
// save next single use token
|
||||
if ( res.token )
|
||||
$('#csrf-token').val( res.token );
|
||||
}
|
||||
);
|
||||
|
||||
launch_action( 'nc-automount',
|
||||
{"ACTIVE":"yes"},
|
||||
function ( data ){
|
||||
nextOnSuccess( data, function(){ show_with_animation( 'format-usb' ); } );
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// Enable nextcloud-data step
|
||||
$('#format-USB').on('click', function() {
|
||||
dataTable[2] = {
|
||||
format: 'yes',
|
||||
};
|
||||
|
||||
launch_action( 'nc-format-USB', {"LABEL":"myCloudDrive"},
|
||||
function ( data )
|
||||
{
|
||||
$('input').prop('disabled', false);
|
||||
var res = JSON.parse( data );
|
||||
if ( res.ret && res.ret == 0 ) // action ran ok
|
||||
show_with_animation( 'nc-datadir-pane' );
|
||||
else // action failed
|
||||
alert( 'error: ' + res.output );
|
||||
|
||||
// save next single use token
|
||||
if ( res.token )
|
||||
$('#csrf-token').val( res.token );
|
||||
}
|
||||
);
|
||||
$('#format-USB').on('click', function(){
|
||||
launch_action( 'nc-format-USB',
|
||||
{"LABEL":"myCloudDrive"},
|
||||
function ( data ){
|
||||
nextOnSuccess( data, function(){ show_with_animation( 'nc-datadir-pane' ); } );
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// Enable nextcloud data tab on skip format.
|
||||
$('#skip-format-USB').on('click', function() {
|
||||
show_with_animation( 'nc-datadir-pane' );
|
||||
dataTable[2] = {
|
||||
format: 'no',
|
||||
};
|
||||
$('#skip-format-USB').on('click', function(){
|
||||
show_with_animation( 'nc-datadir-pane' );
|
||||
});
|
||||
|
||||
// Launch nc-datadir
|
||||
$('#nc-datadir').on('click', function() {
|
||||
dataTable[2] = {
|
||||
format: 'no',
|
||||
};
|
||||
launch_action( 'nc-datadir', {"DATADIR":"/media/myCloudDrive/ncdata"}, nextTabOnSuccess );
|
||||
launch_action( 'nc-datadir', {"DATADIR":"/media/USBdrive/ncdata"}, nextTabOnSuccess );
|
||||
});
|
||||
|
||||
// Enable external access step
|
||||
$('#enable-external').on('click', function(){
|
||||
launch_action( 'fail2ban',
|
||||
{ "ACTIVE":"yes" },
|
||||
function ( data ){
|
||||
nextOnSuccess( data, function(){ show_with_animation( 'forward-ports-pane' ) } );
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// Skip external access step
|
||||
$('#skip-external').on('click', function(){
|
||||
$('#forward-ports-manual-pane').hide();
|
||||
$('#forward-ports-pane' ).hide();
|
||||
$('#ddns-choose' ).hide();
|
||||
$("#ddns-account" ).hide();
|
||||
$("#noip" ).hide();
|
||||
$("#freedns" ).hide();
|
||||
$('#rootwizard').bootstrapWizard('next');
|
||||
});
|
||||
|
||||
// Run port forwarding with UPnP step
|
||||
$('#port-forward-run').on('click', function() {
|
||||
$('#port-forward-run').on('click', function(){
|
||||
// Run Port Forwarding and Test Port
|
||||
dataTable[7] = {
|
||||
portForwardRun: 'yes'
|
||||
};
|
||||
|
||||
launch_action( 'nc-forward-ports', {"HTTPSPORT":"443","HTTPPORT":"80"}, nextTabOnSuccess );
|
||||
launch_action( 'nc-forward-ports',
|
||||
{"HTTPSPORT":"443","HTTPPORT":"80"},
|
||||
function ( data ){
|
||||
nextOnSuccess( data, function(){ show_with_animation( 'ddns-choose' ) } );
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// Skip port forwarding
|
||||
$('#port-forward-skip').on('click', function() {
|
||||
$("#port-forward-not-ok").hide();
|
||||
dataTable[7] = {
|
||||
portForwardRun: 'no'
|
||||
};
|
||||
$('#rootwizard').bootstrapWizard('next');
|
||||
// Manual port forwarding
|
||||
$('#port-forward-manual').on('click', function() {
|
||||
show_with_animation( 'forward-ports-manual-pane' );
|
||||
});
|
||||
|
||||
// If test after port forwarding is not ok, run this
|
||||
$('#port-forward-error').on('click', function() {
|
||||
show_with_animation( 'port-forward-not-ok' );
|
||||
dataTable[8] = {
|
||||
portForward: 'not-ok'
|
||||
};
|
||||
// Manual port forwarding done
|
||||
$('#port-forward-done').on('click', function() {
|
||||
show_with_animation( 'ddns-choose' );
|
||||
});
|
||||
|
||||
// Skip DDNS setup
|
||||
$('#ddns-skip').on('click', function() {
|
||||
$("#choose-ddns").hide();
|
||||
$('#ddns-skip').on('click', function(){
|
||||
$("#domain" ).hide();
|
||||
$("#noip" ).hide();
|
||||
$("#freedns").hide();
|
||||
$('#rootwizard').bootstrapWizard('next');
|
||||
dataTable[9] = {
|
||||
ddns: 'no'
|
||||
};
|
||||
});
|
||||
|
||||
// Show FreeDNS step
|
||||
$('#ddns-freedns').on('click', function() {
|
||||
$("#noip").hide();
|
||||
show_with_animation( 'freedns' );
|
||||
|
||||
dataTable[9] = {
|
||||
ddns: 'yes',
|
||||
service: 'freedns'
|
||||
};
|
||||
$('#ddns-freedns').on('click', function(){
|
||||
$("#noip" ).hide();
|
||||
$("#freedns").show();
|
||||
show_with_animation( 'ddns-account' );
|
||||
});
|
||||
// Enable FreeDNS step
|
||||
$('#ddns-enable-freedns').on('click', function() {
|
||||
dataTable[9] = {
|
||||
ddns: 'yes',
|
||||
service: 'freedns',
|
||||
domain: $("freedns-domain").val(),
|
||||
updateHash: $("freedns-hash").val(),
|
||||
};
|
||||
|
||||
// Enable FreeDNS step
|
||||
$('#ddns-enable-freedns').on('click', function(){
|
||||
launch_action( 'freeDNS',
|
||||
{
|
||||
"ACTIVE":"yes",
|
||||
"UPDATEHASH": $("freedns-hash").val(),
|
||||
"DOMAIN": $("freedns-domain").val(),
|
||||
"DOMAIN": $("#ddns-domain" ).val(),
|
||||
"UPDATEHASH": $("#freedns-hash").val(),
|
||||
"UPDATEINTERVAL": "30"
|
||||
},
|
||||
nextTabOnSuccess
|
||||
post_ddns_hook
|
||||
);
|
||||
// prevent scroll up
|
||||
return false;
|
||||
});
|
||||
|
||||
// Show noip step
|
||||
$('#ddns-noip').on('click', function() {
|
||||
$('#ddns-noip').on('click', function(){
|
||||
$("#noip" ).show();
|
||||
$("#freedns").hide();
|
||||
show_with_animation( 'noip' );
|
||||
|
||||
dataTable[9] = {
|
||||
ddns: 'yes',
|
||||
service: 'noip'
|
||||
};
|
||||
show_with_animation( 'ddns-account' );
|
||||
});
|
||||
// Enable noip step
|
||||
$('#ddns-enable-noip').on('click', function() {
|
||||
dataTable[9] = {
|
||||
ddns: 'yes',
|
||||
service: 'noip',
|
||||
user: $("#noip-user").val(),
|
||||
password: $("#noip-password").val(),
|
||||
domain: $("noip-domain").val(),
|
||||
time: $("noip-time").val(),
|
||||
};
|
||||
|
||||
launch_action( 'no-ip',
|
||||
// Enable noip step
|
||||
$('#ddns-enable-noip').on('click', function(){
|
||||
launch_action( 'no-ip',
|
||||
{
|
||||
"ACTIVE":"yes",
|
||||
"USER": $("#noip-user").val(),
|
||||
"PASS": $("#noip-password").val(),
|
||||
"DOMAIN": $("noip-domain").val(),
|
||||
"TIME": "30"
|
||||
"DOMAIN": $("#ddns-domain" ).val(),
|
||||
"USER": $("#noip-user" ).val(),
|
||||
"PASS": $("#noip-password").val(),
|
||||
},
|
||||
nextTabOnSuccess
|
||||
post_ddns_hook
|
||||
);
|
||||
});
|
||||
// prevent scroll up
|
||||
return false;
|
||||
}
|
||||
);
|
||||
|
||||
// show log output
|
||||
$('#output-btn').on('click', function(){
|
||||
showLog();
|
||||
} );
|
||||
|
||||
// close log output
|
||||
$('.output-close').on('click', function(e){
|
||||
if( e.target.id == 'output-wrapper' )
|
||||
$('#output-wrapper').hide();
|
||||
} );
|
||||
|
||||
// make sure log box starts empty
|
||||
$('#output-box').val('');
|
||||
|
||||
// click to nextcloud button
|
||||
$('#gotonextcloud').attr('href', window.location.protocol + '//' + window.location.hostname );
|
||||
});
|
||||
|
||||
var dataTable = [];
|
||||
|
||||
@ -28,9 +28,8 @@
|
||||
<ul id="ncp-nav">
|
||||
<li><a href="#tab1" data-toggle="tab">Welcome</a></li>
|
||||
<li><a href="#tab2" data-toggle="tab">USB Configuration</a></li>
|
||||
<li><a href="#tab3" data-toggle="tab">Port Forwarding</a></li>
|
||||
<li><a href="#tab4" data-toggle="tab">DDNS</a></li>
|
||||
<li><a href="#tab5" data-toggle="tab">Finish</a></li>
|
||||
<li><a href="#tab3" data-toggle="tab">External access</a></li>
|
||||
<li><a href="#tab4" data-toggle="tab">Finish</a></li>
|
||||
</ul>
|
||||
<div id="bar" class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div>
|
||||
@ -50,11 +49,11 @@
|
||||
<!-- Enable Automount -->
|
||||
<p class="instructions"> Do you want to save Nextcloud data in a USB drive?</p>
|
||||
<div class="buttons-area">
|
||||
<input type="button" class="btn" id="enable-Automount" value="Yes" />
|
||||
<input type="button" class="btn" id="disable-Automount" value="No" />
|
||||
<input type="button" class="btn" id="enable-automount" value="Yes" />
|
||||
<input type="button" class="btn" id="disable-automount" value="No" />
|
||||
</div>
|
||||
<!-- Test mount -->
|
||||
<div class="ncp-hidden" id="plug-usb">
|
||||
<div class="ncp-hidden" id="plug-usb-pane">
|
||||
<p class="instructions">Plug in the USB drive and hit continue.</p>
|
||||
<div class="buttons-area">
|
||||
<input type="button" class="btn" id="plugUSB" value="Continue"/>
|
||||
@ -80,108 +79,131 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Tab 3 content - Test ports - Port Forwarding -->
|
||||
<!-- Tab 3 content - External Access -->
|
||||
<div class="tab-pane" id="tab3">
|
||||
<div class="ncp-tab-pane">
|
||||
<p class="instructions">
|
||||
To access from the outside, your need to forward ports 80 and 443 to your RPi IP address <br>
|
||||
You can have NextCloudPi try to do this automatically for you<br>
|
||||
To do it manually, you can access your router interface, normally at <a href="http://192.168.1.1" target="_blank">http://192.168.1.1</a><br>
|
||||
</p>
|
||||
<div class="buttons-area">
|
||||
<input type="button" class="btn" id="port-forward-run" value="Try to do it for me"/>
|
||||
<input type="button" class="btn" id="port-forward-skip" value="I will do it manually"/>
|
||||
</div>
|
||||
<!-- Enable external access -->
|
||||
<p class="instructions"> Do you want to access Nextcloud from outside your house?</p>
|
||||
<div class="buttons-area">
|
||||
<input type="button" class="btn" id="enable-external" value="Yes" />
|
||||
<input type="button" class="btn" id="skip-external" value="No" />
|
||||
</div>
|
||||
<!-- Throw error message when test after UPnP fails -->
|
||||
<div class="ncp-hidden" id="port-forward-not-ok">
|
||||
<p class="instructions" style="color: red">
|
||||
Couldn't configure port forwarding automatically. You must manually enable UPnP from your Router. After this, try again.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Tab 4 content - DDNS -->
|
||||
<div class="tab-pane" id="tab4">
|
||||
<div class="ncp-tab-pane">
|
||||
<p class="instructions">
|
||||
<div class="ncp-tab-pane ncp-hidden" id="forward-ports-pane">
|
||||
<h3>Port forwarding</h3>
|
||||
<p class="instructions">
|
||||
To access from the outside, your need to forward ports 80 and 443 to your RPi IP address <br>
|
||||
You can have NextCloudPi try to do this automatically for you<br>
|
||||
To do it manually yourself, you must access your router interface, usually at <a href="http://192.168.1.1" target="_blank">http://192.168.1.1</a><br>
|
||||
</p>
|
||||
<div class="buttons-area">
|
||||
<input type="button" class="btn" id="port-forward-run" value="Try to do it for me"/>
|
||||
<input type="button" class="btn" id="port-forward-manual" value="I will do it manually"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ncp-hidden" id="forward-ports-manual-pane">
|
||||
<p class="instructions">
|
||||
Click when you are finished
|
||||
</p>
|
||||
<div class="buttons-area">
|
||||
<input type="button" class="btn" id="port-forward-done" value="Continue"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ncp-tab-pane ncp-hidden" id="ddns-choose">
|
||||
<h3>DDNS</h3>
|
||||
<p class="instructions">
|
||||
You need a DDNS provider in order to access from outside.<br>
|
||||
You will get a domain URL, such as mycloud.ownyourbits.com.<br>
|
||||
You need to create a free account with FreeDNS, DuckDNS or No-IP. <br>
|
||||
If you don't know which one to chose just <a href="https://freedns.afraid.org/signup/?plan=starter" target="_blank">click here for FreeDNS</a> <br>
|
||||
If you don't know which one to choose just <a href="https://freedns.afraid.org/signup/?plan=starter" target="_blank">click here for FreeDNS</a> <br>
|
||||
<br>
|
||||
Choose a client.
|
||||
<div class="buttons-area">
|
||||
<input type="button" class="btn" id="ddns-freedns" value="FreeDNS"/>
|
||||
<input type="button" class="btn" id="ddns-noip" value="No-IP"/>
|
||||
<input type="button" class="btn" id="ddns-skip" value="Skip"/>
|
||||
</div>
|
||||
<!-- Configure FreeDNS -->
|
||||
<div class="ncp-hidden" id="freedns">
|
||||
<p class="instructions">
|
||||
Fill the input area for FreeDNS.
|
||||
</p>
|
||||
<div class="buttons-area">
|
||||
<form class="ddns-form">
|
||||
<p>Domain
|
||||
<input type="text" id="freedns-domain" placeholder="cloud.ownyourbits.com">
|
||||
</p>
|
||||
<p>Update Hash
|
||||
<input type="text" id="freedns-hash" placeholder="abcdefghijklmnopqrstuvwxyzABCDEFGHIJK1234567">
|
||||
</p>
|
||||
</form>
|
||||
<input type="button" class="btn" id="ddns-enable-freedns" value="Enable FreeDNS"/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Configure No-IP -->
|
||||
<div class="ncp-hidden" id="noip">
|
||||
<p class="instructions">
|
||||
Fill in the input area for No-IP.
|
||||
</p>
|
||||
<div class="buttons-area">
|
||||
<div class="ddns-form">
|
||||
<form>
|
||||
<p>User
|
||||
<input type="text" id="noip-user" placeholder="user@ownyourbits.com">
|
||||
</p>
|
||||
<p>Password
|
||||
<input type="text" id="noip-password" placeholder="secret">
|
||||
</p>
|
||||
<p>Domain
|
||||
<input type="text" id="noip-domain" placeholder="cloud.ownyourbits.com">
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
<input type="button" class="btn" id="ddns-enable-noip" value="Enable No-IP"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Tab 5 content - Finish -->
|
||||
<div class="tab-pane" id="tab5">
|
||||
<div class="ncp-tab-pane">
|
||||
<p class="instructions">
|
||||
NextCloudPi is ready!</p>
|
||||
Choose a client.
|
||||
<div class="buttons-area">
|
||||
<input type="button" class="btn" id="ddns-freedns" value="FreeDNS"/>
|
||||
<input type="button" class="btn" id="ddns-noip" value="No-IP"/>
|
||||
<input type="button" class="btn" id="ddns-skip" value="Skip"/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- DDNS domain -->
|
||||
<div class="ncp-hidden" id="ddns-account">
|
||||
<div class="buttons-area">
|
||||
<p class="instructions"> Account details for DDNS service. </p>
|
||||
<table>
|
||||
<tr>
|
||||
<td><label for="ddns-domain">Domain</label></td>
|
||||
<td> <input type="text" id="ddns-domain" placeholder="cloud.ownyourbits.com"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="linkbox">
|
||||
<a id='gotonextcloud' href="#"><img id="nextcloud" src="img/nc-logo.png"></a>
|
||||
<br>go to your Nextcloud
|
||||
</div>
|
||||
<div class="linkbox">
|
||||
<a href=".."><img id="ncp-web" src="img/ncp-logo.png"></a>
|
||||
<br>go back to NextCloudPi web panel
|
||||
</div>
|
||||
<!-- Configure FreeDNS -->
|
||||
<div class="ncp-hidden" id="freedns">
|
||||
<div class="buttons-area">
|
||||
<form class="ddns-form">
|
||||
<table>
|
||||
<tr>
|
||||
<td><label for="freedns-hash">Update Hash</label></td>
|
||||
<td><input type="text" id="freedns-hash" placeholder="abcdefghijklmnopqrstuvwxyzABCDEFGHIJK1234567"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="buttons-area">
|
||||
<button class="btn" id="ddns-enable-freedns">Finish</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- Configure No-IP -->
|
||||
<div class="ncp-hidden" id="noip">
|
||||
<div class="buttons-area">
|
||||
<div class="ddns-form">
|
||||
<form>
|
||||
<table>
|
||||
<tr>
|
||||
<td><label for="noip-user">User</label></td>
|
||||
<td><input type="text" id="noip-user" placeholder="user@ownyourbits.com"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="noip-password">Password</label></td>
|
||||
<td><input type="text" id="noip-password" placeholder="secret"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="buttons-area">
|
||||
<button class="btn" id="ddns-enable-noip">Finish</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Navigation buttons -->
|
||||
<ul class="pager wizard" id="ncp-pager">
|
||||
<li class="previous first" style="display:none;"><a href="#">First</a></li>
|
||||
<li class="previous"><a href="#">Previous</a></li>
|
||||
<li class="next last" style="display:none;"><a href="#">Last</a></li>
|
||||
<li class="next"><a href="#">Next</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Tab 4 content - Finish -->
|
||||
<div class="tab-pane" id="tab4">
|
||||
<div class="ncp-tab-pane">
|
||||
<p class="instructions"> NextCloudPi is ready!</p>
|
||||
|
||||
<div class="linkbox">
|
||||
<a id='gotonextcloud' href="#"><img id="nextcloud" src="img/nc-logo.png"></a>
|
||||
<br>go to your Nextcloud
|
||||
</div>
|
||||
<div class="linkbox">
|
||||
<a href=".."><img id="ncp-web" src="img/ncp-logo.png"></a>
|
||||
<br>go back to NextCloudPi web panel
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="expand">
|
||||
<div id="output-btn" class="menu-icon"></div>
|
||||
</div>
|
||||
|
||||
<div id="output-wrapper" class="output-close ncp-hidden">
|
||||
<textarea readonly id="output-box" rows="25" cols="60"></textarea>
|
||||
</div>
|
||||
<div id="notifications"></div>
|
||||
|
||||
<?php
|
||||
include ('../csrf.php');
|
||||
|
||||
@ -96,6 +96,10 @@ touch /run/ncp.log
|
||||
chmod 640 /run/ncp.log
|
||||
chown root:www-data /run/ncp.log
|
||||
launch_script $1 &> /run/ncp.log
|
||||
|
||||
# clean log for the next PHP backend call to start clean,
|
||||
# but wait until everything from current execution is read
|
||||
sleep 0.5 && echo "" > /run/ncp.log
|
||||
EOF
|
||||
chmod 700 /home/www/ncp-launcher.sh
|
||||
echo "www-data ALL = NOPASSWD: /home/www/ncp-launcher.sh , /sbin/halt" >> /etc/sudoers
|
||||
|
||||
@ -204,6 +204,9 @@ sudo -u www-data php /var/www/nextcloud/occ notification:generate \
|
||||
-l "Packages automatically upgraded \$PKGS"
|
||||
EOF
|
||||
chmod +x /usr/local/bin/ncp-notify-unattended-upgrade
|
||||
|
||||
# log adjustment for wizard
|
||||
grep -q sleep /home/www/ncp-launcher.sh || echo "sleep 0.5 && echo \"\" > /run/ncp.log" >> /home/www/ncp-launcher.sh
|
||||
}
|
||||
|
||||
# License
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user