Bartender.pm 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package Bartender;
  2. use Dancer2;
  3. use Data::Dumper;
  4. use POSIX ();
  5. our $VERSION = '0.1';
  6. get '/shake' => sub {
  7. my %param = params;
  8. my $error = {};
  9. my $opt_dossier = $param{dossier};
  10. my $opt_base = $param{projetPadPrincipal};
  11. my $opt_garde = $param{projetPadGarde};
  12. my $opt_projet = $param{projetId};
  13. for($opt_dossier, $opt_projet) {
  14. if( m{[^a-zA-Z0-9_-]} ) {
  15. $error->{message} .= qq{"$_" est incorrect.};
  16. }
  17. }
  18. for($opt_base, $opt_garde) {
  19. if(not m/^https?:\/\/pad\.exegetes\.eu\.org\/p\/[.a-z0-9A-Z\$\/-]+$/i ) {
  20. $error->{message} .= qq{"$_" est incorrect.};
  21. }
  22. }
  23. my $cocktail_binary = config->{cocktail}{binary};
  24. if(not defined $cocktail_binary) {
  25. $error->{message} .= qq{"cocktail:binary" n'est pas configuré dans config.yml};
  26. }
  27. elsif(not -x $cocktail_binary) {
  28. $error->{message} .= qq{"cocktail:binary" "$cocktail_binary" n'est pas executable};
  29. }
  30. if($error->{message}) {
  31. return template 'error', $error;
  32. }
  33. system("$cocktail_binary -d $opt_dossier -b '$opt_base' -g '$opt_garde' -p $opt_projet &");
  34. redirect request->referer;
  35. };
  36. get '/status' => sub {
  37. my %param = params;
  38. my $error = {};
  39. my $opt_dossier = $param{dossier};
  40. my $opt_projet = $param{projetId};
  41. my $cocktail_store = config->{cocktail}{store};
  42. if(not -d $cocktail_store) {
  43. $error->{message} .= qq{"cocktail:store" n'est pas configuré dans config.yml};
  44. }
  45. if(not defined $opt_projet) {
  46. $error->{message} .= qq{arg:projetId est incorrect};
  47. }
  48. if($error->{message}) {
  49. return template 'error', $error;
  50. }
  51. my $compilation_status;
  52. if(-e "$cocktail_store/$opt_dossier/$opt_projet.lock") {
  53. $compilation_status = "En cours de compilation...";
  54. }
  55. elsif(-e "$cocktail_store/$opt_dossier/$opt_projet.pdf") {
  56. my @stat = stat "$cocktail_store/$opt_dossier/$opt_projet.pdf";
  57. my $ctime = $stat[10];
  58. my $date_time = POSIX::strftime("%Y-%m-%d %H:%M:%S", localtime($ctime) );
  59. $compilation_status = $date_time;
  60. }
  61. else {
  62. $compilation_status = "Aucune compilation.";
  63. }
  64. header 'Content-Type' => 'application/json';
  65. return to_json { text => $compilation_status };
  66. };
  67. true;