def process_read_command(card_serial, username_to_add):
    # type: (str, Optional[str]) -> None
    Repository.update_last_used(card_serial)

    if username_to_add:
        success = Repository.add_card(username_to_add, card_serial)
        respond_adder(success, username_to_add, card_serial)
        if success:
            Repository.log_message(
                'add',
                '{} ({})'.format(card_serial, username_to_add))
        else:
            Repository.log_message(
                'error',
                'Failed to add card: {}'.format(card_serial))

        return None

    if not Repository.is_authorized(card_serial):
        Repository.log_message('reject', str(card_serial))
        return None

    Repository.log_message(
        'open',
        '{} ({})'.format(card_serial, Repository.get_name(card_serial)))
    Door.open()
    return None