annotate roundup/backends/sessions_rdbms.py @ 8594:be128eb0a4e1

chore(ruff): refine imports and spacing fix.
author John Rouillard <rouilj@ieee.org>
date Sat, 25 Apr 2026 18:05:41 -0400
parents bd97eaffe900
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 """This module defines a very basic store that's used by the CGI interface
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 to store session and one-time-key information.
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 Yes, it's called "sessions" - because originally it only defined a session
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 class. It's now also used for One Time Key handling too.
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 """
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 __docformat__ = 'restructuredtext'
8587
31675062230a feature: replace eval with ast.literal_eval
John Rouillard <rouilj@ieee.org>
parents: 8553
diff changeset
8 import ast
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
9 import time
5806
abee2c2c822e More cgi.escape/html.escape fixes.
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
10
5837
883c9e90b403 Fix problem with cgi.escape being depricated a different way. This way
John Rouillard <rouilj@ieee.org>
parents: 5806
diff changeset
11 from roundup.anypy.html import html_escape as escape
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
12 from roundup.backends.sessions_common import SessionCommon
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
14
8553
ee17f62c8341 bug: improve security of eval'ed of session database data. (hexora)
John Rouillard <rouilj@ieee.org>
parents: 6823
diff changeset
15 def safe_eval(s):
8587
31675062230a feature: replace eval with ast.literal_eval
John Rouillard <rouilj@ieee.org>
parents: 8553
diff changeset
16 """Restricted eval to eval a repr of a dict of constants.
31675062230a feature: replace eval with ast.literal_eval
John Rouillard <rouilj@ieee.org>
parents: 8553
diff changeset
17 """
31675062230a feature: replace eval with ast.literal_eval
John Rouillard <rouilj@ieee.org>
parents: 8553
diff changeset
18 return ast.literal_eval(s)
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
19
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
20
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
21 class BasicDatabase(SessionCommon):
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 ''' Provide a nice encapsulation of an RDBMS table.
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 Keys are id strings, values are automatically marshalled data.
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 '''
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
26 """ In methods the variables ``n`` and ``a`` should be used
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
27 only for the values of self.name and self.db.arg
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
28 respectively. Only these values should be interpolated
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
29 into a sql string as they are safe.
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
30
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
31 self.name is ``otk`` or ``session`` for the otk or
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
32 session databases.
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
33
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
34 self.db.arg is ``%s`` or ``?`` and is the placeholder for
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
35 parameterized queries in mysql/postgresql or sqlite
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
36 respectively.
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
37 """
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
38
5252
0b154486ed38 Make sure that the name property is initialized to none.
John Rouillard <rouilj@ieee.org>
parents: 5213
diff changeset
39 name = None
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
40
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 def __init__(self, db):
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 self.db = db
5319
62de601bdf6f Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5252
diff changeset
43 self.conn, self.cursor = self.db.sql_open_connection()
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 def clear(self):
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
46 self.cursor.execute('delete from %ss' % self.name)
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47
2169
12cd4fa91eb7 OTK generation was busted (thanks Stuart D. Gathman)
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
48 def exists(self, infoid):
12cd4fa91eb7 OTK generation was busted (thanks Stuart D. Gathman)
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
49 n = self.name
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
50 self.cursor.execute('select count(*) from %ss where %s_key=%s' %
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
51 (n, n, self.db.arg), (infoid,))
2244
ac4f295499a4 fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents: 2169
diff changeset
52 return int(self.cursor.fetchone()[0])
2169
12cd4fa91eb7 OTK generation was busted (thanks Stuart D. Gathman)
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
53
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 _marker = []
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
55
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 def get(self, infoid, value, default=_marker):
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 n = self.name
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
58 self.cursor.execute('select %s_value from %ss where %s_key=%s' %
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
59 (n, n, n, self.db.arg), (infoid,))
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 res = self.cursor.fetchone()
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 if not res:
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 if default != self._marker:
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 return default
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
64 raise KeyError('No such %s "%s"' % (n, escape(infoid)))
8553
ee17f62c8341 bug: improve security of eval'ed of session database data. (hexora)
John Rouillard <rouilj@ieee.org>
parents: 6823
diff changeset
65 values = safe_eval(res[0])
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 return values.get(value, None)
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 def getall(self, infoid):
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 n = self.name
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
70 self.cursor.execute('select %s_value from %ss where %s_key=%s' %
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
71 (n, n, n, self.db.arg), (infoid,))
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 res = self.cursor.fetchone()
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 if not res:
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
74 raise KeyError('No such %s "%s"' % (n, escape(infoid)))
8553
ee17f62c8341 bug: improve security of eval'ed of session database data. (hexora)
John Rouillard <rouilj@ieee.org>
parents: 6823
diff changeset
75 return safe_eval(res[0])
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 def set(self, infoid, **newvalues):
5213
bf13b28156f3 This change didn't make it into the last commit. Allow the user to
John Rouillard <rouilj@ieee.org>
parents: 4585
diff changeset
78 """ Store all newvalues under key infoid with a timestamp in database.
bf13b28156f3 This change didn't make it into the last commit. Allow the user to
John Rouillard <rouilj@ieee.org>
parents: 4585
diff changeset
79
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
80 If newvalues['__timestamp'] exists and is representable as
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
81 a floating point number (i.e. could be generated by time.time()),
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
82 that value is used for the <name>_time column in the database.
5213
bf13b28156f3 This change didn't make it into the last commit. Allow the user to
John Rouillard <rouilj@ieee.org>
parents: 4585
diff changeset
83 """
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 c = self.cursor
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 n = self.name
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 a = self.db.arg
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
87 c.execute('select %s_value from %ss where %s_key=%s' %
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
88 (n, n, n, a), (infoid,))
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 res = c.fetchone()
6808
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
90
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
91 values = safe_eval(res[0]) if res else {}
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
92
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
93 timestamp = time.time()
6808
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
94
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
95 if '__timestamp' in newvalues:
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
96 try:
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
97 # __timestamp must be representable as a float. Check it.
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
98 timestamp = float(newvalues['__timestamp'])
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
99 except ValueError:
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
100 if res:
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
101 # keep the original timestamp
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
102 del newvalues['__timestamp']
6808
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
103 else:
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
104 # here timestamp is the new timestamp
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
105 newvalues['__timestamp'] = timestamp
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 values.update(newvalues)
6803
db437dd13ed5 set method doesn't include user set timestamp if update
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
107 if res:
db437dd13ed5 set method doesn't include user set timestamp if update
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
108 sql = ('update %ss set %s_value=%s, %s_time=%s '
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
109 'where %s_key=%s' % (n, n, a, n, a, n, a))
6803
db437dd13ed5 set method doesn't include user set timestamp if update
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
110 args = (repr(values), timestamp, infoid)
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 else:
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 sql = 'insert into %ss (%s_key, %s_time, %s_value) '\
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
113 'values (%s, %s, %s)' % (n, n, n, n, a, a, a)
5213
bf13b28156f3 This change didn't make it into the last commit. Allow the user to
John Rouillard <rouilj@ieee.org>
parents: 4585
diff changeset
114 args = (infoid, timestamp, repr(values))
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 c.execute(sql, args)
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116
4390
936bd9bf732d session API consistency
Richard Jones <richard@users.sourceforge.net>
parents: 4362
diff changeset
117 def list(self):
936bd9bf732d session API consistency
Richard Jones <richard@users.sourceforge.net>
parents: 4362
diff changeset
118 c = self.cursor
936bd9bf732d session API consistency
Richard Jones <richard@users.sourceforge.net>
parents: 4362
diff changeset
119 n = self.name
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
120 c.execute('select %s_key from %ss' % (n, n))
4390
936bd9bf732d session API consistency
Richard Jones <richard@users.sourceforge.net>
parents: 4362
diff changeset
121 return [res[0] for res in c.fetchall()]
936bd9bf732d session API consistency
Richard Jones <richard@users.sourceforge.net>
parents: 4362
diff changeset
122
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 def destroy(self, infoid):
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
124 n = self.name
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
125 self.cursor.execute('delete from %ss where %s_key=%s' %
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
126 (n, n, self.db.arg), (infoid,))
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 def updateTimestamp(self, infoid):
3848
7ad206564007 Use """ instead of ''' in comments, or emacs python-mode bails out.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3606
diff changeset
129 """ don't update every hit - once a minute should be OK """
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
130 n = self.name
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
131 a = self.db.arg
3606
04dc3eef67b7 reduced frequency of session timestamp update
Richard Jones <richard@users.sourceforge.net>
parents: 2244
diff changeset
132 now = time.time()
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
133 self.cursor.execute('''update %ss set %s_time=%s where %s_key=%s '''
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
134 '''and %s_time < %s''' %
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
135 (n, n, a, n, a, n, a),
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
136 (now, infoid, now - 60))
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137
3989
0112e9e1d068 improvements to session management
Richard Jones <richard@users.sourceforge.net>
parents: 3920
diff changeset
138 def clean(self):
0112e9e1d068 improvements to session management
Richard Jones <richard@users.sourceforge.net>
parents: 3920
diff changeset
139 ''' Remove session records that haven't been used for a week. '''
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
140 n = self.name
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
141 a = self.db.arg
3989
0112e9e1d068 improvements to session management
Richard Jones <richard@users.sourceforge.net>
parents: 3920
diff changeset
142 now = time.time()
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
143 week = 60 * 60 * 24 * 7
3989
0112e9e1d068 improvements to session management
Richard Jones <richard@users.sourceforge.net>
parents: 3920
diff changeset
144 old = now - week
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
145 self.cursor.execute('delete from %ss where %s_time < %s' %
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
146 (n, n, a), (old, ))
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147
5319
62de601bdf6f Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5252
diff changeset
148 def commit(self):
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
149 self.log_info('commit %s' % self.name)
5319
62de601bdf6f Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5252
diff changeset
150 self.conn.commit()
62de601bdf6f Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5252
diff changeset
151 self.cursor = self.conn.cursor()
62de601bdf6f Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5252
diff changeset
152
6808
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
153 def lifetime(self, item_lifetime=0):
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
154 """Return the proper timestamp for a key with key_lifetime specified
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
155 in seconds. Default lifetime is 0.
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
156 """
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
157 now = time.time()
8593
bd97eaffe900 refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents: 8587
diff changeset
158 week = 60 * 60 * 24 * 7
6808
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
159 return now - week + item_lifetime
375d40a9e730 Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents: 6803
diff changeset
160
5319
62de601bdf6f Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5252
diff changeset
161 def close(self):
62de601bdf6f Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5252
diff changeset
162 self.conn.close()
62de601bdf6f Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5252
diff changeset
163
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
164
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 class Sessions(BasicDatabase):
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 name = 'session'
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167
6823
fe0091279f50 Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents: 6808
diff changeset
168
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 class OneTimeKeys(BasicDatabase):
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 name = 'otk'
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171
3920
416606b09b27 fix vim modelines
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3918
diff changeset
172 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/