Files @ 9ff02fc4e490
Branch filter:

Location: C3L/Midgard/filename1.pl - annotation

virii
Alpha version
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
9ff02fc4e490
#!/usr/bin/env perl

use strict;
use warnings;
use diagnostics;

use YAML::Tiny;
use XML::LibXML;
use MIME::Base64;
use AnyEvent::XMLRPC;
use experimental 'smartmatch';

##################################################################################################
my ($YAMLoutput, $YAMLbase64);
my ($member, $memberstatus, $membercounter, $username);
my ($voting, $birthday, $address, $votingright, $votingrights);
my ($regularmember, $studentmember, $supportmember, $starvingmember);
my ($serv, $sharedsecret, $XMLparser, $XMLfile, $XMLquery, $XMLnode);
my ($chaosid, $lastname, $forename, $email, $status, $date, $paid, $userbox, $keyowner, $comment);
my (@members, @usernames, %usercontacts);
my @sharedsecrets = ('secret1', 'secret2');
##################################################################################################

$serv = AnyEvent::XMLRPC->new(
                port    => 9090,
                uri     => "/RPC2",
                ssl     => {
                         cert_file => "cert.pem",
                         key_file  => "key.pem"
                },
                methods => {
                        'CHAOSID'     => \&CHAOSID,
                        'COUNTER'     => \&COUNTER,
                        'MEMBERINFO'  => \&MEMBERINFO,
                        'VOTINGRIGHT' => \&VOTINGRIGHT
                },
        );


sub CHAOSID {
  ($sharedsecret, $chaosid) = ("none", 0);
  ($sharedsecret, $chaosid) = @_;
  return "FUCK OFF"    unless ($sharedsecret ~~ @sharedsecrets);
  return "NO CHAOS ID" unless (length $chaosid == 36);

  $XMLparser = XML::LibXML->new();
  $XMLfile   = $XMLparser->parse_file('datebank');
  @members   = $XMLfile->findnodes('/memberdatebank/memberen/member');

  $username = 0;

  $XMLquery  = "/memberdatebank/memberen/member[id/text() = '$chaosid']";
    foreach $XMLnode ($XMLfile->findnodes($XMLquery)) {
      $username = $XMLnode->findnodes('./nick');
    }

  return "NO SUCH USER" unless $username;

  $YAMLoutput = YAML::Tiny->new( { ChaosID => "$chaosid", Username => "$username" } );
  chomp ($YAMLbase64 = encode_base64 $YAMLoutput->write_string);
  return $YAMLbase64;
}


sub MEMBERINFO {
  ($sharedsecret, $username) = ("none", 0);
  ($sharedsecret, $username) = @_;
  return "FUCK OFF" unless ($sharedsecret ~~ @sharedsecrets);
  return "NO USER"  unless $username;

  $XMLparser = XML::LibXML->new();
  $XMLfile   = $XMLparser->parse_file('datebank');
  @members   = $XMLfile->findnodes('/memberdatebank/memberen/member');

  ($chaosid, $lastname, $forename, $email, $status, $date, $paid, $userbox, $keyowner, $comment) = 0;

  $XMLquery  = "/memberdatebank/memberen/member[nick/text() = '$username']";
    foreach $XMLnode ($XMLfile->findnodes($XMLquery)) {
        $chaosid  = $XMLnode->findnodes('./id');
        $lastname = $XMLnode->findnodes('./numm');
        $forename = $XMLnode->findnodes('./nonumm');
        $birthday = $XMLnode->findnodes('./gebuertsdag');
        $address  = $XMLnode->findnodes('./adress');
        $email    = $XMLnode->findnodes('./email');
        $status   = $XMLnode->findnodes('./status');
        $voting   = int $XMLnode->findnodes('./stemmrecht');
        $date     = $XMLnode->findnodes('./datum');
        $paid     = int $XMLnode->findnodes('./bezuelt');
        $userbox  = int $XMLnode->findnodes('./kescht');
        $keyowner = int $XMLnode->findnodes('./badge');
        $comment  = $XMLnode->findnodes('./kommentar');
    }

  return "NO SUCH USER" unless $chaosid;

  $YAMLoutput =  YAML::Tiny->new( {
  ChaosID => "$chaosid",
  Names   => {
    'Forename' => "$forename",
    'Lastname' => "$lastname",
    'Username' => "$username"
  },
  Email  => "$email",
  Status => "$status",
  Voters => "$voting",
  More   => {
    'Address'    => "$address",
    'Birthday'   => "$birthday",
    'Storagebox' => "$userbox",
    'Payment'    => "$date",
    'Paid'       => "$paid",
    'Keyowner'   => "$keyowner",
    'Comment'    => "$comment"
  }  
  } );

  chomp ($YAMLbase64 = encode_base64 $YAMLoutput->write_string);
  return $YAMLbase64;

}


sub COUNTER {
  $sharedsecret = shift||"none";
  return "FUCK OFF" unless ($sharedsecret ~~ @sharedsecrets);

  $XMLparser = XML::LibXML->new();
  $XMLfile   = $XMLparser->parse_file('datebank');
  @members   = $XMLfile->findnodes('/memberdatebank/memberen/member');

  ($regularmember, $supportmember, $starvingmember, $votingrights) = 0;

    foreach $member (@members) {
        $memberstatus = $member->findnodes('./status');
        $votingright  = $member->findnodes('./stemmrecht');   
        $votingrights++     if int $votingright; 
        $regularmember++    if ($memberstatus  =~ /^Regular$/i);
        $studentmember++    if ($memberstatus  =~ /^Student$/i);
        $supportmember++    if ($memberstatus  =~ /^Supporter/i);
        $starvingmember++   if ($memberstatus  =~ /^Starving$/i);
    }  
    

  $membercounter = scalar @members;

  $YAMLoutput = YAML::Tiny->new( { Counter => $membercounter, Voters => $votingrights, Regular => $regularmember, Student => $studentmember, Supporter => $supportmember, Starving => $starvingmember } );
  chomp ($YAMLbase64 = encode_base64 $YAMLoutput->write_string);
  return $YAMLbase64;
}


sub VOTINGRIGHT {
  $sharedsecret = shift||"none";
  return "FUCK OFF" unless ($sharedsecret ~~ @sharedsecrets);

  $XMLparser = XML::LibXML->new();
  $XMLfile   = $XMLparser->parse_file('datebank');
  @members   = $XMLfile->findnodes('/memberdatebank/memberen/member');
  $votingrights = 0;
  
  $XMLquery  = "/memberdatebank/memberen/member[stemmrecht/text() = '1']";
    foreach $XMLnode ($XMLfile->findnodes($XMLquery)) {
      ($username, $email) = ( $XMLnode->findnodes('./nick') . '', $XMLnode->findnodes('./email') . '');  # Don't know why but I have to add "nothing" to the string to make YAML::Tiny work with XML::LibXML
      push @usernames, $username;
      $usercontacts{$username} = $email;
      $votingrights++;
    }
  

  $YAMLoutput = YAML::Tiny->new( { Voters => "$votingrights", Usernames => [@usernames], Contact => { %usercontacts } } );
  
  chomp ($YAMLbase64 = encode_base64 $YAMLoutput->write_string);
  undef @usernames;
  return $YAMLbase64;
}


$serv->run;