annotate roundup/cgi/timestamp.py @ 7968:d7e79f8eb943

issue2551350 - Python changes for 3.12 with roundup 2.3.0 mailer.py Fix due to change in smtplib.SMTP.starttls() signature. As of 3.3 it can use an optional ssl context argument for certificates/keys. In 3.12 it dropped legacy support for specifing cert/key files as arguments and requires a context. I modified Andrew's original patch to initialize SSLContext with ssl.PROTOCOL_TLS_CLIENT. If there is a cert file specified, enable check_hostname - verify that the cert supplied by the server matches the hostname we supplied. If there is no cert file call load_default_certs() Also opened issue2551351 to look into more SMTP ssmtp tightening. We also should have an option in Roundup to use TLS/SSL (smtps) without using starttls. Note that this code is untested by the test suite due to the need to setup an SMTP server with STARTTLS support. issue2551351 has some notes on this.
author John Rouillard <rouilj@ieee.org>
date Wed, 15 May 2024 00:08:05 -0400
parents 216662fbaaee
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5975
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
1 '''Set of functions of adding/checking timestamp to be used to limit
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
2 form submission for cgi actions.
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
3 '''
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
4
7228
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6045
diff changeset
5 import base64
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6045
diff changeset
6 import binascii
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6045
diff changeset
7 import struct
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6045
diff changeset
8 import time
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6045
diff changeset
9
5975
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
10 from roundup.cgi.exceptions import FormError
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
11 from roundup.i18n import _
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
12 from roundup.anypy.strings import b2s, s2b
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
13
6045
5ec3171580a6 flake whitespace changes.
John Rouillard <rouilj@ieee.org>
parents: 5975
diff changeset
14
5975
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
15 def pack_timestamp():
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
16 return b2s(base64.b64encode(struct.pack("i", int(time.time()))).strip())
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
17
6045
5ec3171580a6 flake whitespace changes.
John Rouillard <rouilj@ieee.org>
parents: 5975
diff changeset
18
5975
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
19 def unpack_timestamp(s):
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
20 try:
6045
5ec3171580a6 flake whitespace changes.
John Rouillard <rouilj@ieee.org>
parents: 5975
diff changeset
21 timestamp = struct.unpack("i", base64.b64decode(s2b(s)))[0]
5ec3171580a6 flake whitespace changes.
John Rouillard <rouilj@ieee.org>
parents: 5975
diff changeset
22 except (struct.error, binascii.Error, TypeError):
5975
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
23 raise FormError(_("Form is corrupted."))
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
24 return timestamp
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
25
6045
5ec3171580a6 flake whitespace changes.
John Rouillard <rouilj@ieee.org>
parents: 5975
diff changeset
26
5975
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
27 class Timestamped:
6045
5ec3171580a6 flake whitespace changes.
John Rouillard <rouilj@ieee.org>
parents: 5975
diff changeset
28 def timecheck(self, field, delay):
5975
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
29 try:
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
30 created = unpack_timestamp(self.form[field].value)
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
31 except KeyError:
7750
216662fbaaee fix(i18n): fix incorrect lookup of some translations
John Rouillard <rouilj@ieee.org>
parents: 7228
diff changeset
32 raise FormError(_("Form is corrupted, missing: %s.") % field)
5975
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
33 if time.time() - created < delay:
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
34 raise FormError(_("Responding to form too quickly."))
59842a3e8108 issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
35 return True

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