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 |
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]: |
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 |
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 |
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 |
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 |
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 |