NAME
WWW::Suffit::Plugin::ConfigAuth - The Suffit plugin for authentication and authorization providing via configuration
SYNOPSIS
sub startup {
my $self = shift->SUPER::startup();
$self->plugin('ConfigAuth', {
configsection => 'auth',
});
# . . .
}
... configuration:
# ConfigAuth configuration
<Auth>
User test:5f4dcc3b5aa765d61d8327deb882cf99:role=Regular%20user
User admin:5f4dcc3b5aa765d61d8327deb882cf99
User foo:bar:status=1&uid=2&name=user
</Auth>
DESCRIPTION
The Suffit plugin for authentication and authorization providing via configuration
OPTIONS
This plugin supports the following options
configsection
configsection => 'auth'
This option sets a section name of the config file for define namespace of configuration directives for this plugin
Default: none (without section)
HELPERS
This plugin provides the following helpers
configauth.init
my $init = $self->configauth->init;
This method returns the init object (Mojo::JSON::Pointer) that contains data of initialization:
{
error => '...', # Error message
status => 500, # HTTP status code
code => 'E7000', # The Suffit error code
}
For example (in your controller):
# Check init status
my $init = $self->configauth->init;
if (my $err = $init->get('/error')) {
$self->reply->error($init->get('/status'),
$init->get('/code'), $err);
return;
}
configauth.authenticate
my $auth = $self->configauth->authenticate({
username => $username,
password => $password,
loginpage => 'login', # -- To login-page!!
expiration => $remember ? SESSION_EXPIRE_MAX : SESSION_EXPIRATION,
realm => "Test zone",
});
if (my $err = $auth->get('/error')) {
if (my $location = $auth->get('/location')) { # Redirect
$self->flash(message => $err);
$self->redirect_to($location); # 'login' -- To login-page!!
} elsif ($auth->get('/status') >= 500) { # Fatal server errors
$self->reply->error($auth->get('/status'), $auth->get('/code'), $err);
} else { # User errors (show on login page)
$self->stash(error => $err);
return $self->render;
}
return;
}
This helper performs authentication backend subprocess and returns result object (Mojo::JSON::Pointer) that contains data structure:
{
error => '', # Error message
status => 200, # HTTP status code
code => 'E0000', # The Suffit error code
username => $username, # User name
referer => $referer, # Referer
loginpage => $loginpage, # Login page for redirects (location)
location => undef, # Location URL for redirects
}
configauth.authorize
my $auth = $self->configauth->authorize({
referer => $referer,
username => $username,
loginpage => 'login', # -- To login-page!!
});
if (my $err = $auth->get('/error')) {
if (my $location = $auth->get('/location')) {
$self->flash(message => $err);
$self->redirect_to($location); # 'login' -- To login-page!!
} else {
$self->reply->error($auth->get('/status'), $auth->get('/code'), $err);
}
return;
}
This helper performs authorization backend subprocess and returns result object (Mojo::JSON::Pointer) that contains data structure:
{
error => '', # Error message
status => 200, # HTTP status code
code => 'E0000', # The Suffit error code
username => $username, # User name
referer => $referer, # Referer
loginpage => $loginpage, # Login page for redirects (location)
location => undef, # Location URL for redirects
user => { # User data
address => "127.0.0.1", # User (client) IP address
base => "http://localhost:8080", # Base URL of request
comment => "No comments", # Comment
email => 'test@example.com', # Email address
email_md5 => "a84450...366", # MD5 hash of email address
method => "ANY", # Current method of request
name => "Bob Smith", # Full user name
path => "/", # Current query-path of request
role => "Regular user", # User role
status => true, # User status in JSON::PP::Boolean notation
uid => 1, # User ID
username => $username, # User name
},
}
METHODS
Internal methods
register
This method register the plugin and helpers in Mojolicious application
SEE ALSO
Mojolicious, WWW::Suffit::Server
AUTHOR
Serż Minus (Sergey Lepenkov) https://www.serzik.com <abalama@cpan.org>
COPYRIGHT
Copyright (C) 1998-2024 D&D Corporation. All Rights Reserved
LICENSE
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See LICENSE
file and https://dev.perl.org/licenses/