Last active 1716158530

This expression policy checks users against the StopForumSpam API during enrollment and rejects them if they've been reported within a specified threshold

elara6331's Avatar elara6331 revised this gist 1716158529. Go to revision

1 file changed, 4 insertions, 3 deletions

stopforumspam-checker.py

@@ -8,6 +8,7 @@ from urllib.parse import urlencode
8 8 from datetime import datetime
9 9 import requests
10 10
11 + context['sfs'] = {}
11 12 prompt_data = request.context.get("prompt_data")
12 13
13 14 user_data = {}
@@ -22,7 +23,7 @@ if len(user_data) == 0:
22 23 ak_logger.warning("Could not find any user data to check against StopForumSpam")
23 24 return True
24 25
25 - context['sfs_user_data'] = user_data
26 + context['sfs']['request_data'] = user_data
26 27 resp = requests.get("http://api.stopforumspam.org/api?json&" + urlencode(user_data))
27 28
28 29 if resp.status_code != 200:
@@ -31,7 +32,7 @@ if resp.status_code != 200:
31 32 return False
32 33
33 34 data = resp.json()
34 - context['sfs_resp_data'] = data
35 + context['sfs']['response_data'] = data
35 36
36 37 if data['success'] == 0 and 'error' in data:
37 38 ak_message(f"There was an error creating your account. Please contact {CONTACT} with the following details: SFS Error '{data['error']['message']}'")
@@ -51,7 +52,7 @@ check_passes('email')
51 52 check_passes('username')
52 53
53 54 if len(rejected_items) > 0:
54 - context['sfs_rejected_for'] = rejected_items
55 + context['sfs']['rejected_for'] = rejected_items
55 56 ak_message(f"Sorry, we cannot create your account at this time. Please come back later or contact {CONTACT} if the issue persists.")
56 57 return False
57 58

elara6331's Avatar elara6331 revised this gist 1716158203. Go to revision

1 file changed, 5 insertions

stopforumspam-checker.py

@@ -33,6 +33,11 @@ if resp.status_code != 200:
33 33 data = resp.json()
34 34 context['sfs_resp_data'] = data
35 35
36 + if data['success'] == 0 and 'error' in data:
37 + ak_message(f"There was an error creating your account. Please contact {CONTACT} with the following details: SFS Error '{data['error']['message']}'")
38 + ak_logger.warning("StopForumSpam error", msg=data['error']['message'])
39 + return False
40 +
36 41 rejected_items = []
37 42 def check_passes(name):
38 43 if 'lastseen' in data[name]:

elara6331's Avatar elara6331 revised this gist 1716157951. Go to revision

1 file changed, 17 insertions, 10 deletions

stopforumspam-checker.py

@@ -1,6 +1,5 @@
1 1 # The amount of days within which to check if the user was reported
2 2 LAST_SEEN_THRESHOLD = 180
3 - LAST_SEEN_REGEX = r"<lastseen>(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})<\/lastseen>"
4 3
5 4 # The contact name to use in rejection messages
6 5 CONTACT = "Admin at admin@example.com"
@@ -8,7 +7,6 @@ CONTACT = "Admin at admin@example.com"
8 7 from urllib.parse import urlencode
9 8 from datetime import datetime
10 9 import requests
11 - import re
12 10
13 11 prompt_data = request.context.get("prompt_data")
14 12
@@ -24,22 +22,31 @@ if len(user_data) == 0:
24 22 ak_logger.warning("Could not find any user data to check against StopForumSpam")
25 23 return True
26 24
27 - context['sfs_data'] = user_data
28 - resp = requests.get("http://api.stopforumspam.org/api?" + urlencode(user_data))
25 + context['sfs_user_data'] = user_data
26 + resp = requests.get("http://api.stopforumspam.org/api?json&" + urlencode(user_data))
29 27
30 28 if resp.status_code != 200:
31 29 ak_message(f"There was an error creating your account. Please contact {CONTACT} with the following details: SFS HTTP Error {resp.status_code}")
32 30 ak_logger.warning("StopForumSpam HTTP error", status_code=resp.status_code)
33 31 return False
34 32
35 - matches = re.search(LAST_SEEN_REGEX, resp.text)
36 - if matches is None:
37 - return True
33 + data = resp.json()
34 + context['sfs_resp_data'] = data
38 35
39 - last_seen = datetime.strptime(matches.group(1), '%Y-%m-%d %H:%M:%S')
40 - time_elapsed = datetime.now() - last_seen
36 + rejected_items = []
37 + def check_passes(name):
38 + if 'lastseen' in data[name]:
39 + last_seen = datetime.strptime(data[name]['lastseen'], '%Y-%m-%d %H:%M:%S')
40 + time_elapsed = datetime.now() - last_seen
41 + if time_elapsed.days < LAST_SEEN_THRESHOLD:
42 + rejected_items.append(name)
41 43
42 - if time_elapsed.days < LAST_SEEN_THRESHOLD:
44 + check_passes('ip')
45 + check_passes('email')
46 + check_passes('username')
47 +
48 + if len(rejected_items) > 0:
49 + context['sfs_rejected_for'] = rejected_items
43 50 ak_message(f"Sorry, we cannot create your account at this time. Please come back later or contact {CONTACT} if the issue persists.")
44 51 return False
45 52

