* New manager in progress
* Strange problem with Net::LDAP in mpm-worker environment (not fixed) * Clean lock files when using Apache::Session::File
This commit is contained in:
parent
7a04829a08
commit
95424e487a
@ -42,12 +42,7 @@ $h->doall();
|
|||||||
package Lemonldap::NG::Manager::Experimental;
|
package Lemonldap::NG::Manager::Experimental;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use MIME::Base64;
|
|
||||||
use Lemonldap::NG::Handler::CGI qw(:globalStorage :locationRules);
|
use Lemonldap::NG::Handler::CGI qw(:globalStorage :locationRules);
|
||||||
use Lemonldap::NG::Common::Conf::Constants; #inherits
|
|
||||||
use Lemonldap::NG::Common::Safelib; #link protected safe Safe object
|
|
||||||
|
|
||||||
#require Lemonldap::NG::Manager::_Struct; #inherits
|
|
||||||
|
|
||||||
our $VERSION = '0.1';
|
our $VERSION = '0.1';
|
||||||
our ( $stylesheet, $parser );
|
our ( $stylesheet, $parser );
|
||||||
@ -56,8 +51,7 @@ our @ISA;
|
|||||||
BEGIN {
|
BEGIN {
|
||||||
require Lemonldap::NG::Manager::Help; #inherits
|
require Lemonldap::NG::Manager::Help; #inherits
|
||||||
*process = *doall;
|
*process = *doall;
|
||||||
@ISA =
|
@ISA = qw(Lemonldap::NG::Handler::CGI Lemonldap::NG::Manager::Downloader Lemonldap::NG::Manager::Uploader Lemonldap::NG::Manager::_Struct);
|
||||||
qw(Lemonldap::NG::Handler::CGI Lemonldap::NG::Manager::_Struct Lemonldap::NG::Manager::Uploader);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
@ -99,11 +93,18 @@ sub doall {
|
|||||||
$self->confUpload($rdata);
|
$self->confUpload($rdata);
|
||||||
$self->quit();
|
$self->quit();
|
||||||
}
|
}
|
||||||
|
elsif ( my $id = $self->param('newNode') ) {
|
||||||
|
print $self->header( -type => 'text/html; charset=utf8', );
|
||||||
|
print '<li class="doc-last"><span>test</span></li>';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
#require Lemonldap::NG::Manager::Downloader; #inherits
|
||||||
$self->{cfgNum} =
|
$self->{cfgNum} =
|
||||||
$self->param('cfgNum')
|
$self->param('cfgNum')
|
||||||
|| $self->confObj->lastCfg()
|
|| $self->confObj->lastCfg()
|
||||||
|| 'UNAVAILABLE';
|
|| 'UNAVAILABLE';
|
||||||
if ( my $p = $self->param('node') ) {
|
if ( my $p = $self->param('node') ) {
|
||||||
|
print $self->header( -type => 'text/html; charset=utf8', );
|
||||||
$self->node($p);
|
$self->node($p);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -114,8 +115,125 @@ sub doall {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## @method protected void start()
|
||||||
|
# Display HTTP and HTML headers.
|
||||||
|
sub start {
|
||||||
|
my $self = shift;
|
||||||
|
print $self->header( -type => 'text/html; charset=utf8', );
|
||||||
|
print $self->start_html(
|
||||||
|
-title => shift || 'Lemonldap::NG Manager',
|
||||||
|
-encoding => 'utf8',
|
||||||
|
-script => [
|
||||||
|
{
|
||||||
|
-language => 'JavaScript1.2',
|
||||||
|
|
||||||
|
#-src => "lemonldap-ng-manager.js",
|
||||||
|
-src => "$self->{imagePath}/xlib.js",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-language => 'JavaScript1.2',
|
||||||
|
-src => $self->{jqueryUri} || 'jquery.js',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-language => 'JavaScript1.2',
|
||||||
|
-src => "$self->{imagePath}/tree.js",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-language => 'JavaScript1.2',
|
||||||
|
-code => "var scriptname='$ENV{SCRIPT_NAME}';"
|
||||||
|
. "var imagepath='$self->{imagePath}';",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-language => 'JavaScript1.2',
|
||||||
|
-src => "$self->{imagePath}/manager.js",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
-style => {
|
||||||
|
-src => [
|
||||||
|
"$self->{imagePath}/manager.css",
|
||||||
|
( $self->{personnalCss} ? $self->{personnalCss} : () )
|
||||||
|
],
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub window {
|
||||||
|
my ( $self, $root, $data ) = @_;
|
||||||
|
print '<div class="clsTemporaryContainer">
|
||||||
|
<div style="visibility: visible;" id="idSplitter3" class="clsSplitter">
|
||||||
|
<div style="z-index: 2;" id="gauche" class="clsPane">
|
||||||
|
<img style="padding:4px;padding-left:12px;" alt="Lemonldap::NG" src="'
|
||||||
|
. $self->{imagePath}
|
||||||
|
. '/logo_lemonldap-ng.png"/><br/> <ul class="simpleTree">'
|
||||||
|
. $self->li( 'root', 'root' )
|
||||||
|
. $self->span( 'root', $root, $data, '', 'default' ) . '<ul>';
|
||||||
|
}
|
||||||
|
|
||||||
|
## @method protected void end()
|
||||||
|
# Display the end of HTML page.
|
||||||
|
sub end {
|
||||||
|
my $self = shift;
|
||||||
|
print << "EOF";
|
||||||
|
</ul></li></ul></div><!-- end Pane -->
|
||||||
|
<div style="overflow: hidden; z-index: 2;" id="droit" class="clsPane">
|
||||||
|
<div style="visibility: visible;" id="idSplitter32" class="clsSplitter">
|
||||||
|
<div style="z-index: 2;overflow:auto;height:500px;" id="haut" class="clsPane">
|
||||||
|
<form action="#" onsubmit="false">
|
||||||
|
<h2 id="content_title">Lemonldap::NG Manager</h2>
|
||||||
|
<div id="buttons">
|
||||||
|
<button onclick="\$.post(scriptname,{data: \$('#li_cm9vdA2').html()},function(data){return 1},'html');" >Sauvegarder</button>
|
||||||
|
</div>
|
||||||
|
<div id="content">
|
||||||
|
<div id="content_default" class="content">
|
||||||
|
Default
|
||||||
|
</div>
|
||||||
|
<div id="content_text" class="hidden">
|
||||||
|
<input type="text" id="text" onchange="setlmdata(currentId,this.value)"/>
|
||||||
|
</div>
|
||||||
|
<div id="content_securedCookie" class="hidden">
|
||||||
|
<input id="securedCookie0" type="radio" name="securedCookie" value="0" onclick="setlmdata('li_bGlfL3NlY3VyZWRDb29raWU1','0')" /> Cookie non sécurisé <br/>
|
||||||
|
<input id="securedCookie1" type="radio" name="securedCookie" value="1" onclick="setlmdata('li_bGlfL3NlY3VyZWRDb29raWU1','1')" /> Cookie sécurisé <br/>
|
||||||
|
<input id="securedCookie2" type="radio" name="securedCookie" value="2" onclick="setlmdata('li_bGlfL3NlY3VyZWRDb29raWU1','2')" /> 2 cookies <br/>
|
||||||
|
</div>
|
||||||
|
<div id="content_int" class="hidden">
|
||||||
|
<input type="text" id="int" onchange="setlmdata(currentId,this.value)"/>
|
||||||
|
</div>
|
||||||
|
<div id="content_btext" class="hidden">
|
||||||
|
<button onclick="newKey();return 0;">NewKey</button>
|
||||||
|
<input type="text" id="btextKey" onchange="setlmtext(currentId,this.value)"/> <input type="text" id="btextValue" onchange="setlmdata(currentId,this.value)"/>
|
||||||
|
</div>
|
||||||
|
<div id="content_rules" class="hidden">
|
||||||
|
<textarea id="rulKey" cols="30" rows="2" onchange="setlmtext(currentId,this.value)"></textarea> <textarea id="rulValue" cols="50" rows="2" onchange="setlmdata(currentId,this.value)"></textarea>
|
||||||
|
</div>
|
||||||
|
</div></form>
|
||||||
|
</div><!-- end Pane -->
|
||||||
|
<div style="z-index: 2;" id="bas" class="clsPane">
|
||||||
|
<div id="help">
|
||||||
|
</div>
|
||||||
|
</div><!-- end Pane -->
|
||||||
|
<div style="z-index: 1; cursor: n-resize;" id="barre2" class="clsDragBar clsDragBar-hframe">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div><!-- end Splitter -->
|
||||||
|
</div><!-- end Pane -->
|
||||||
|
<div style="z-index: 1; cursor: n-resize;" id="barre3" class="clsDragBar clsDragBar-vframe">
|
||||||
|
</div>
|
||||||
|
</div><!-- end Splitter -->
|
||||||
|
</div><!-- end TemporaryContainer -->
|
||||||
|
EOF
|
||||||
|
print $self->end_html();
|
||||||
|
}
|
||||||
|
|
||||||
|
package Lemonldap::NG::Manager::Downloader;
|
||||||
|
|
||||||
|
use Lemonldap::NG::Common::Conf::Constants; #inherits
|
||||||
|
use Lemonldap::NG::Common::Safelib; #link protected safe Safe object
|
||||||
|
use MIME::Base64;
|
||||||
|
# TODO
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
|
||||||
|
#require Lemonldap::NG::Manager::_Struct; #inherits
|
||||||
|
|
||||||
sub node {
|
sub node {
|
||||||
my ( $self, $node ) = @_;
|
my ( $self, $node ) = @_;
|
||||||
$node =~ s/^\///;
|
$node =~ s/^\///;
|
||||||
@ -371,113 +489,6 @@ sub li {
|
|||||||
return "<li id=\"$id\"" . ( $class ? " class=\"$class\">" : ">" );
|
return "<li id=\"$id\"" . ( $class ? " class=\"$class\">" : ">" );
|
||||||
}
|
}
|
||||||
|
|
||||||
## @method protected void start()
|
|
||||||
# Display HTTP and HTML headers.
|
|
||||||
sub start {
|
|
||||||
my $self = shift;
|
|
||||||
print $self->header( -type => 'text/html; charset=utf8', );
|
|
||||||
print $self->start_html(
|
|
||||||
-title => shift || 'Lemonldap::NG Manager',
|
|
||||||
-encoding => 'utf8',
|
|
||||||
-script => [
|
|
||||||
{
|
|
||||||
-language => 'JavaScript1.2',
|
|
||||||
|
|
||||||
#-src => "lemonldap-ng-manager.js",
|
|
||||||
-src => "$self->{imagePath}/xlib.js",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-language => 'JavaScript1.2',
|
|
||||||
-src => $self->{jqueryUri} || 'jquery.js',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-language => 'JavaScript1.2',
|
|
||||||
-src => "$self->{imagePath}/tree.js",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-language => 'JavaScript1.2',
|
|
||||||
-code => "var scriptname='$ENV{SCRIPT_NAME}';"
|
|
||||||
. "var imagepath='$self->{imagePath}';",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-language => 'JavaScript1.2',
|
|
||||||
-src => "$self->{imagePath}/manager.js",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
-style => {
|
|
||||||
-src => [
|
|
||||||
"$self->{imagePath}/manager.css",
|
|
||||||
( $self->{personnalCss} ? $self->{personnalCss} : () )
|
|
||||||
],
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub window {
|
|
||||||
my ( $self, $root, $data ) = @_;
|
|
||||||
print '<div class="clsTemporaryContainer">
|
|
||||||
<div style="visibility: visible;" id="idSplitter3" class="clsSplitter">
|
|
||||||
<div style="z-index: 2;" id="gauche" class="clsPane">
|
|
||||||
<img style="padding:4px;padding-left:12px;" alt="Lemonldap::NG" src="'
|
|
||||||
. $self->{imagePath}
|
|
||||||
. '/logo_lemonldap-ng.png"/><br/> <ul class="simpleTree">'
|
|
||||||
. $self->li( 'root', 'root' )
|
|
||||||
. $self->span( 'root', $root, $data, '', 'default' ) . '<ul>';
|
|
||||||
}
|
|
||||||
|
|
||||||
## @method protected void end()
|
|
||||||
# Display the end of HTML page.
|
|
||||||
sub end {
|
|
||||||
my $self = shift;
|
|
||||||
print << 'EOF';
|
|
||||||
</ul></li></ul></div><!-- end Pane -->
|
|
||||||
<div style="overflow: hidden; z-index: 2;" id="droit" class="clsPane">
|
|
||||||
<div style="visibility: visible;" id="idSplitter32" class="clsSplitter">
|
|
||||||
<div style="z-index: 2;overflow:auto;height:500px;" id="haut" class="clsPane">
|
|
||||||
<form action="#" onsubmit="false">
|
|
||||||
<h2 id="content_title">Lemonldap::NG Manager</h2>
|
|
||||||
<div id="buttons"></div>
|
|
||||||
<button onclick="$.post('/test.pl',{data: $('#li_cm9vdA2').html()},function(data){return 1},'html');" >Sauvegarder</button>
|
|
||||||
<div id="content">
|
|
||||||
<div id="content_default" class="content">
|
|
||||||
Default
|
|
||||||
</div>
|
|
||||||
<div id="content_text" class="hidden">
|
|
||||||
<input type="text" id="text" onchange="setlmdata(currentId,this.value)"/>
|
|
||||||
</div>
|
|
||||||
<div id="content_securedCookie" class="hidden">
|
|
||||||
<input id="securedCookie0" type="radio" name="securedCookie" value="0" onclick="setlmdata('li_bGlfL3NlY3VyZWRDb29raWU1','0')" /> Cookie non sécurisé <br/>
|
|
||||||
<input id="securedCookie1" type="radio" name="securedCookie" value="1" onclick="setlmdata('li_bGlfL3NlY3VyZWRDb29raWU1','1')" /> Cookie sécurisé <br/>
|
|
||||||
<input id="securedCookie2" type="radio" name="securedCookie" value="2" onclick="setlmdata('li_bGlfL3NlY3VyZWRDb29raWU1','2')" /> 2 cookies <br/>
|
|
||||||
</div>
|
|
||||||
<div id="content_int" class="hidden">
|
|
||||||
<input type="text" id="int" onchange="setlmdata(currentId,this.value)"/>
|
|
||||||
</div>
|
|
||||||
<div id="content_btext" class="hidden">
|
|
||||||
<input type="text" id="btextKey" onchange="setlmtext(currentId,this.value)"/> <input type="text" id="btextValue" onchange="setlmdata(currentId,this.value)"/>
|
|
||||||
</div>
|
|
||||||
<div id="content_rules" class="hidden">
|
|
||||||
<textarea id="rulKey" cols="30" rows="2" onchange="setlmtext(currentId,this.value)"></textarea> <textarea id="rulValue" cols="50" rows="2" onchange="setlmdata(currentId,this.value)"></textarea>
|
|
||||||
</div>
|
|
||||||
</div></form>
|
|
||||||
</div><!-- end Pane -->
|
|
||||||
<div style="z-index: 2;" id="bas" class="clsPane">
|
|
||||||
<div id="help">
|
|
||||||
</div>
|
|
||||||
</div><!-- end Pane -->
|
|
||||||
<div style="z-index: 1; cursor: n-resize;" id="barre2" class="clsDragBar clsDragBar-hframe">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div><!-- end Splitter -->
|
|
||||||
</div><!-- end Pane -->
|
|
||||||
<div style="z-index: 1; cursor: n-resize;" id="barre3" class="clsDragBar clsDragBar-vframe">
|
|
||||||
</div>
|
|
||||||
</div><!-- end Splitter -->
|
|
||||||
</div><!-- end TemporaryContainer -->
|
|
||||||
EOF
|
|
||||||
print $self->end_html();
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
package Lemonldap::NG::Manager::_Struct;
|
package Lemonldap::NG::Manager::_Struct;
|
||||||
@ -705,7 +716,28 @@ sub testStruct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub defaultConf {
|
sub defaultConf {
|
||||||
return { userDB => 'LDAP', };
|
return {
|
||||||
|
userDB => 'LDAP',
|
||||||
|
ldapServer => 'localhost',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub newNode {
|
||||||
|
virtualHost => {
|
||||||
|
'*' => {
|
||||||
|
exportedHeaders => {'Auth-User' => '$uid'},
|
||||||
|
locationRules => {'default' => 'deny'},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
groups => {
|
||||||
|
'NewGroup' => '0',
|
||||||
|
},
|
||||||
|
macro => {
|
||||||
|
'NewMacro' => '',
|
||||||
|
},
|
||||||
|
globalStorageOptions => {
|
||||||
|
'NewOption' => '',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@ -716,6 +748,7 @@ use strict;
|
|||||||
use XML::LibXML;
|
use XML::LibXML;
|
||||||
use XML::LibXSLT;
|
use XML::LibXSLT;
|
||||||
use MIME::Base64;
|
use MIME::Base64;
|
||||||
|
# TODO
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
|
||||||
our $VERSION = '0.1';
|
our $VERSION = '0.1';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
var simpleTreeCollection;
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
var simpleTreeCollection
|
|
||||||
simpleTreeCollection = $(".simpleTree").simpleTree({
|
simpleTreeCollection = $(".simpleTree").simpleTree({
|
||||||
autoclose: false,
|
autoclose: false,
|
||||||
drag: false,
|
drag: false,
|
||||||
@ -88,9 +88,20 @@ function securedCookieValues(id){
|
|||||||
}
|
}
|
||||||
function rules(id){
|
function rules(id){
|
||||||
currentId=id;
|
currentId=id;
|
||||||
//display('btext',$('#'+id).parent().parent);
|
var t=lmtext(id);
|
||||||
|
if(t=='default'){$('#rulKey').attr('readonly','readonly')}
|
||||||
|
else{$('#rulKey').attr('readonly','')}
|
||||||
$('#rulKey').attr('value',lmtext(id));
|
$('#rulKey').attr('value',lmtext(id));
|
||||||
$('#rulValue').attr('value',lmdata(id));
|
$('#rulValue').attr('value',lmdata(id));
|
||||||
display('rules',lmtext(lmparent(id)));
|
display('rules',lmtext(lmparent(id)));
|
||||||
}
|
}
|
||||||
|
function newKey(){
|
||||||
|
//alert(currentId);
|
||||||
|
$.get(scriptname,{'newNode':currentId},function(data,t){
|
||||||
|
var obj = $('#'+currentId).parent().parent();
|
||||||
|
$('#'+currentId).after(data);
|
||||||
|
$('li.line,li.line-last',obj).remove();
|
||||||
|
simpleTreeCollection[0].setTreeNodes($('#'+currentId).parent().parent(),false);
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -40,5 +40,12 @@ for my $id (@t) {
|
|||||||
tied(%h)->delete;
|
tied(%h)->delete;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( $tmp =~ /^Apache::Session::(?:Browseable::)?File$/i ) {
|
||||||
|
require Apache::Session::Lock::File;
|
||||||
|
my $l = new Apache::Session::Lock::File;
|
||||||
|
$l->clean( $conf->{globalStorageOptions}->{LockDirectory},
|
||||||
|
$conf->{timeout} );
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
# LDAP common functions
|
# LDAP common functions
|
||||||
package Lemonldap::NG::Portal::_LDAP;
|
package Lemonldap::NG::Portal::_LDAP;
|
||||||
|
|
||||||
require Net::LDAP; #inherits
|
use Net::LDAP; #inherits
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use base qw(Exporter Net::LDAP);
|
use base qw(Exporter Net::LDAP);
|
||||||
use Lemonldap::NG::Portal::Simple;
|
use Lemonldap::NG::Portal::Simple;
|
||||||
|
Loading…
Reference in New Issue
Block a user