NAME
Plack::Middleware::RedirectSSL - force all requests to use in-/secure connections
SYNOPSIS
# in app.psgi
use Plack::Builder;
builder {
    enable 'RedirectSSL';
    $app;
};
DESCRIPTION
This middleware intercepts requests using either the http or https scheme and redirects them to the same URI under respective other scheme.
CONFIGURATION OPTIONS
ssl- 
Specifies the direction of redirects. If true, requests using
httpwill be redirected tohttps. If false, requests usinghttpswill be redirected to plainhttp.Defaults to true if not specified during construction.
 hsts_header- 
Specifies an arbitrary string value for the
Strict-Transport-Securityheader. If false, no such header will be sent. hsts_policy- 
Specifies a value to pass to
"render_sts_policy"and updates thehsts_headeroption with the returned value.enable 'RedirectSSL', hsts_policy => { include_subdomains => 1 };Defaults to an HSTS policy with default values, which is a
max-ageof 26 weeks and no other directives. hsts- 
Use of this option is discouraged.
Specifies a
max-agevalue for thehsts_policyoption, preserving all other existinghsts_policydirectives, if any. If undef, uses amax-ageof 26 weeks. If otherwise false, setshsts_policytoundef. (If you really want amax-agevalue of 0, use'00','0E0'or'0 but true'.) 
FUNCTIONS
render_sts_policy
Takes either a hash reference containing an HSTS policy or undef, and returns the corresponding Strict-Transport-Security header value.
my $policy = { include_subdomains => 1 };
printf "Strict-Transport-Security: %s\n", render_sts_policy $policy;
# Strict-Transport-Security: max-age=15724800; includeSubDomains
As a side effect, validates the policy and updates the hash with the ultimate value of every directive after computing defaults.
use Data::Dumper; local $Data::Dumper::Terse = 1;
print +Dumper $policy;
# {
#   'max_age' => 15724800,
#   'include_subdomains' => 1,
#   'preload' => ''
# }
The following directives are supported:
max_age- 
Integer value for the
max-agedirective.If missing or undefined, it will normally default to 26 weeks.
But if the
preloaddirective is true, it will default to 365 days and may not be set to any smaller value.If 0 (which unpublishes a previous HSTS policy), no other directives may be set.
 include_subdomains- 
Boolean; whether to include the
includeSubDomainsdirective.If missing or undefined, it will normally default to false.
But if the
preloaddirective is true, it will defaults to true and may not be set to false. preload- 
Boolean; whether to include the
preloaddirective. 
SEE ALSO
Plack::Middleware::ReverseProxy
If your PSGI application runs behind a reverse proxy that unwraps SSL connections then you will need to put this middleware in front of RedirectSSL.
- 
Specification of the
preloaddirective and submission form for inclusion into the Google Chrome preload list (also used by most other browsers) 
AUTHOR
Aristotle Pagaltzis <pagaltzis@gmx.de>
COPYRIGHT AND LICENSE
This software is copyright (c) 2018 by Aristotle Pagaltzis.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.