mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	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>
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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
 |