Tons of multiuser support improvements
This commit is contained in:
parent
5168c2c0f0
commit
ca7eee7e7c
6 changed files with 127 additions and 23 deletions
|
@ -8,9 +8,7 @@
|
||||||
|
|
||||||
"action" : function ( arg )
|
"action" : function ( arg )
|
||||||
{
|
{
|
||||||
var out = '';
|
shell.refreshPrompt ( true, true );
|
||||||
shell.refreshPrompt ( true );
|
|
||||||
return out;
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
http.send ( params );
|
http.send ( params );
|
||||||
|
shell.path = shell.json.basepath;
|
||||||
return out;
|
return out;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,19 +112,49 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
http2.send ( null );
|
http2.send ( null );
|
||||||
|
|
||||||
|
var xml2 = new XMLHttpRequest();
|
||||||
|
xml2.open ( "POST", users_php, true );
|
||||||
|
xml2.setRequestHeader ( "Content-type", "application/x-www-form-urlencoded" );
|
||||||
|
xml2.setRequestHeader ( "Content-length", params.length );
|
||||||
|
xml2.setRequestHeader ( "Connection", "close" );
|
||||||
|
params = 'action=gethome';
|
||||||
|
|
||||||
|
xml2.onreadystatechange = function ()
|
||||||
|
{
|
||||||
|
if ( xml2.readyState == 4 && xml2.status == 200 )
|
||||||
|
{
|
||||||
|
if ( xml2.responseText.length > 0 )
|
||||||
|
{
|
||||||
|
shell.home = xml2.responseText;
|
||||||
|
shell.path = shell.home;
|
||||||
|
} else {
|
||||||
|
shell.user = shell.json.user;
|
||||||
}
|
}
|
||||||
|
|
||||||
shell.cmdOut.innerHTML = http.responseText;
|
shell.auto_prompt_focus = true;
|
||||||
|
shell.auto_prompt_refresh = true;
|
||||||
shell.refreshPrompt ( false, false );
|
shell.refreshPrompt ( false, false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xml2.send ( params );
|
||||||
|
shell.cmdOut.innerHTML = http.responseText;
|
||||||
|
} else {
|
||||||
|
shell.cmdOut.innerHTML = http.responseText;
|
||||||
|
shell.auto_prompt_focus = true;
|
||||||
|
shell.auto_prompt_refresh = true;
|
||||||
|
shell.refreshPrompt ( false, false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
http.send ( params );
|
http.send ( params );
|
||||||
|
|
||||||
shell.cmdOut.innerHTML = '';
|
shell.cmdOut.innerHTML = '';
|
||||||
shell.auto_prompt_focus = true;
|
// shell.auto_prompt_focus = true;
|
||||||
shell.auto_prompt_refresh = true;
|
// shell.auto_prompt_refresh = true;
|
||||||
shell.refreshPrompt ( false, false );
|
// shell.refreshPrompt ( false, false );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,38 @@ function getUser ()
|
||||||
return "guest";
|
return "guest";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getHome ()
|
||||||
|
{
|
||||||
|
include 'userlist.php';
|
||||||
|
|
||||||
|
if ( isset ( $_COOKIE['username'] ) && isset ( $_COOKIE['auth'] ))
|
||||||
|
{
|
||||||
|
if ( !( $xml = new SimpleXMLElement ( $xmlcontent )))
|
||||||
|
{
|
||||||
|
return "Unable to open the users XML file\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( $i = 0; $i < count ( $xml->user ); $i++ )
|
||||||
|
{
|
||||||
|
if ( !strcasecmp ( $xml->user[$i]['name'], $_COOKIE['username'] ))
|
||||||
|
{
|
||||||
|
$auth = md5 ( $xml->user[$i]['name'] . $xml->user[$i]['pass'] );
|
||||||
|
|
||||||
|
if ( !strcasecmp ( $auth, $_COOKIE['auth'] ))
|
||||||
|
{
|
||||||
|
return $xml->user[$i]['home'];
|
||||||
|
} else {
|
||||||
|
return '/';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
return '/';
|
||||||
|
}
|
||||||
|
|
||||||
function getPerms ( $resource )
|
function getPerms ( $resource )
|
||||||
{
|
{
|
||||||
include "../../system/files_json.php";
|
include "../../system/files_json.php";
|
||||||
|
@ -377,7 +409,7 @@ function __rmdir ( $dir )
|
||||||
$json = json_decode ( $files_json, true );
|
$json = json_decode ( $files_json, true );
|
||||||
$dir_found = false;
|
$dir_found = false;
|
||||||
|
|
||||||
for ( $i=0; $i < count ( $json ) && !$dir_found; $i++ )
|
for ( $i=0; $i < count ( $json ); $i++ )
|
||||||
{
|
{
|
||||||
$path = $json[$i]['path'];
|
$path = $json[$i]['path'];
|
||||||
|
|
||||||
|
@ -387,18 +419,29 @@ function __rmdir ( $dir )
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $path == $dir )
|
if ( $path == $dir )
|
||||||
|
{
|
||||||
|
if ( $json[$i]['type'] != 'directory' )
|
||||||
|
{
|
||||||
|
$dir = str_replace ( '<', '<', $dir );
|
||||||
|
$dir = str_replace ( '>', '>', $dir );
|
||||||
|
return "rmdir: Could not remove directory $dir: It is not a directory\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( preg_match ( "@^".$dir."(/+.*)?@", $path ))
|
||||||
{
|
{
|
||||||
$dir_found = true;
|
$dir_found = true;
|
||||||
$perms = getPerms ( $dir );
|
$perms = getPerms ( $path );
|
||||||
$perms = json_decode ( $perms, true );
|
$perms = json_decode ( $perms, true );
|
||||||
|
|
||||||
if ( $perms['write'] == false )
|
if ( $perms['write'] == false )
|
||||||
{
|
{
|
||||||
$dir = str_replace ( '<', '<', $dir );
|
$path = str_replace ( '<', '<', $path );
|
||||||
$dir = str_replace ( '>', '>', $dir );
|
$path = str_replace ( '>', '>', $path );
|
||||||
return "rmdir: Could not remove directory $dir: Permission denied\n";
|
return "rmdir: Could not remove directory $path Permission denied\n";
|
||||||
} else {
|
} else {
|
||||||
array_splice ( $json, $i, 1 );
|
array_splice ( $json, $i, 1 );
|
||||||
|
$i--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,12 +117,14 @@ switch ( $action )
|
||||||
}
|
}
|
||||||
|
|
||||||
print "Username not found: '$username'\n";
|
print "Username not found: '$username'\n";
|
||||||
return '';
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'getuser':
|
case 'getuser':
|
||||||
print getUser();
|
print getUser();
|
||||||
return 0;
|
break;
|
||||||
|
|
||||||
|
case 'gethome':
|
||||||
|
print getHome();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'logout':
|
case 'logout':
|
||||||
|
@ -216,6 +218,12 @@ switch ( $action )
|
||||||
|
|
||||||
print __rmdir ( $dir );
|
print __rmdir ( $dir );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default :
|
||||||
|
print "Unallowed action\n";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -16,6 +16,9 @@ function blash ()
|
||||||
/** Current user */
|
/** Current user */
|
||||||
this.user = '';
|
this.user = '';
|
||||||
|
|
||||||
|
/** Home directory */
|
||||||
|
this.home = '/';
|
||||||
|
|
||||||
/** Object containing the parsed JSON configuration object */
|
/** Object containing the parsed JSON configuration object */
|
||||||
this.json = {};
|
this.json = {};
|
||||||
|
|
||||||
|
@ -116,6 +119,29 @@ function blash ()
|
||||||
}
|
}
|
||||||
|
|
||||||
xml.send ( params );
|
xml.send ( params );
|
||||||
|
|
||||||
|
var xml2 = new XMLHttpRequest();
|
||||||
|
xml2.open ( "POST", users_php, true );
|
||||||
|
xml2.setRequestHeader ( "Content-type", "application/x-www-form-urlencoded" );
|
||||||
|
xml2.setRequestHeader ( "Content-length", params.length );
|
||||||
|
xml2.setRequestHeader ( "Connection", "close" );
|
||||||
|
params = 'action=gethome';
|
||||||
|
|
||||||
|
xml2.onreadystatechange = function ()
|
||||||
|
{
|
||||||
|
if ( xml2.readyState == 4 && xml2.status == 200 )
|
||||||
|
{
|
||||||
|
if ( xml2.responseText.length > 0 )
|
||||||
|
{
|
||||||
|
shell.home = xml2.responseText;
|
||||||
|
shell.path = shell.home;
|
||||||
|
} else {
|
||||||
|
shell.user = shell.json.user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xml2.send ( params );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,7 +312,7 @@ function blash ()
|
||||||
return false;
|
return false;
|
||||||
} else if ( key == 76 && evt.ctrlKey ) {
|
} else if ( key == 76 && evt.ctrlKey ) {
|
||||||
// CTRL-l clears the screen
|
// CTRL-l clears the screen
|
||||||
this.refreshPrompt ( true );
|
this.refreshPrompt ( true, false );
|
||||||
return false;
|
return false;
|
||||||
} else if ( key == 13 || key == 10 || ( key == 67 && evt.ctrlKey )) {
|
} else if ( key == 13 || key == 10 || ( key == 67 && evt.ctrlKey )) {
|
||||||
if ( this.prompt.value.length != 0 && ( key != 67 || !evt.ctrlKey ))
|
if ( this.prompt.value.length != 0 && ( key != 67 || !evt.ctrlKey ))
|
||||||
|
@ -601,14 +627,12 @@ function blash ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !clearOut )
|
if ( !clearOut )
|
||||||
{
|
|
||||||
if ( out.length > 0 )
|
|
||||||
{
|
{
|
||||||
var outDiv = document.createElement ( 'span' );
|
var outDiv = document.createElement ( 'span' );
|
||||||
outDiv.innerHTML = '<br/>' + out + '<br/>' + text;
|
outDiv.innerHTML = ((value.length > 0) ? value : '') +
|
||||||
|
'<br/>' + ((out.length > 0) ? (out + '<br/>') : '') + text;
|
||||||
this.window.appendChild ( outDiv );
|
this.window.appendChild ( outDiv );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
this.prompt = document.createElement ( 'input' );
|
this.prompt = document.createElement ( 'input' );
|
||||||
this.prompt.setAttribute ( 'name', 'blashPrompt' );
|
this.prompt.setAttribute ( 'name', 'blashPrompt' );
|
||||||
|
|
Loading…
Reference in a new issue