mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	email_mirror: Check address usability in get_missed_message_address.
This commit is contained in:
		
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							843c148c59
						
					
				
				
					commit
					ac8f4aaa93
				
			@@ -105,16 +105,23 @@ def get_missed_message_token_from_address(address: str) -> str:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return msg_string
 | 
					    return msg_string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_missed_message_address(address: str) -> MissedMessageEmailAddress:
 | 
					def get_usable_missed_message_address(address: str) -> MissedMessageEmailAddress:
 | 
				
			||||||
    token = get_missed_message_token_from_address(address)
 | 
					    token = get_missed_message_token_from_address(address)
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        return MissedMessageEmailAddress.objects.select_related().get(
 | 
					        mm_address = MissedMessageEmailAddress.objects.select_related().get(
 | 
				
			||||||
            email_token=token,
 | 
					            email_token=token,
 | 
				
			||||||
            timestamp__gt=timezone_now() - timedelta(seconds=MissedMessageEmailAddress.EXPIRY_SECONDS)
 | 
					            timestamp__gt=timezone_now() - timedelta(seconds=MissedMessageEmailAddress.EXPIRY_SECONDS)
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    except MissedMessageEmailAddress.DoesNotExist:
 | 
					    except MissedMessageEmailAddress.DoesNotExist:
 | 
				
			||||||
        raise ZulipEmailForwardError("Missed message address expired or doesn't exist.")
 | 
					        raise ZulipEmailForwardError("Missed message address expired or doesn't exist.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if not mm_address.is_usable():
 | 
				
			||||||
 | 
					        # Technical, this also checks whether the event is expired,
 | 
				
			||||||
 | 
					        # but that case is excluded by the logic above.
 | 
				
			||||||
 | 
					        raise ZulipEmailForwardError("Missed message address out of uses.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return mm_address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def create_missed_message_address(user_profile: UserProfile, message: Message) -> str:
 | 
					def create_missed_message_address(user_profile: UserProfile, message: Message) -> str:
 | 
				
			||||||
    if settings.EMAIL_GATEWAY_PATTERN == '':
 | 
					    if settings.EMAIL_GATEWAY_PATTERN == '':
 | 
				
			||||||
        logger.warning("EMAIL_GATEWAY_PATTERN is an empty string, using "
 | 
					        logger.warning("EMAIL_GATEWAY_PATTERN is an empty string, using "
 | 
				
			||||||
@@ -302,9 +309,7 @@ def process_stream_message(to: str, message: message.Message) -> None:
 | 
				
			|||||||
        stream.name, stream.realm.string_id))
 | 
					        stream.name, stream.realm.string_id))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def process_missed_message(to: str, message: message.Message) -> None:
 | 
					def process_missed_message(to: str, message: message.Message) -> None:
 | 
				
			||||||
    mm_address = get_missed_message_address(to)
 | 
					    mm_address = get_usable_missed_message_address(to)
 | 
				
			||||||
    if not mm_address.is_usable():
 | 
					 | 
				
			||||||
        raise ZulipEmailForwardError("Missed message address out of uses.")
 | 
					 | 
				
			||||||
    mm_address.increment_times_used()
 | 
					    mm_address.increment_times_used()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    user_profile = mm_address.user_profile
 | 
					    user_profile = mm_address.user_profile
 | 
				
			||||||
@@ -371,9 +376,7 @@ def process_message(message: message.Message, rcpt_to: Optional[str]=None) -> No
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def validate_to_address(rcpt_to: str) -> None:
 | 
					def validate_to_address(rcpt_to: str) -> None:
 | 
				
			||||||
    if is_missed_message_address(rcpt_to):
 | 
					    if is_missed_message_address(rcpt_to):
 | 
				
			||||||
        mm_address = get_missed_message_address(rcpt_to)
 | 
					        get_usable_missed_message_address(rcpt_to)
 | 
				
			||||||
        if not mm_address.is_usable():
 | 
					 | 
				
			||||||
            raise ZulipEmailForwardError("Missed message address out of uses.")
 | 
					 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        decode_stream_email_address(rcpt_to)
 | 
					        decode_stream_email_address(rcpt_to)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user