Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpnSense
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kulya
OpnSense
Commits
1fd5d463
Commit
1fd5d463
authored
Oct 03, 2015
by
Ad Schellevis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(captiveportal, new) work in progress scriptbase, idletimeout, hardtimeout, etc
parent
3677ab28
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
16 deletions
+24
-16
cp-background-process.py
...e/scripts/OPNsense/CaptivePortal/cp-background-process.py
+12
-8
db.py
src/opnsense/scripts/OPNsense/CaptivePortal/lib/db.py
+3
-2
ipfw.py
src/opnsense/scripts/OPNsense/CaptivePortal/lib/ipfw.py
+9
-6
No files found.
src/opnsense/scripts/OPNsense/CaptivePortal/cp-background-process.py
View file @
1fd5d463
...
...
@@ -62,11 +62,8 @@ def main():
expected_clients
=
db
.
list_clients
(
zoneid
)
# handle connected clients, timeouts, address changes, etc.
for
db_client
in
expected_clients
:
# convert ip address to net, tables are registered as nets
if
db_client
[
'ipAddress'
]
.
strip
()
.
find
(
'/'
)
==
-
1
:
cpnet
=
'
%
s/32'
%
db_client
[
'ipAddress'
]
.
strip
()
else
:
cpnet
=
db_client
[
'ipAddress'
]
.
strip
()
# fetch ip address (or network) from database
cpnet
=
db_client
[
'ipAddress'
]
.
strip
()
# there are different reasons why a session should be removed, check for all reasons and
# use the same method for the actual removal
...
...
@@ -75,10 +72,17 @@ def main():
# todo, static ip and addresses shouldn't be affected by the timeout rules below.
# check if hardtimeout is set and overrun for this session
if
'hardtimeout'
in
cpzones
[
zoneid
]
and
str
(
cpzones
[
zoneid
][
'hardtimeout'
])
.
isdigit
():
if
int
(
cpzones
[
zoneid
][
'hardtimeout'
])
>
0
:
if
time
.
time
()
-
float
(
db_client
[
'startTime'
])
/
60
>
int
(
cpzones
[
zoneid
][
'hardtimeout'
]):
# hardtimeout should be set and we should have collected some session data from the client
if
int
(
cpzones
[
zoneid
][
'hardtimeout'
])
>
0
and
float
(
db_client
[
'startTime'
])
>
0
:
if
(
time
.
time
()
-
float
(
db_client
[
'startTime'
]))
/
60
>
int
(
cpzones
[
zoneid
][
'hardtimeout'
]):
drop_session
=
True
# check if idletimeout is set and overrun for this session
if
'idletimeout'
in
cpzones
[
zoneid
]
and
str
(
cpzones
[
zoneid
][
'idletimeout'
])
.
isdigit
():
# idletimeout should be set and we should have collected some session data from the client
if
int
(
cpzones
[
zoneid
][
'idletimeout'
])
>
0
and
float
(
db_client
[
'last_accessed'
])
>
0
:
if
(
time
.
time
()
-
float
(
db_client
[
'last_accessed'
]))
/
60
>
int
(
cpzones
[
zoneid
][
'idletimeout'
]):
drop_session
=
True
drop_session
=
False
# check session, if it should be active, validate its properties
if
not
drop_session
:
...
...
src/opnsense/scripts/OPNsense/CaptivePortal/lib/db.py
View file @
1fd5d463
...
...
@@ -78,6 +78,7 @@ class DB(object):
response
[
'ipAddress'
]
=
ip_address
response
[
'macAddress'
]
=
mac_address
response
[
'startTime'
]
=
time
.
time
()
# record creation = sign-in time
response
[
'last_accessed'
]
=
time
.
time
()
# last accessed_time = sign-in time
response
[
'sessionId'
]
=
base64
.
b64encode
(
os
.
urandom
(
16
))
# generate a new random session id
cur
=
self
.
_connection
.
cursor
()
...
...
@@ -89,8 +90,8 @@ class DB(object):
"""
,
response
)
# add new session
cur
.
execute
(
"""INSERT INTO cp_clients(zoneid, authenticated_via, sessionid, username, ip_address, mac_address, created)
VALUES (:zoneid, :authenticated_via, :sessionId, :userName, :ipAddress, :macAddress, :startTime)
cur
.
execute
(
"""INSERT INTO cp_clients(zoneid, authenticated_via, sessionid, username, ip_address, mac_address, created
, last_accessed
)
VALUES (:zoneid, :authenticated_via, :sessionId, :userName, :ipAddress, :macAddress, :startTime
, :last_accessed
)
"""
,
response
)
self
.
_connection
.
commit
()
...
...
src/opnsense/scripts/OPNsense/CaptivePortal/lib/ipfw.py
View file @
1fd5d463
...
...
@@ -48,7 +48,14 @@ class IPFW(object):
output_stream
.
seek
(
0
)
for
line
in
output_stream
.
read
()
.
split
(
'
\n
'
):
if
line
.
split
(
' '
)[
0
]
.
strip
()
!=
""
:
result
.
append
(
line
.
split
(
' '
)[
0
])
# process / 32 nets as single addresses to align better with the rule syntax
# and local administration.
if
line
.
split
(
' '
)[
0
]
.
split
(
'/'
)[
-
1
]
==
'32'
:
# single IPv4 address
result
.
append
(
line
.
split
(
' '
)[
0
]
.
split
(
'/'
)[
0
])
else
:
# network
result
.
append
(
line
.
split
(
' '
)[
0
])
return
result
def
ip_or_net_in_table
(
self
,
table_number
,
address
):
...
...
@@ -58,11 +65,7 @@ class IPFW(object):
:return: boolean
"""
ipfw_tbl
=
self
.
list_table
(
table_number
)
if
address
.
find
(
'.'
)
>
-
1
and
address
.
find
(
'/'
)
==
-
1
:
# address given, search for /32 net in ipfw rules
if
'
%
s/32'
%
address
.
strip
()
in
ipfw_tbl
:
return
True
elif
address
.
strip
()
in
ipfw_tbl
:
if
address
.
strip
()
in
ipfw_tbl
:
return
True
return
False
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment