#!/usr/bin/env perl

# uses #########################################################################
use diagnostics;
use warnings;
use strict;
# Modules
# database
use DBI;
# http
use LWP::UserAgent;
use HTTP::Cookies;

# subs #########################################################################
# extract cookie from SQLite db
sub extract_cookie
{
    # shift db_path
    my $db_path = shift;

    # variables usefull for database connection and handler
    my $dbh;
    my $sth;
    my $rv;
    my @row;

    # string containing the query
    my $query;

    # connect to the db
    $dbh = DBI->connect("dbi:SQLite:dbname=$db_path","","") or die $DBI::errstr;

    # prepare the query
    $query = "SELECT name, value FROM moz_cookies WHERE host LIKE\
    '%newbiecontest.org%' AND name LIKE '%SMFCookie%'";
    $sth = $dbh->prepare($query);

    # execute
    $rv = $sth->execute() or die $DBI::errstr;

    # fetch the only row found
    @row = $sth->fetchrow_array();

    # close the database
    $sth->finish();
    $dbh->disconnect();

    return $row[0], $row[1];

}

# Send http request
sub send_request
{

    # shift args
    my ($cookie_name, $cookie_val, $url) = @_;

    # create variables
    my $ua = LWP::UserAgent->new;
    my $cookies = HTTP::Cookies->new();

    # create the cookie
    $cookies->set_cookie(0, $cookie_name, $cookie_val, '/', 'newbiecontest.org', 80, 0, 0,\
        0, 0);

    # add the cookie to the jar
    $ua->cookie_jar($cookies);

    # send request
    my $response = $ua->get($url);

    return $response->decoded_content;

}

# solve equation
sub solve_equation
{
    # shift equation
    my $equation = shift;

    my $result;

    # funny time
    print("\t Regex time boy !\n");

    print("\t\t " . $equation . "\n");

    # regex
    $equation =~ m/racine\((\d+)\)\*(\d+)²\+(\d+)/;

    print("\t\t a = " . $1 . " b = " . $2 . " c = " . $3 . "\n");

    print("\t Regex time is done ! Well done\n");

    return int(sqrt($1) * ($2 * $2) + $3);

}

# send answer
sub send_answer
{
    my ($cookie_name, $cookie_val, $url, $result) = @_;

    # create variables
    my $ua = LWP::UserAgent->new;
    my $cookies = HTTP::Cookies->new();

    # modify the url
    $url = $url . "?solution=" . $result;

    # create the cookie
    $cookies->set_cookie(0, $cookie_name, $cookie_val, '/', 'newbiecontest.org', 80, 0, 0,\
        0, 0);

    # add the cookie to the jar
    $ua->cookie_jar($cookies);

    # send request
    my $response = $ua->get($url);

    print $response->decoded_content;
}

# main #########################################################################
# check argument number
if (@ARGV != 3) {

    print("Get. The. Fuck. Out\n");
    print("[i] Usage : ./equation.pl cookie.db url_in url_out\n");

    exit;
}

my $cookie_name;
my $cookie_val;
my $equation;
my $result;

($cookie_name, $cookie_val) = extract_cookie($ARGV[0]);

$equation = send_request($cookie_name, $cookie_val, $ARGV[1]);

$result = solve_equation($equation);

send_answer($cookie_name, $cookie_val, $ARGV[2], $result);

print("Done.\n");