Files
zulip/zerver/lib/external_accounts.py
Anders Kaseorg 7e9db327b3 request: Improve validator type so mypy can check it against REQ.
Old: a validator returns None on success and returns an error string
on error.

New: a validator returns the validated value on success and raises
ValidationError on error.

This allows mypy to catch mismatches between the annotated type of a
REQ parameter and the type that the validator actually validates.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2020-06-20 22:29:15 -07:00

53 lines
1.8 KiB
Python

"""
This module stores data for "External Account" custom profile field.
"""
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext as _
from zerver.lib.types import ProfileFieldData
from zerver.lib.validator import (
check_dict_only,
check_external_account_url_pattern,
check_required_string,
)
# Default external account fields are by default available
# to realm admins, where realm admin only need to select
# the default field and other values(i.e. name, url) will be
# fetch from this dictionary.
# text: Field text for admins - custom profile field in org settngs view
# name: Field label or name - user profile in user settings view
# hint: Field hint for realm users
# url_patter: Field url linkifier
DEFAULT_EXTERNAL_ACCOUNTS = {
"twitter": {
"text": "Twitter",
"url_pattern": "https://twitter.com/%(username)s",
"name": "Twitter",
"hint": "Enter your Twitter username",
},
"github": {
"text": 'GitHub',
"url_pattern": "https://github.com/%(username)s",
"name": "GitHub",
"hint": "Enter your GitHub username",
},
}
def validate_external_account_field_data(field_data: ProfileFieldData) -> ProfileFieldData:
field_validator = check_dict_only(
[('subtype', check_required_string)],
[('url_pattern', check_external_account_url_pattern)],
)
field_validator('field_data', field_data)
field_subtype = field_data.get('subtype')
if field_subtype not in DEFAULT_EXTERNAL_ACCOUNTS.keys():
if field_subtype == "custom":
if 'url_pattern' not in field_data.keys():
raise ValidationError(_("Custom external account must define url pattern"))
else:
raise ValidationError(_("Invalid external account type"))
return field_data