49
|
1 #!/usr/bin/perl -w
|
|
2 use strict;
|
|
3
|
|
4 package ObjectStore::CDBI::Users;
|
|
5 use Common;
|
|
6 use Digest::MD5 qw(md5_hex);
|
|
7 our @ISA = qw(Object);
|
|
8
|
|
9 our $Namespace;
|
|
10 our $DataModule;
|
|
11
|
|
12 our $Prefix = $Namespace ? $Namespace.'::' : '';
|
|
13
|
|
14 if ($DataModule) {
|
|
15 $DataModule =~ s/::/\//g;
|
|
16 $DataModule .= '.pm';
|
|
17 require $DataModule;
|
|
18 }
|
|
19
|
|
20 BEGIN {
|
|
21 DeclareProperty DSNamespace => ACCESS_NONE;
|
|
22 }
|
|
23
|
|
24 sub CTOR {
|
|
25 my ($this,%args) = @_;
|
|
26
|
|
27 $this->{$DSNamespace} = $args{'DSNamespace'};
|
|
28 }
|
|
29
|
|
30 sub ClassName {
|
|
31 return $_[0]->{$DSNamespace} ? $_[0]->{$DSNamespace}. $_[1] : $_[1];
|
|
32 }
|
|
33
|
|
34 sub FindUser {
|
|
35 my ($this,$uname) = @_;
|
|
36
|
|
37 my @Users = $this->ClassName('Principal')->search(Name => $uname);
|
|
38 return shift @Users;
|
|
39 }
|
|
40
|
|
41 sub CreateUser {
|
|
42 my ($this,$uname,$description,$active) = @_;
|
|
43
|
|
44 if (my $user = $this->FindUser($uname)) {
|
|
45 die new Exception("The user is already exists",$uname);
|
|
46 } else {
|
|
47 return $this->ClassName('Principal')->insert({Name => $uname, Description => $description, Active => $active});
|
|
48 }
|
|
49 }
|
|
50
|
|
51 sub DeleteUser {
|
|
52 my ($this,$objUser) = @_;
|
|
53
|
|
54 $objUser->delete;
|
|
55 }
|
|
56
|
|
57 sub GetUserAuthData {
|
|
58 my ($this,$objUser,$objSecPackage) = @_;
|
|
59
|
|
60 my @Data = $this->ClassName('AuthData')->search(User => $objUser,Package => $objSecPackage->Name);
|
|
61 return $Data[0];
|
|
62 }
|
|
63
|
|
64 sub SetUserAuthData {
|
|
65 my ($this,$objUser,$objSecPackage,$objAuthData) = @_;
|
|
66
|
|
67 if (my $AuthData = $this->GetUserAuthData($objUser,$objSecPackage)) {
|
|
68 $AuthData->AuthData(objAuthData->SessionAuthData);
|
|
69 $AuthData->update;
|
|
70 } else {
|
|
71 $this->ClassName('AuthData')->insert({ User => $objUser, Package => $objSecPackage->Name, AuthData => $objAuthData->SessionAuthData});
|
|
72 }
|
|
73 }
|
|
74
|
|
75 sub CreateSession {
|
|
76 my ($this,$SSID,$objUser,$objAuthData) = @_;
|
|
77
|
|
78 my $session = $this->ClassName('Session')->insert({SSID => $SSID, User => $objUser, SecData => $objAuthData->SessionAuthData, LastUsage => DateTime->now() });
|
|
79 $session->autoupdate(1);
|
|
80 return $session;
|
|
81 }
|
|
82
|
|
83 sub CloseSession {
|
|
84 my ($this,$objSession) = @_;
|
|
85
|
|
86 $objSession->delete;
|
|
87 }
|
|
88
|
|
89 sub LoadSession {
|
|
90 my ($this,$SSID) = @_;
|
|
91 my @Data = $this->ClassName('Session')->search(SSID => $SSID);
|
|
92 if ($Data[0]) {
|
|
93 $Data[0]->autoupdate(1);
|
|
94 return $Data[0];
|
|
95 }
|
|
96 }
|
|
97
|
|
98 sub construct {
|
|
99 return __PACKAGE__->new(DSNamespace => $Prefix);
|
|
100 }
|