mirror of
https://github.com/IRS-Public/direct-file.git
synced 2025-06-27 20:25:52 +00:00
Merge 1ce6aa04c9
into e0d5c84451
This commit is contained in:
commit
c045e28224
1 changed files with 22 additions and 14 deletions
|
@ -1,27 +1,35 @@
|
||||||
#! /usr/bin/env python3
|
|
||||||
|
|
||||||
# Simple script to output the TIN that's expected for a given email address for any environment using csp-simulator
|
|
||||||
#
|
|
||||||
# Usage: ./predictable-tin.py EMAIL_ADDRESS
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import hashlib
|
import hashlib
|
||||||
import typing
|
import re
|
||||||
|
import argparse
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
def calculate_tin(email: str) -> str:
|
||||||
def calculate_tin(email: str):
|
"""Calculate a predictable TIN based on the email address."""
|
||||||
# nosemgrep: bandit.B303-2
|
# nosemgrep: bandit.B303-2
|
||||||
sha1 = hashlib.sha1()
|
sha1 = hashlib.sha1()
|
||||||
sha1.update(f'{email}:IAL2'.encode('utf-8'))
|
sha1.update(f'{email}:IAL2'.encode('utf-8'))
|
||||||
predictable_last_four = int.from_bytes(sha1.digest()[0:2], 'big') % 9999
|
predictable_last_four = int.from_bytes(sha1.digest()[0:2], 'big') % 9999
|
||||||
return f'123-00-{predictable_last_four:04d}'
|
return f'123-00-{predictable_last_four:04d}'
|
||||||
|
|
||||||
|
def is_valid_email(email: str) -> bool:
|
||||||
|
"""Simple email validation."""
|
||||||
|
return re.match(r"^[^@\s]+@[^@\s]+\.[^@\s]+$", email) is not None
|
||||||
|
|
||||||
def main():
|
def main() -> None:
|
||||||
if (sys.argv.__len__() > 1):
|
parser = argparse.ArgumentParser(description="Predict the TIN for a given email address.")
|
||||||
print(calculate_tin(sys.argv[1]))
|
parser.add_argument('email', metavar='EMAIL_ADDRESS', type=str, nargs='?', help='Email address to predict TIN for')
|
||||||
else:
|
args = parser.parse_args()
|
||||||
print(f'Usage: {sys.argv[0]} EMAIL_ADDRESS')
|
|
||||||
|
if not args.email:
|
||||||
|
parser.print_usage()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if not is_valid_email(args.email):
|
||||||
|
print(f"Error: '{args.email}' is not a valid email address.", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print(calculate_tin(args.email))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue