[#279] Web sessions use cookies instead of files on disk (M. Johnson)
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
* systemd deployment guide
|
* systemd deployment guide
|
||||||
* document env var for https reverse proxy (B. Marshall)
|
* document env var for https reverse proxy (B. Marshall)
|
||||||
* FreeBSD sshcollector support (H. Teulahti)
|
* FreeBSD sshcollector support (H. Teulahti)
|
||||||
|
* [#279] Web sessions use cookies instead of files on disk (M. Johnson)
|
||||||
|
|
||||||
[BUG FIXES]
|
[BUG FIXES]
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ requires 'Dancer' => '1.3132';
|
|||||||
requires 'Dancer::Plugin::DBIC' => 0.2001;
|
requires 'Dancer::Plugin::DBIC' => 0.2001;
|
||||||
requires 'Dancer::Plugin::Auth::Extensible' => 0.30;
|
requires 'Dancer::Plugin::Auth::Extensible' => 0.30;
|
||||||
requires 'Dancer::Plugin::Passphrase' => '2.0.1';
|
requires 'Dancer::Plugin::Passphrase' => '2.0.1';
|
||||||
|
requires 'Dancer::Session::Cookie' => '0.27';
|
||||||
requires 'File::ShareDir' => 1.03;
|
requires 'File::ShareDir' => 1.03;
|
||||||
requires 'File::Slurp' => 9999.19;
|
requires 'File::Slurp' => 9999.19;
|
||||||
requires 'Guard' => 1.022;
|
requires 'Guard' => 1.022;
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ sub _make_password {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# set up initial admin user
|
||||||
my $users = schema('netdisco')->resultset('User');
|
my $users = schema('netdisco')->resultset('User');
|
||||||
if ($users->search({-bool => 'admin'})->count == 0) {
|
if ($users->search({-bool => 'admin'})->count == 0) {
|
||||||
say '';
|
say '';
|
||||||
@@ -149,6 +150,12 @@ if ($users->search({-bool => 'admin'})->count == 0) {
|
|||||||
print color 'reset';
|
print color 'reset';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# set initial dancer web session cookie key
|
||||||
|
schema('netdisco')->resultset('Session')->find_or_create(
|
||||||
|
{id => 'dancer_session_cookie_key', a_session => \'md5(random()::text)'},
|
||||||
|
{key => 'primary'},
|
||||||
|
);
|
||||||
|
|
||||||
say '';
|
say '';
|
||||||
$bool = $term->ask_yn(
|
$bool = $term->ask_yn(
|
||||||
prompt => 'Download and update vendor MAC prefixes (OUI data)?', default => 'n',
|
prompt => 'Download and update vendor MAC prefixes (OUI data)?', default => 'n',
|
||||||
|
|||||||
@@ -70,6 +70,10 @@ foreach my $file ($pid_file, $log_file) {
|
|||||||
chown $uid, $gid, $file;
|
chown $uid, $gid, $file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# clean old web sessions
|
||||||
|
my $sdir = dir($home, 'netdisco-web-sessions')->stringify;
|
||||||
|
unlink glob file($sdir, '*');
|
||||||
|
|
||||||
Daemon::Control->new({
|
Daemon::Control->new({
|
||||||
name => 'Netdisco Web',
|
name => 'Netdisco Web',
|
||||||
program => \&restarter,
|
program => \&restarter,
|
||||||
|
|||||||
@@ -27,9 +27,6 @@ use App::Netdisco;
|
|||||||
use Dancer;
|
use Dancer;
|
||||||
warning sprintf "App::Netdisco %s web", ($App::Netdisco::VERSION || 'HEAD');
|
warning sprintf "App::Netdisco %s web", ($App::Netdisco::VERSION || 'HEAD');
|
||||||
|
|
||||||
my $home = ($ENV{NETDISCO_HOME} || $ENV{HOME});
|
|
||||||
set(session_dir => dir($home, 'netdisco-web-sessions')->stringify);
|
|
||||||
|
|
||||||
set plack_middlewares => [
|
set plack_middlewares => [
|
||||||
['Plack::Middleware::ReverseProxy'],
|
['Plack::Middleware::ReverseProxy'],
|
||||||
[ Expires => (
|
[ Expires => (
|
||||||
|
|||||||
@@ -1217,10 +1217,10 @@ you're doing.
|
|||||||
|
|
||||||
=head3 C<session>
|
=head3 C<session>
|
||||||
|
|
||||||
Value: String. Default: C<YAML>.
|
Value: String. Default: C<cookie>.
|
||||||
|
|
||||||
How to handle web sessions. Default is to store on disk so they can be shared
|
How to handle web sessions. Default is to store in an encrypted cookie
|
||||||
between multiple web server processes (although it's slower).
|
using a key stored in the database by C<netdisco-deploy>.
|
||||||
|
|
||||||
=head3 C<template>
|
=head3 C<template>
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,13 @@ if (setting('extra_web_plugins') and ref [] eq ref setting('extra_web_plugins'))
|
|||||||
push @{ config->{engines}->{netdisco_template_toolkit}->{INCLUDE_PATH} },
|
push @{ config->{engines}->{netdisco_template_toolkit}->{INCLUDE_PATH} },
|
||||||
setting('views');
|
setting('views');
|
||||||
|
|
||||||
|
# load cookie key from database
|
||||||
|
setting('session_cookie_key' => undef);
|
||||||
|
my $sessions = schema('netdisco')->resultset('Session');
|
||||||
|
my $skey = $sessions->find({id => 'dancer_session_cookie_key'});
|
||||||
|
setting('session_cookie_key' => $skey->get_column('a_session')) if $skey;
|
||||||
|
Dancer::Session::Cookie::init(session);
|
||||||
|
|
||||||
# workaround for https://github.com/PerlDancer/Dancer/issues/935
|
# workaround for https://github.com/PerlDancer/Dancer/issues/935
|
||||||
hook after_error_render => sub { setting('layout' => 'main') };
|
hook after_error_render => sub { setting('layout' => 'main') };
|
||||||
|
|
||||||
|
|||||||
@@ -308,7 +308,8 @@ plugins:
|
|||||||
users:
|
users:
|
||||||
provider: 'App::Netdisco::Web::Auth::Provider::DBIC'
|
provider: 'App::Netdisco::Web::Auth::Provider::DBIC'
|
||||||
schema_name: 'netdisco'
|
schema_name: 'netdisco'
|
||||||
session: 'YAML'
|
session: 'cookie'
|
||||||
|
session_cookie_key: 'this_will_be_overridden_on_webapp_startup'
|
||||||
template: 'netdisco_template_toolkit'
|
template: 'netdisco_template_toolkit'
|
||||||
route_cache: true
|
route_cache: true
|
||||||
appname: 'Netdisco'
|
appname: 'Netdisco'
|
||||||
|
|||||||
Reference in New Issue
Block a user