mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 06:23:38 +00:00
Right now it only has one function, but the function we removed never really belonged in actions.py, and now we have better test coverage on actions.py, which is an important module to get to 100%.
26 lines
984 B
Python
26 lines
984 B
Python
import re
|
|
import traceback
|
|
import DNS
|
|
|
|
from zerver.lib.str_utils import NonBinaryStr, force_str
|
|
|
|
def compute_mit_user_fullname(email: NonBinaryStr) -> NonBinaryStr:
|
|
try:
|
|
# Input is either e.g. username@mit.edu or user|CROSSREALM.INVALID@mit.edu
|
|
match_user = re.match(r'^([a-zA-Z0-9_.-]+)(\|.+)?@mit\.edu$', email.lower())
|
|
if match_user and match_user.group(2) is None:
|
|
answer = DNS.dnslookup(
|
|
"%s.passwd.ns.athena.mit.edu" % (match_user.group(1),),
|
|
DNS.Type.TXT)
|
|
hesiod_name = force_str(answer[0][0]).split(':')[4].split(',')[0].strip()
|
|
if hesiod_name != "":
|
|
return hesiod_name
|
|
elif match_user:
|
|
return match_user.group(1).lower() + "@" + match_user.group(2).upper()[1:]
|
|
except DNS.Base.ServerError:
|
|
pass
|
|
except Exception:
|
|
print("Error getting fullname for %s:" % (email,))
|
|
traceback.print_exc()
|
|
return email.lower()
|