NAME
App::MFILE::WWW::Resource - HTTP request/response cycle
SYNOPSIS
In PSGI file:
use Web::Machine;
Web::Machine->new(
resource => 'App::MFILE::WWW::Resource',
)->to_app;
DESCRIPTION
This is where we override the default versions of various methods defined by Web::Machine::Resource.
METHODS
context
This method is where we store data that needs to be shared among routines in this module.
remote_addr
session
session_id
service_available
This is the first method called on every incoming request.
content_types_provided
For GET requests, this is where we add our HTML body to the HTTP response.
charsets_provided
This method causes Web::Machine to encode the response body in UTF-8.
default_charset
Really use UTF-8 all the time.
allowed_methods
Determines which HTTP methods we recognize.
uri_too_long
Is the URI too long?
is_authorized
Since all requests go through this function at a fairly early stage, we leverage it to validate the session.
_is_fresh
Takes a single argument, the PSGI session, which is assumed to contain a last_seen
attribute containing the number of seconds since epoch when the session was last seen.
known_content_type
Looks at the 'Content-Type' header of POST requests, and generates a "415 Unsupported Media Type" response if it is anything other than 'application/json'.
malformed_request
This test examines the request body. It can either be empty or contain valid JSON; otherwise, a '400 Malformed Request' response is returned. If it contains valid JSON, it is converted into a Perl hashref and stored in the 'request_body' attribute of the context.
main_html
Takes the session object and returns HTML string to be displayed in the user's browser.
FIXME: might be worth spinning this off into a separate module.
test_html
Generate html for running (core and app) unit tests. The following JS files are run (in this order):
login_status
Once the username and password are known (either from process_post
via the login AJAX request generated by the login dialog, or from the site configuration via the MFILE_WWW_BYPASS_LOGIN_DIALOG mechanism), the validate_user_credentials
method is called. That method is implemented by the derived application, so it can validate user credentials however it likes. The validate_user_credentials
method is then expected to call this method - login_status
- to generate a status object from the results of the user credentials validation.
Now, App::MFILE::WWW
does expect the validate_user_credentials
method to provide the results of user credentials validation in a peculiar format, hinging on the argument $code
, where a value of 200 indicates successful validation and any other value indicates a failure.
ua
Returns the LWP::UserAgent object obtained from the lookup table. Creates it first if necessary.
rest_req
Algorithm: send request to REST server, get JSON response, decode it, return it.
Takes a single _mandatory_ parameter: a LWP::UserAgent object
Optionally takes PARAMHASH:
server => [URI OF REST SERVER] default is 'http://0:5000'
method => [HTTP METHOD TO USE] default is 'GET'
nick => [NICK FOR BASIC AUTH] optional
password => [PASSWORD FOR BASIC AUTH] optional
path => [PATH OF REST RESOURCE] default is '/'
req_body => [HASHREF] optional
Returns HASHREF containing:
hr => HTTP::Response object (stripped of the body)
body => [BODY OF HTTP RESPONSE, IF ANY]