elara6331's Avatar elara6331 revised this gist 1715543253. Go to revision

1 file changed, 32 insertions, 22 deletions

stopforumspam-checker.py

@@ -5,32 +5,42 @@ LAST_SEEN_REGEX = r"<lastseen>(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})<\/lastseen>"
5 5 # The contact name to use in rejection messages
6 6 CONTACT = "Admin at admin@example.com"
7 7
8 - from urllib.parse import quote_plus
8 + from urllib.parse import urlencode
9 9 from datetime import datetime
10 10 import requests
11 11 import re
12 12
13 13 prompt_data = request.context.get("prompt_data")
14 14
15 + user_data = {}
16 + if ak_client_ip != ip_address('255.255.255.255'):
17 + user_data['ip'] = str(ak_client_ip)
15 18 if 'email' in prompt_data:
16 - req_url = f"http://api.stopforumspam.org/api?email={quote_plus(prompt_data['email'])}"
17 - if 'username' in prompt_data:
18 - req_url += f"&username={quote_plus(prompt_data['username'])}"
19 -
20 - resp = requests.get(req_url)
21 -
22 - if resp.status_code != 200:
23 - ak_message(f"There was an error creating your account. Please contact {CONTACT} with the following details: SFS HTTP Error {resp.status_code}")
24 - return False
25 -
26 - matches = re.search(LAST_SEEN_REGEX, resp.text)
27 - if matches is None:
28 - return True
29 -
30 - last_seen = datetime.strptime(matches.group(1), '%Y-%m-%d %H:%M:%S')
31 - time_elapsed = datetime.now() - last_seen
32 - if time_elapsed.days < LAST_SEEN_THRESHOLD:
33 - ak_message(f"Sorry, we cannot approve your account at this time. Please come back later or contact {CONTACT} if the issue persists.")
34 - return False
35 -
36 - return True
19 + user_data['email'] = prompt_data['email']
20 + if 'username' in prompt_data:
21 + user_data['username'] = prompt_data['username']
22 +
23 + if len(user_data) == 0:
24 + ak_logger.warning("Could not find any user data to check against StopForumSpam")
25 + return True
26 +
27 + context['sfs_data'] = user_data
28 + resp = requests.get("http://api.stopforumspam.org/api?" + urlencode(user_data))
29 +
30 + if resp.status_code != 200:
31 + ak_message(f"There was an error creating your account. Please contact {CONTACT} with the following details: SFS HTTP Error {resp.status_code}")
32 + ak_logger.warning("StopForumSpam HTTP error", status_code=resp.status_code)
33 + return False
34 +
35 + matches = re.search(LAST_SEEN_REGEX, resp.text)
36 + if matches is None:
37 + return True
38 +
39 + last_seen = datetime.strptime(matches.group(1), '%Y-%m-%d %H:%M:%S')
40 + time_elapsed = datetime.now() - last_seen
41 +
42 + if time_elapsed.days < LAST_SEEN_THRESHOLD:
43 + ak_message(f"Sorry, we cannot create your account at this time. Please come back later or contact {CONTACT} if the issue persists.")
44 + return False
45 +
46 + return True

