PHP Code:
#!/usr/bin/perl
#moodle email script
#dedicated to all junior IT techs who get all the shitty jobs
#this script dedicated my senior tech, BRUVA!
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;
use Getopt::Long;
use Crypt::SSLeay;
my %options;
#define your options here
%options = ( 'vle' => 'vle.broughton.lancsngfl.ac.uk',
'emaildomain' => '@bbec.lancs.sch.uk',
);
GetOptions(\%options, 'user=s',
'pass=s',
'url=s',
'newuser=s',
'newpass=s',
'createuser',
);
#create useragent object
my $ua = LWP::UserAgent->new( cookie_jar => ({}) );
$ua->env_proxy();
my $return = $ua->request(POST "http://login.vle.cleo.net.uk/1.8.2/?vle=$options{vle}",
[ username => $options{user},
password => $options{pass},
testcookies => 0,
submit => 'Login',
],
);
my ($token) = $return->content =~ /token=([0-9a-f]+)\'/;
push @{ $ua->requests_redirectable }, 'POST';
$return = $ua->request(GET "http://login.vle.cleo.net.uk/content.php?"
."url=http://$options{vle}/login/secure_login.php?token=$token");
#check if login succeeded
$return = $ua->request(GET "http://$options{vle}");
die "Login failed" unless $return->content =~ /User Admin/;
my ($sesskey) = $return->content =~ /sesskey=(\S+)\"/;
#edituser($options{newuser}, $options{newpass}, $sesskey) if $options{createuser};
my @uids = grabbyquery($sesskey, 'cleo');
for my $userid (@uids) {
print $userid . "\n";
}
sub edituser {
my ($username, $password, $sesskey) = @_;
my ($lastname, $firstname) = $username =~ /([0-9a-z]+)([a-z])$/;
my $uid = finduid($username) || '-1';
my $return = $ua->request(POST 'http://$options{vle}/user/editadvanced.php',
Content_Type => 'form-data',
Content => [
username => $username,
newpassword => $password,
preference_auth_forcepasswordchange => 1,
firstname => $firstname,
lastname => $lastname,
email => $username . $options{email},
city => 'Preston',
country => 'GB',
MAX_FILE_SIZE => 31457280,
id => $uid,
course => 1,
mform_showadvanced_last => 0,
sesskey => $sesskey,
_qf__user_editadvanced_form => 1,
auth => 'manual',
maildisplay => 2,
emailstop => 0,
mailformat => 1,
preference_mailcharset => 0,
maildigest => 0,
autosubscribe => 1,
trackforums => 0,
htmleditor => 1,
ajax => 0,
screenreader => 0,
lang => 'en_utf8',
],
);
}
sub finduid {
my $username = shift;
my $return = $ua->request(GET "http://$options{vle}/admin/user.php?search=$username");
my ($uid) = $return->content =~ /\.\.\/user\/view.php\?id=([0-9]+)/;
return $uid;
}
sub deluser {
my ($username, $sesskey) = @_;
my $uid = finduid($username);
my $return = $ua->request(GET "http://$options{vle}/admin/user.php?delete=$uid&sesskey=$sesskey");
my ($verify) = $return->content =~ /confirm" value="([a-z0-9]+)"/;
print "$verify\n";
$return = $ua->request(POST 'http://$options{vle}/admin/user.php',
Content => [
delete => $uid,
confirm => $verify,
sesskey => $sesskey,
],
);
}
sub grabbyquery {
my ($sesskey, $search) = @_;
my $return = $ua->request(GET "http://$options{vle}/admin/user.php?sort=firstname&
dir=ASC&perpage=30&firstinitial=&lastinitial=&$search=cleo&page=0");
my $hits = $return->content =~ />([0-9]+) \//;
$return = $ua->request(GET "http://$options{vle}/admin/user.php?sort=firstname&
dir=ASC&perpage=$hits&firstinitial=&lastinitial=&search=$search&page=0");
my @uids = $return->content =~ /\.\.\/user\/view.php\?id=([0-9]+)/g;
return @uids;
}
Just another quickie, I wrote this one this yesterday. Its just a simple moodle framework that can do password resets, delete users.