blob: 3963fecc23e9aa5b97a46a6cb984ffef32dde579 [file] [log] [blame]
Akron80027d12016-01-20 17:36:36 +01001package Kalamar::Plugin::KalamarUser;
2use Mojo::Base 'Mojolicious::Plugin';
Akron864c2932018-11-16 17:18:55 +01003use Mojo::Util qw/deprecated/;
Akron32396632018-10-11 17:08:37 +02004use Mojo::Promise;
Akron80027d12016-01-20 17:36:36 +01005use Mojo::ByteStream 'b';
Akron30e7bc72021-02-16 17:05:41 +01006use Kalamar::Request;
Akron80027d12016-01-20 17:36:36 +01007
8has 'api';
Akrondadacf12016-01-22 19:24:59 +01009has 'ua';
Akron80027d12016-01-20 17:36:36 +010010
11sub register {
12 my ($plugin, $mojo, $param) = @_;
13
Akron30e7bc72021-02-16 17:05:41 +010014
Akron80027d12016-01-20 17:36:36 +010015 # Load parameter from config file
16 if (my $config_param = $mojo->config('Kalamar')) {
17 $param = { %$param, %$config_param };
18 };
19
20 # Set API!
21 $plugin->api($param->{api}) or return;
Akronc95c9e72017-03-30 21:53:51 +020022 $plugin->ua(Mojo::UserAgent->new(
Akrona3c353c2019-02-14 23:50:00 +010023 connect_timeout => 90,
Akronacef8dc2018-08-29 18:16:08 +020024 inactivity_timeout => 120,
25 max_redirects => 3
Akronc95c9e72017-03-30 21:53:51 +020026 ));
Akron80027d12016-01-20 17:36:36 +010027
Akronbe9d5b32017-04-05 20:48:24 +020028 # Set app to server
29 $plugin->ua->server->app($mojo);
30
Akron30e7bc72021-02-16 17:05:41 +010031
Akron8bbbecf2019-07-01 18:57:30 +020032 # Get a user agent object for Kalamar
33 $mojo->helper(
34 'kalamar_ua' => sub {
35 return $plugin->ua;
36 }
37 );
38
Akron30e7bc72021-02-16 17:05:41 +010039
Akron864c2932018-11-16 17:18:55 +010040 # Get user handle
41 $mojo->helper(
42 'user_handle' => sub {
43 my $c = shift;
44
45 # Get from stash
46 my $user = $c->stash('user');
47 return $user if $user;
48
49 # Get from session
50 $user = $c->session('user');
51
52 # Set in stash
53 if ($user) {
54 $c->stash(user => $user);
55 return $user;
56 };
57
58 return 'not_logged_in';
59 }
60 );
61
Akron30e7bc72021-02-16 17:05:41 +010062
Akron864c2932018-11-16 17:18:55 +010063 # This is a new general korap_request helper,
64 # that can trigger some hooks for, e.g., authentication
65 # or analysis. It returns a promise.
66 $mojo->helper(
67 'korap_request' => sub {
68 my $c = shift;
69 my $method = shift;
70 my $path = shift;
71
72 # Get plugin user agent
73 my $ua = $plugin->ua;
74
75 my $url = Mojo::URL->new($path);
76 my $tx = $ua->build_tx(uc($method), $url, @_);
77
78 # Set X-Forwarded for
79 $tx->req->headers->header(
80 'X-Forwarded-For' => $c->client_ip
81 );
82
Akron864c2932018-11-16 17:18:55 +010083 # Emit Hook to alter request
84 $c->app->plugins->emit_hook(
85 before_korap_request => ($c, $tx)
86 );
87
88 return $ua->start_p($tx);
89 }
90 );
Akron30e7bc72021-02-16 17:05:41 +010091
92
93 # Return KorAP-Request object helper
94 $mojo->helper(
95 'kalamar.request' => sub {
96 return Kalamar::Request->new(
97 controller => shift,
98 method => shift,
99 url => shift,
100 ua => $plugin->ua
101 )->param(@_);
102 }
103 );
Akron80027d12016-01-20 17:36:36 +0100104};
105
Akron30e7bc72021-02-16 17:05:41 +0100106
Akron80027d12016-01-20 17:36:36 +01001071;
108
109
110__END__
Akrondadacf12016-01-22 19:24:59 +0100111