Line # Revision Author
1 197 ahitrov package session::State;
2
3 use strict;
4 use warnings 'all';
5 use vars qw($AUTOLOAD);
6
7
8 sub new {
9 my ($proto) = @_;
10 my $class = ref($proto) || $proto;
11 my $self = {};
12 bless $self, $class;
13
14 254 ahitrov # configured
15 $self->{project} = '@PROJECT@';
16 $self->{debug} = (lc('@DEBUG@') eq 'yes');
17 454 ahitrov $self->{contenido_notab} = 0;
18 $self->{tab_name} = 'Сессии';
19 254 ahitrov $self->{project_name} = '@PROJECT_NAME@';
20 $self->{default_expire} = '@DEFAULT_EXPIRE@' || 300;
21 $self->{default_object_expire} = '@DEFAULT_OBJECT_EXPIRE@' || 600;
22
23 197 ahitrov # зашитая конфигурация плагина
24 $self->{db_type} = 'none';
25 $self->{storage} = '@SESSION_STORAGE@' || 'FILE'; ## Значения: FILE POSTGRES MEMCACHED
26 $self->{session_dir} = '@SESSIONS@';
27 $self->{session_directory} = '@SESSIONS@';
28
29 $self->{domain} = '@SESSION_DOMAIN@';
30 400 ahitrov $self->{cookie} = '@SESSION_COOKIE_NAME@' || 'lsid';
31 197 ahitrov $self->{expires} = '@SESSION_EXPIRES@' || '';
32
33 $self->{lifetime} = '@SESSION_LIFETIME@';
34 $self->{lifetime} *= 3600;
35 $self->{checkout} = $self->{lifetime} - int ($self->{lifetime} / 2);
36
37 $self->{db_keepalive} = 0;
38 $self->{db_host} = '';
39 $self->{db_name} = '';
40 $self->{db_user} = '';
41 $self->{db_password} = '';
42 $self->{db_port} = '';
43
44 $self->{data_directory} = '';
45 $self->{images_directory} = '';
46 $self->{binary_directory} = '';
47 $self->{preview} = '';
48 $self->{store_method} = '';
49 $self->{cascade} = '';
50
51 254 ahitrov $self->{memcached_enable} = lc( '@MEMCACHED_ENABLE@' ) eq 'yes' ? 1 : 0;
52 $self->{memcached_backend} = '@MEMCACHED_BACKEND@';
53 $self->{memcached_select_timeout} = '@MEMCACHED_SELECT_TIMEOUT@' || 0.2;
54 $self->{memcached_servers} = [qw(@MEMCACHED_SERVERS@)];
55 $self->{memcached_enable_compress} = lc( '@MEMCACHED_ENABLE_COMPRESS@' ) eq 'yes' ? 1 : 0;
56 $self->{memcached_delayed} = lc('@MEMCACHED_DELAYED@') eq 'yes' ? 1 : 0;
57 $self->{memcached_set_mode} = lc('@MEMCACHED_SET_MODE@') eq 'add' ? 'add' : 'set';
58 $self->{memcached_busy_lock} = 60;
59 $self->{memcached_namespace} = lc( $self->{'project'} ).'|plugin_session|';
60
61 $self->{memcached_object_expire} = undef;
62
63 $self->{storage} = 'FILE' if $self->{storage} eq 'MEMCACHED' && !$self->{memcached_enable};
64
65 197 ahitrov $self->{facebook_app_id} = '@FACEBOOK_APP_ID@';
66 $self->{facebook_app_secret} = '@FACEBOOK_APP_SECRET@';
67 $self->{facebook_redirect_uri} = '@FACEBOOK_REDIRECT_URL@';
68 320 ahitrov $self->{facebook_scope} = '@FACEBOOK_SCOPE@';
69 197 ahitrov $self->{facebook_user_post_url} = '@FACEBOOK_USER_POST_URL@';
70
71 240 ahitrov $self->{vk_app_id} = '@VK_APP_ID@';
72 $self->{vk_app_secret} = '@VK_APP_SECRET@';
73 $self->{vk_redirect_uri} = '@VK_REDIRECT_URL@';
74 $self->{vk_user_post_url} = '@VK_USER_POST_URL@';
75
76 242 ahitrov $self->{mailru_app_id} = '@MAILRU_APP_ID@';
77 $self->{mailru_app_secret} = '@MAILRU_APP_SECRET@';
78 $self->{mailru_redirect_uri} = '@MAILRU_REDIRECT_URL@';
79 $self->{mailru_user_post_url} = '@MAILRU_USER_POST_URL@';
80
81 246 ahitrov $self->{google_app_id} = '@GOOGLE_APP_ID@';
82 $self->{google_app_secret} = '@GOOGLE_APP_SECRET@';
83 $self->{google_redirect_uri} = '@GOOGLE_REDIRECT_URL@';
84 $self->{google_user_post_url} = '@GOOGLE_USER_POST_URL@';
85 $self->{google_scope} = '@GOOGLE_SCOPE@';
86
87 197 ahitrov $self->_init_();
88 $self;
89 }
90
91 sub info {
92 my $self = shift;
93 return unless ref $self;
94
95 for (sort keys %{$self->{attributes}}) {
96 my $la = length $_;
97 warn "\t$_".("\t" x (2-int($la/8))).": $self->{$_}\n";
98 }
99 }
100
101 sub _init_ {
102 my $self = shift;
103
104 # зашитая конфигурация плагина
105 $self->{attributes}->{$_} = 'SCALAR' for qw(
106 454 ahitrov debug
107 project
108 tab_name
109
110 197 ahitrov db_type
111 session_dir
112 session_directory
113 domain
114 cookie
115 expires
116 storage
117 lifetime
118 checkout
119 db_keepalive
120 db_host
121 db_port
122 db_name
123 db_user
124 db_password
125 254 ahitrov
126 memcached_enable
127 memcached_servers
128 memcached_select_timeout
129 memcached_backend
130 memcached_enable_compress
131 memcached_set_mode
132 memcached_object_expire
133 memcached_busy_lock
134 memcached_delayed
135 memcached_namespace
136
137 data_directory
138 images_directory
139 binary_directory
140 preview
141 store_method
142 cascade
143 197 ahitrov );
144 }
145
146 sub AUTOLOAD {
147 my $self = shift;
148 my $attribute = $AUTOLOAD;
149
150 $attribute =~ s/.*:://;
151 return unless $attribute =~ /[^A-Z]/; # Отключаем методы типа DESTROY
152
153 if (!exists $self->{attributes}->{$attribute}) {
154 warn "Contenido Error (session::State): Вызов метода, для которого не существует обрабатываемого свойства: ->$attribute()\n";
155 return;
156 }
157
158 $self->{$attribute} = shift @_ if $#_>=0;
159 $self->{$attribute};
160 }
161
162 1;