NAME
Net::OATH::Server::Lite - Library for One Time Password Server
DESCRIPTION
For internal use, "Lite" module provides functions of user authentication and Create/Read/Update/Delete APIs on HTTP. As a PSGI Application, you are able to implement two endpoints easily.
User's CRUD : Net::OATH::Server::Lite::Endpoint::User Authentication : Net::OATH::Server::Lite::Endpoint::Login
DataHandler
To use these endpoints, you must inherit Net::OATH::Server::Lite::DataHandler and implement the methods according to the interface contract.
package YourDataHandler;
use strict;
use warnings;
use parent 'Net::OATH::Server::Lite::DataHandler';
# defined method
sub create_id {
my $class = shift;
# ...
}
sub create_secret {
my $class = shift;
# ...
}
sub insert_user {
my ($self, $user) = @_;
# ...
}
# ...
Example psgi file
use strict;
use utf8;
use lib 'lib';
use Plack::Builder;
use Net::OATH::Server::Lite::Endpoint::Login;
use Net::OATH::Server::Lite::Endpoint::User;
use YourDataHandler;
# login endpoint
my $login_endpoint = Net::OATH::Server::Lite::Endpoint::Login->new(
data_handler => q{YourDataHandler},
);
# user endpoint
my $user_endpoint = Net::OATH::Server::Lite::Endpoint::User->new(
data_handler => q{YourDataHandler},
);
builder {
mount "/login" => $login_endpoint;
mount "/user" => $user_endpoint;
};
Request and Response
# Create user
## request
POST /user HTTP/1.1
Host: localhost
Content-Type: application/json
{
"method":"create"
}
## response
HTTP/1.1 201 Created
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"id":"81c8feb9b54f632823fafea71966b5f89ad5cc92",
"secret":"wtfb32iamxqbewsmg7vg3ifdtcr3ky3t",
"type":"totp",
"algorithm":"SHA1",
"digits":6,
"counter":0,
"period":30
}
# Read user
## request
POST /user HTTP/1.1
Host: localhost
Content-Type: application/json
{
"method":"read",
"id":"81c8feb9b54f632823fafea71966b5f89ad5cc92"
}
## response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"id":"81c8feb9b54f632823fafea71966b5f89ad5cc92",
"secret":"wtfb32iamxqbewsmg7vg3ifdtcr3ky3t",
"type":"totp",
"algorithm":"SHA1",
"digits":6,
"counter":0,
"period":30
}
# Update User
## request
POST /user HTTP/1.1
Host: localhost
Content-Type: application/json
{
"method":"update",
"id":"81c8feb9b54f632823fafea71966b5f89ad5cc92",
"type":"hotp"
}
## response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"id":"81c8feb9b54f632823fafea71966b5f89ad5cc92",
"secret":"wtfb32iamxqbewsmg7vg3ifdtcr3ky3t",
"type":"hotp",
"algorithm":"SHA1",
"digits":6,
"counter":0,
"period":30
}
# Delete User
## request
POST /user HTTP/1.1
Host: localhost
Content-Type: application/json
{
"method":"delete",
"id":"81c8feb9b54f632823fafea71966b5f89ad5cc92"
}
## response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{}
# Authentication
## request
POST /login HTTP/1.1
Host: localhost
Content-Type: application/json
{
"id":"81c8feb9b54f632823fafea71966b5f89ad5cc92",
"password":"000000"
}
## response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{"id":"81c8feb9b54f632823fafea71966b5f89ad5cc92"}
LICENSE
Copyright (C) ritou.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
ritou <ritou.06@gmail.com>