diff --git a/hooks/subjects.pl b/hooks/subjects.pl index fdb8ced..0ad91a5 100755 --- a/hooks/subjects.pl +++ b/hooks/subjects.pl @@ -3,6 +3,7 @@ use strict; use warnings; use v5.10; +use Digest::SHA qw(sha1_base64); use File::Basename; use ACU::API::Projects; @@ -57,7 +58,7 @@ sub check_xml else { open $fh, "|xmllint --noout -"; } - print $fh $content; + print $fh ${ $content }; close $fh; return $?; @@ -134,13 +135,32 @@ sub tag_project } # Check DTD validity - if (check_xml($content, "http://acu.epita.fr/dtd/project.dtd")) { + if (check_xml(\$content, "http://acu.epita.fr/dtd/project.dtd")) { log ERROR, "Corrigez les erreurs du fichier project.xml avant de lancer la création du projet."; } # TODO: check user permissions # Generate token for VCS submission + my $dom = XML::LibXML->load_xml(string => (\$content)); + my $mod = 0; + for $vcs ($dom->documentElement()->getElementsByTagName("vcs")) + { + if (! $vcs->hasAttribute("token")) + { + my $token; + do { + $token = sha1_base64(rand); + $token =~ s/[^a-zA-Z0-9]//g; + } while (length $token >= 12); + $vcs->setAttribute("token", $token); + $mod = 1; + } + } + + if ($mod) { + $content = $dom->toString(); + } # Send data to intradata log INFO, "Attente d'un processus de publication...";