blob: ebe68d94a43041647e935e93f100859e0b5f6eb1 [file] [log] [blame]
package Kalamar::Request;
use Mojo::Base -base;
use Mojo::Promise;
has [qw!controller ua!];
has url => sub {
my $self = shift;
if (@_) {
$self->{url} = Mojo::URL->new(shift);
return $self;
};
return $self->{url};
};
has method => sub {
my $self = shift;
if (@_) {
$self->{method} = uc(shift);
return $self;
};
return $self->{method} // 'GET';
};
# Get or set parameters for the transaction
sub param {
my $self = shift;
if (scalar(@_) > 0) {
if (defined $_[0]) {
$self->{param} = [@_];
}
else {
$self->{param} = undef;
}
return $self;
};
return $self->{param} // [];
};
# Start transaction and return a promise
sub start {
my $self = shift;
# TODO: Better return a rejected promise
unless ($self->url) {
return Mojo::Promise->reject('No URL defined');
};
unless ($self->controller) {
return Mojo::Promise->reject('No controller defined');
};
unless ($self->ua) {
return Mojo::Promise->reject('No useragent defined');
};
my @param = ($self->method, $self->url);
push @param, @{$self->param} if scalar(@{$self->param}) > 0;
my $tx = $self->ua->build_tx(@param);
my $c = $self->controller;
# Set X-Forwarded for
if ($c->app->renderer->helpers->{'client_ip'}) {
$tx->req->headers->header(
'X-Forwarded-For' => $c->client_ip
);
};
# Emit Hook to alter request
$c->app->plugins->emit_hook(
before_korap_request => ($c, $tx)
);
# Return promise
return $self->ua->start_p($tx);
};
1;