diff --git a/ACU/API/Base.pm b/ACU/API/Base.pm index ef99cbb..0fc698b 100644 --- a/ACU/API/Base.pm +++ b/ACU/API/Base.pm @@ -40,7 +40,11 @@ sub parse($$) my $sax_handler; $sax_handler = ResultHandler->new($parsed) if ($mod eq "ResultHandler"); - return XML::LibXML->load_xml(string => shift) if ($mod eq "ProjectHandler"); + if ($mod eq "ProjectHandler") + { + use ACU::Project; + $sax_handler = ProjectHandler->new($parsed); + } $sax_handler = ProjectMemberHandler->new($parsed) if ($mod eq "ProjectMemberHandler"); my $parser = XML::SAX::ParserFactory->parser( Handler => $sax_handler ); @@ -71,7 +75,10 @@ sub get($$) my $url = shift; my $ua = LWP::UserAgent->new; - $ua->ssl_opts(SSL_ca_file => "/etc/ldap/cacert.pem"); + # Some old version of LWP::UserAgent doesn't support ssl_opts, this is not required + eval { + $ua->ssl_opts(SSL_ca_file => "/etc/ldap/cacert.pem"); + }; log(DEBUG, 'GET Request to ', API_URL, $url); my $req = GET API_URL . $url; @@ -89,7 +96,10 @@ sub send($$$) my $url = shift; my $ua = LWP::UserAgent->new; - $ua->ssl_opts(SSL_ca_file => "/etc/ldap/cacert.pem"); + # Some old version of LWP::UserAgent doesn't support ssl_opts, this is not required + eval { + $ua->ssl_opts(SSL_ca_file => "/etc/ldap/cacert.pem"); + }; log(DEBUG, 'POST Request to ', API_URL, $url); my $req = POST API_URL . $url, shift; diff --git a/ACU/LDAP.pm b/ACU/LDAP.pm index bbee587..f2c2295 100644 --- a/ACU/LDAP.pm +++ b/ACU/LDAP.pm @@ -21,7 +21,8 @@ my $bindsecret = ""; sub ldap_get_password { - return Password::get_password "/home/intradmin/.secret_ldap"; + return Password::get_password "/home/2014/mercie_d/.secret_ldap"; +# return Password::get_password "/home/intradmin/.secret_ldap"; } our $secret_search = \&ldap_get_password; diff --git a/commands/ldap/extract_students.pl b/commands/ldap/extract_students.pl index b9966e3..9927081 100644 --- a/commands/ldap/extract_students.pl +++ b/commands/ldap/extract_students.pl @@ -21,7 +21,7 @@ sub get_students if ($#ARGV == -1) { log(USAGE, "$0 format"); - say "format can be csv" + say "format can be csv or login" } elsif ($ARGV[0] eq "csv") { @@ -35,3 +35,9 @@ elsif ($ARGV[0] eq "csv") say ",Present"; } } +elsif ($ARGV[0] eq "login") +{ + for my $student (get_students $ARGV[1]) { + say $student->get_value("uid"); + } +} diff --git a/hooks/submissions.pl b/hooks/submissions.pl index 277c91b..80e6f19 100755 --- a/hooks/submissions.pl +++ b/hooks/submissions.pl @@ -42,6 +42,43 @@ if ($ref =~ m<^refs/tags/(.+)$>) } log TRACE, $project; + + # Extract lot of data + my @rendus = grep { + exists $_->{vcs} and $_->{vcs}{tag} eq $tag; + } @{ $project->{submissions} }; + + my $date = $ENV{'GL_TS'}; + $date =~ s/\./ /; + my $glts = ParseDate($date); + + chomp (my $tokengiven = `git cat-file tag $newsha | sed -e '1,/^\$/d'`); + for my $rendu (@rendus) + { + my $open = ParseDate($rendu->{period}{begin}); + my $close = ParseDate($rendu->{period}{end}); + + # TODO: check exceptions by login/group + + if ((Date_Cmp($glts, $open) == -1)) + { + print "[ACU] Tag not allowed: upload not yet opened!\n"; + exit(4); + } + + if ((Date_Cmp($glts, $close) == 1)) + { + print "[ACU] Tag not allowed: upload closed!\n"; + exit(5); + } + + my $token = $rendu->{vcs}{token}; + if ($token ne "" and $token ne $tokengiven) + { + print "[ACU] Error 0x65cd58: Bad token.\n"; + exit(6); + } + } } exit 1;