Catalyst::Plugin::Authentication::Credential::JugemKey - JugemKey authentication plugin for Catalyst


Catalyst-Plugin-Authentication-Credential-JugemKey documentation Contained in the Catalyst-Plugin-Authentication-Credential-JugemKey distribution.

Index


Code Index:

NAME

Top

Catalyst::Plugin::Authentication::Credential::JugemKey - JugemKey authentication plugin for Catalyst

VERSION

Top

Version 0.04

SYNOPSIS

Top

  # load plugin and setup
  use Catalyst qw(
      Authentication
      Authentication::Credential::JugemKey
      Session
      Session::Store::FastMmap
      Session::State::Cookie
  );

  __PACKAGE__->config->{authentication}->{jugemkey} = {
      api_key => 'your api_key',
      secret  => 'your shared secret',
      perms   => 'permission',
  };

  # in controller
  # redirect login url
  sub login : Path('/jugemkey/login') {
      my ( $self, $c ) = @_;
      $c->res->redirect(
          $c->authenticate_jugemkey_url({
              callback_url => 'http://your_callback_url/jugemkey/auth',
              param1       => 'value1',
              param2       => 'value2',
          })
      );
  }

  # callback url
  sub auth : Path('/jugemkey/auth') {
      my ( $self, $c ) = @_;

      if ( my $user = $c->authenticate_jugemkey_get_token ) {
          # login successful
          $c->session->{name}  = $user->name;
          $c->session->{token} = $user->token;
          $c->res->redirect( $c->uri_for('/') );
      }
      else {
          # something wrong
      }
  }

METHODS

Top

authenticate_jugemkey_url

Creates login url.

authenticate_jugemkey_get_token

Exchange frob for token and JugemKey user name.

INTERNAL METHODS

Top

setup

SEE ALSO

Top

WebService::JugemKey::Auth, http://jugemkey.jp/api/auth/

AUTHOR

Top

Gosuke Miyashita, <gosukenator at gmail.com>

BUGS

Top

Please report any bugs or feature requests to bug-catalyst-plugin-authentication-credential-jugemkey at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Catalyst-Plugin-Authentication-Credential-JugemKey. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Catalyst::Plugin::Authentication::Credential::JugemKey

You can also look for information at:

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Catalyst-Plugin-Authentication-Credential-JugemKey

* CPAN Ratings

http://cpanratings.perl.org/d/Catalyst-Plugin-Authentication-Credential-JugemKey

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Catalyst-Plugin-Authentication-Credential-JugemKey

* Search CPAN

http://search.cpan.org/dist/Catalyst-Plugin-Authentication-Credential-JugemKey

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


Catalyst-Plugin-Authentication-Credential-JugemKey documentation Contained in the Catalyst-Plugin-Authentication-Credential-JugemKey distribution.
package Catalyst::Plugin::Authentication::Credential::JugemKey;

use warnings;
use strict;

our $VERSION = '0.04';

use WebService::JugemKey::Auth;
use UNIVERSAL::require;
use NEXT;

sub setup {
    my $c = shift;

    my $config = $c->config->{authentication}->{jugemkey} ||= {};

    $config->{jugemkey_object} ||= do {
        ( $config->{user_class}
              ||= 'Catalyst::Plugin::Authentication::User::Hash' )->require;

        my $api = WebService::JugemKey::Auth->new({
            api_key => $config->{api_key},
            secret  => $config->{secret},
        });
        $api->perms( $config->{perms} );
        $api;
    };

    $c->NEXT::setup(@_);
}

sub authenticate_jugemkey_url {
    my ($c, $params) = @_;
    $c->config->{authentication}->{jugemkey}->{jugemkey_object}->uri_to_login($params);
}

sub authenticate_jugemkey_get_token {
    my $c = shift;

    my $config = $c->config->{authentication}->{jugemkey};
    my $jugemkey = $config->{jugemkey_object};

    my $frob = $c->req->params->{frob} or return;
    if ( my $user = $jugemkey->get_token($frob) ) {
        $c->log->debug("Successfully get token of user '$user->name'.")
            if $c->debug;

        my $store = $config->{store} || $c->default_auth_store;
        if ( $store
            and my $store_user = $store->get_user( $user->name, $user ) )
        {
            $c->set_authenticated($store_user);
        }
        else {
            $user = $config->{user_class}->new($user);
            $c->set_authenticated($user);
        }

        return $user;
    }
    else {
        $c->log->debug(
            sprintf "Failed to authenticate jugemkey.  Reason: '%s'",
            $jugemkey->errstr, )
            if $c->debug;

        return;
    }
}


1; # End of Catalyst::Plugin::Authentication::Credential::JugemKey