Mercurial > pub > Impl
view Lib/Engine/Security/IPSession.pm @ 168:6148f89bb7bf
IMPL::SQL::Schema::Traits::Diff alfa version
IMPL::lang added hash traits
author | sourcer |
---|---|
date | Mon, 16 May 2011 04:30:38 +0400 |
parents | 16ada169ca75 |
children |
line wrap: on
line source
package Engine::Security::IPSession; use strict; use Digest::MD5 qw(md5_hex); our %IPMap; # { IP_ADDR => {user => 'name', ClientSecData => 'ClientData', InitSecData => 'ServerData'} } sub ReadSecData { return $IPMap{$ENV{REMOTE_ADDR} || ''} ? $IPMap{$ENV{REMOTE_ADDR} || ''}->{ClientSecData} : undef; # avoid from create hash item } sub WriteSecData { my ($class,$data) = @_; # does nothing } sub ReadSSID { my ($class,$authEngineObj) = @_; my $ip = $ENV{REMOTE_ADDR}; return undef if not $IPMap{$ip || ''}; my $SSID = md5_hex($ip); if (not my $session = $authEngineObj->AuthMod->DS->LoadSession($SSID)) { my $User = $authEngineObj->AuthMod->DS->FindUser($IPMap{$ip}->{user}) or warn "can't authenticate the $ip: user not found" and return undef; $authEngineObj->AuthMod->DS->CreateSession($SSID,$User,$authEngineObj->AuthMod->SecPackage->NewAuthData($IPMap{$ip}->{InitSecData})); } elsif ($session->User->Name ne $IPMap{$ip}->{user}) { # update user my $User = $authEngineObj->AuthMod->DS->FindUser($IPMap{$ip}->{user}); if ($User) { $session->User($User); } else { warn "can't authenticate the $ip: user not found"; $authEngineObj->AuthMod->DS->CloseSession($session); } } return $SSID; } sub WriteSSID { my ($class,$data) = @_; #do nothing } 1;