|
Revision 13221, 1.2 kB
(checked in by hidek, 5 years ago)
|
|
initial import
|
| Line | |
|---|
| 1 | package Catalyst::Controller::RequestToken::Action::CreateToken; |
|---|
| 2 | |
|---|
| 3 | use strict; |
|---|
| 4 | use warnings; |
|---|
| 5 | |
|---|
| 6 | use base qw(Catalyst::Action); |
|---|
| 7 | |
|---|
| 8 | use Catalyst::Exception; |
|---|
| 9 | use Digest(); |
|---|
| 10 | |
|---|
| 11 | sub execute { |
|---|
| 12 | my $self = shift; |
|---|
| 13 | my ( $controller, $c, @args ) = @_; |
|---|
| 14 | |
|---|
| 15 | $c->log->debug("create token") if $c->debug; |
|---|
| 16 | my $digest = _find_digest(); |
|---|
| 17 | my $seed = join( time, rand(10000), $$, {} ); |
|---|
| 18 | $digest->add($seed); |
|---|
| 19 | my $token = $digest->hexdigest; |
|---|
| 20 | $c->log->debug("token is created: $token") if $c->debug; |
|---|
| 21 | |
|---|
| 22 | my $conf = $controller->config; |
|---|
| 23 | $c->session->{ $conf->{session_name} } = $token; |
|---|
| 24 | $c->request->params->{ $conf->{request_name} } = $token; |
|---|
| 25 | |
|---|
| 26 | return $self->NEXT::execute(@_); |
|---|
| 27 | } |
|---|
| 28 | |
|---|
| 29 | # following code is from Catalyst::Plugin::Session |
|---|
| 30 | my $usable; |
|---|
| 31 | |
|---|
| 32 | sub _find_digest () { |
|---|
| 33 | unless ($usable) { |
|---|
| 34 | foreach my $alg (qw/SHA-256 SHA-1 MD5/) { |
|---|
| 35 | if ( eval { Digest->new($alg) } ) { |
|---|
| 36 | $usable = $alg; |
|---|
| 37 | last; |
|---|
| 38 | } |
|---|
| 39 | } |
|---|
| 40 | Catalyst::Exception->throw( |
|---|
| 41 | "Could not find a suitable Digest module. Please install " |
|---|
| 42 | . "Digest::SHA1, Digest::SHA, or Digest::MD5" ) |
|---|
| 43 | unless $usable; |
|---|
| 44 | } |
|---|
| 45 | |
|---|
| 46 | return Digest->new($usable); |
|---|
| 47 | } |
|---|
| 48 | |
|---|
| 49 | 1; |
|---|
| 50 | |
|---|