elara6331's Avatar elara6331 revised this gist 1715485243. Go to revision

No changes

elara6331's Avatar elara6331 revised this gist 1715485228. Go to revision

No changes

elara6331's Avatar elara6331 revised this gist 1715467479. Go to revision

1 file changed, 3 insertions, 2 deletions

stopforumspam-checker.py

@@ -5,6 +5,7 @@ LAST_SEEN_REGEX = r"<lastseen>(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})<\/lastseen>"
5 5 # The contact name to use in rejection messages
6 6 CONTACT = "Admin at admin@example.com"
7 7
8 + from urllib.parse import quote_plus
8 9 from datetime import datetime
9 10 import requests
10 11 import re
@@ -12,9 +13,9 @@ import re
12 13 prompt_data = request.context.get("prompt_data")
13 14
14 15 if 'email' in prompt_data:
15 - req_url = f"http://api.stopforumspam.org/api?email={prompt_data['email']}"
16 + req_url = f"http://api.stopforumspam.org/api?email={quote_plus(prompt_data['email'])}"
16 17 if 'username' in prompt_data:
17 - req_url += f"&username={prompt_data['username']}"
18 + req_url += f"&username={quote_plus(prompt_data['username'])}"
18 19
19 20 resp = requests.get(req_url)
20 21

elara6331's Avatar elara6331 revised this gist 1715456640. Go to revision

1 file changed, 2 insertions, 2 deletions

stopforumspam-checker.py

@@ -19,7 +19,7 @@ if 'email' in prompt_data:
19 19 resp = requests.get(req_url)
20 20
21 21 if resp.status_code != 200:
22 - ak_message(f"There was an error creating your account. Please contact {contact} with the following details: SFS HTTP Error {resp.status_code}")
22 + ak_message(f"There was an error creating your account. Please contact {CONTACT} with the following details: SFS HTTP Error {resp.status_code}")
23 23 return False
24 24
25 25 matches = re.search(LAST_SEEN_REGEX, resp.text)
@@ -29,7 +29,7 @@ if 'email' in prompt_data:
29 29 last_seen = datetime.strptime(matches.group(1), '%Y-%m-%d %H:%M:%S')
30 30 time_elapsed = datetime.now() - last_seen
31 31 if time_elapsed.days < LAST_SEEN_THRESHOLD:
32 - ak_message(f"Sorry, we cannot approve your account at this time. Please come back later or contact {contact} if the issue persists.")
32 + ak_message(f"Sorry, we cannot approve your account at this time. Please come back later or contact {CONTACT} if the issue persists.")
33 33 return False
34 34
35 35 return True

elara6331's Avatar Elara6331 revised this gist 1715456537. Go to revision

1 file changed, 6 insertions, 3 deletions

stopforumspam-checker.py

@@ -12,8 +12,11 @@ import re
12 12 prompt_data = request.context.get("prompt_data")
13 13
14 14 if 'email' in prompt_data:
15 - user_email = prompt_data['email']
16 - resp = requests.get(f"http://api.stopforumspam.org/api?email={user_email}")
15 + req_url = f"http://api.stopforumspam.org/api?email={prompt_data['email']}"
16 + if 'username' in prompt_data:
17 + req_url += f"&username={prompt_data['username']}"
18 +
19 + resp = requests.get(req_url)
17 20
18 21 if resp.status_code != 200:
19 22 ak_message(f"There was an error creating your account. Please contact {contact} with the following details: SFS HTTP Error {resp.status_code}")
@@ -29,4 +32,4 @@ if 'email' in prompt_data:
29 32 ak_message(f"Sorry, we cannot approve your account at this time. Please come back later or contact {contact} if the issue persists.")
30 33 return False
31 34
32 - return True
35 + return True

elara6331's Avatar elara6331 revised this gist 1715454832. Go to revision

No changes

Newer Older