Exemplo n.º 1
0
def emaildig(event, **kwargs):
    """Email dig event handler for Slack webhook events
    """
    text = kwargs.get('text')
    command = kwargs.get('command')
    args = kwargs.get('args')

    if command == 'emaildig':
        if args:
            parts = re.sub(r'\<.*\|(.*)\>', r'\g<1>', args).split(' ')
            if len(parts) > 1:
                slack_text = 'Too many arguments. See usage. `%s`' % args
            else:
                email = parts[0]
                from htk.utils import htk_setting
                from htk.utils import resolve_method_dynamically
                find_person_by_email = resolve_method_dynamically(
                    htk_setting('HTK_EMAIL_PERSON_RESOLVER'))
                person = find_person_by_email(email)
                if person:
                    slack_text = 'The following information was retrieved for *%s*:\n%s' % (
                        email, person.as_slack())
                else:
                    slack_text = 'No information was found for email: %s' % email
        else:
            slack_text = 'Missing arguments. See usage.'
    else:
        slack_text = 'Illegal command.'

    channel = event['channel_id']

    payload = {
        'text': slack_text,
    }
    return payload
Exemplo n.º 2
0
def get_usage(event, command):
    event_handler_usages = get_event_handler_usages(event)
    from htk.utils.general import resolve_method_dynamically
    usage_fn_module_str = event_handler_usages.get(command)
    usage_fn = resolve_method_dynamically(usage_fn_module_str)
    if type(usage_fn) == type(lambda x: True):
        # <type 'function'>
        kwargs = {
            'event': event,
        }
        usage_dict = usage_fn(**kwargs)
    else:
        usage_dict = {
            'description': 'Not specified',
            'basic': 'htk: %s' % command,
            'examples': [],
        }
    if usage_dict['examples']:
        formatted_examples = '```%s```' % '\n'.join(
            '    %s' % example for example in usage_dict['examples'])
    else:
        formatted_examples = 'N/A'
    usage_dict['formatted_examples'] = formatted_examples
    usage = """*Usage*: %(description)s
`    %(basic)s`
*Examples*:
%(formatted_examples)s""" % usage_dict
    return usage
Exemplo n.º 3
0
def validate_webhook_request(request):
    """Validates a 321Forms webhook request

    Returns a JSON request body if it is valid
    Otherwise, returns None
    """
    webhook_data = json.loads(request.body)
    company_id = webhook_data.get('company', {}).get('id')

    headers = request.META
    expected_signature = headers.get('HTTP_X_ONBOARDING_SIGNATURE', '')

    hash_key_retriever = resolve_method_dynamically(
        htk_setting('HTK_321FORMS_WEBHOOK_HASH_KEY_RETRIEVER'))
    hash_key = hash_key_retriever(company_id)

    signature = base64.b64encode(
        hmac.new(bytes(hash_key), request.body,
                 digestmod=hashlib.sha1).digest())

    is_valid = signature == expected_signature
    if is_valid:
        webhook_data = webhook_data
    else:
        webhook_data = None

    return webhook_data
Exemplo n.º 4
0
def get_usage(event, command):
    event_handler_usages = get_event_handler_usages(event)
    from htk.utils.general import resolve_method_dynamically
    usage_fn_module_str = event_handler_usages.get(command)
    usage_fn = resolve_method_dynamically(usage_fn_module_str)
    if type(usage_fn) == type(lambda x: True):
        # <type 'function'>
        kwargs = {
            'event' : event,
        }
        usage_dict = usage_fn(**kwargs)
    else:
        usage_dict = {
            'description' : 'Not specified',
            'basic' : 'htk: %s' % command,
            'examples' : [],
        }
    if usage_dict['examples']:
        formatted_examples = '```%s```' % '\n'.join('    %s' % example for example in usage_dict['examples'])
    else:
        formatted_examples = 'N/A'
    usage_dict['formatted_examples'] = formatted_examples
    usage = """*Usage*: %(description)s
`    %(basic)s`
*Examples*:
%(formatted_examples)s""" % usage_dict
    return usage
Exemplo n.º 5
0
def emaildig(event, **kwargs):
    """Email dig event handler for Slack webhook events
    """
    text = kwargs.get('text')
    command = kwargs.get('command')
    args = kwargs.get('args')

    if command == 'emaildig':
        if args:
            parts = re.sub(r'\<.*\|(.*)\>', r'\g<1>', args).split(' ')
            if len(parts) > 1:
                slack_text= 'Too many arguments. See usage. `%s`' % args
            else:
                email = parts[0]
                from htk.utils import htk_setting
                from htk.utils import resolve_method_dynamically
                find_person_by_email = resolve_method_dynamically(htk_setting('HTK_EMAIL_PERSON_RESOLVER'))
                person = find_person_by_email(email)
                if person:
                    slack_text = 'The following information was retrieved for *%s*:\n%s' % (email, person.as_slack())
                else:
                    slack_text = 'No information was found for email: %s' % email
        else:
            slack_text = 'Missing arguments. See usage.'
    else:
        slack_text = 'Illegal command.'

    channel = event['channel_id']

    payload = {
        'text' : slack_text,
    }
    return payload
Exemplo n.º 6
0
def get_event_type(event):
    """Get event type from Slack webhook `event`
    """
    event_type_resolver_module_str = htk_setting('HTK_SLACK_EVENT_TYPE_RESOLVER')
    from htk.utils.general import resolve_method_dynamically
    event_type_resolver = resolve_method_dynamically(event_type_resolver_module_str)
    event_type = event_type_resolver(event)
    return event_type
Exemplo n.º 7
0
def get_event_type(event):
    """Get event type from Slack webhook `event`
    """
    event_type_resolver_module_str = htk_setting('HTK_SLACK_EVENT_TYPE_RESOLVER')
    from htk.utils.general import resolve_method_dynamically
    event_type_resolver = resolve_method_dynamically(event_type_resolver_module_str)
    event_type = event_type_resolver(event)
    return event_type
Exemplo n.º 8
0
def get_view_context(request):
    view_context_generator = htk_setting('HTK_PRELAUNCH_VIEW_CONTEXT_GENERATOR', '')
    method = resolve_method_dynamically(view_context_generator)
    if method:
        context = method(request)
    else:
        context = {}
    return context
Exemplo n.º 9
0
def get_view_context(request):
    view_context_generator = htk_setting('HTK_PRELAUNCH_VIEW_CONTEXT_GENERATOR', '')
    method = resolve_method_dynamically(view_context_generator)
    if method:
        context = method(request)
    else:
        context = {}
    return context
Exemplo n.º 10
0
def should_display_dismissible_alert(alert_name, alert_template, user, context, *args, **kwargs):
    result = False
    display_predicates = htk_setting('HTK_NOTIFICATIONS_DISMISSIBLE_ALERT_DISPLAY_PREDICATES')
    display_predicate_method = display_predicates.get(alert_name, None)
    if display_predicate_method:
        display_predicate = resolve_method_dynamically(display_predicate_method)
        if display_predicate:
            result = display_predicate(alert_name, alert_template, user, context, *args, **kwargs)
    return result
Exemplo n.º 11
0
def get_event_handler(event_type):
    event_handlers = htk_setting('HTK_ZUORA_EVENT_HANDLERS')
    event_type = event_type if event_type in event_handlers else 'default' if htk_setting('HTK_ZUORA_HANDLE_UNHANDLED_EVENTS') else None
    event_handler_module = event_handlers.get(event_type)
    if event_handler_module:
        event_handler = resolve_method_dynamically(event_handler_module)
    else:
        event_handler = None
    return event_handler
Exemplo n.º 12
0
def get_alert_key(alert_name):
    alert_key = None
    alert_key_generators = htk_setting('HTK_NOTIFICATIONS_DISMISSIBLE_ALERT_KEY_GENERATORS')
    generator_method = alert_key_generators.get(alert_name, None)
    if generator_method:
        generator = resolve_method_dynamically(generator_method)
        if generator:
            alert_key = generator(alert_name)
    return alert_key
Exemplo n.º 13
0
def get_event_handler(event_type):
    event_handlers = htk_setting('HTK_ZUORA_EVENT_HANDLERS')
    event_type = event_type if event_type in event_handlers else 'default' if htk_setting('HTK_ZUORA_HANDLE_UNHANDLED_EVENTS') else None
    event_handler_module = event_handlers.get(event_type)
    if event_handler_module:
        event_handler = resolve_method_dynamically(event_handler_module)
    else:
        event_handler = None
    return event_handler
Exemplo n.º 14
0
def get_event_handler_for_type(event_type):
    """Gets the event handler for `event_type`
    """
    event_handlers = htk_setting('HTK_SLACK_EVENT_HANDLERS')
    event_handler_module_str = event_handlers.get(event_type)
    if event_handler_module_str:
        from htk.utils.general import resolve_method_dynamically
        event_handler = resolve_method_dynamically(event_handler_module_str)
    else:
        event_handler = None
    return event_handler
Exemplo n.º 15
0
def get_event_handler(event):
    """Gets the event handler for a Stripe webhook event, if available
    """
    event_handlers = htk_setting('HTK_STRIPE_EVENT_HANDLERS', {})
    event_type = get_event_type(event)
    event_handler_module_str = event_handlers.get(event_type)
    if event_handler_module_str:
        from htk.utils.general import resolve_method_dynamically
        event_handler = resolve_method_dynamically(event_handler_module_str)
    else:
        event_handler = None
    return event_handler
Exemplo n.º 16
0
def get_event_handler(event):
    """Gets the event handler for a Stripe webhook event, if available
    """
    event_handlers = htk_setting('HTK_STRIPE_EVENT_HANDLERS', {})
    event_type = get_event_type(event)
    event_handler_module_str = event_handlers.get(event_type)
    if event_handler_module_str:
        from htk.utils.general import resolve_method_dynamically
        event_handler = resolve_method_dynamically(event_handler_module_str)
    else:
        event_handler = None
    return event_handler
Exemplo n.º 17
0
def handle_webhook_request(webhook_data):
    topic = webhook_data.get('topic', None)

    event_handlers = htk_setting('HTK_321FORMS_WEBHOOK_EVENT_HANDLERS')

    event_handler_method = event_handlers.get(topic)
    event_handler = resolve_method_dynamically(
        event_handler_method) if event_handler_method else None

    if event_handler:
        event_handler(webhook_data)
    else:
        pass
Exemplo n.º 18
0
def get_email_context():
    """Get the email context dictionary for templated emails
    """
    email_context_generator = htk_setting('HTK_EMAIL_CONTEXT_GENERATOR')
    context = {}
    if email_context_generator:
        method = resolve_method_dynamically(email_context_generator)
        if method:
            context = method()
        else:
            pass
    else:
        pass
    return context
Exemplo n.º 19
0
def get_email_context():
    """Get the email context dictionary for templated emails
    """
    email_context_generator = htk_setting('HTK_EMAIL_CONTEXT_GENERATOR')
    context = {}
    if email_context_generator:
        method = resolve_method_dynamically(email_context_generator)
        if method:
            context = method()
        else:
            pass
    else:
        pass
    return context
Exemplo n.º 20
0
def get_event_handler_for_type(event, event_type=None):
    """Gets the event handler for `event_type`

    `event` is the original Alexa skill webhook event
    """
    if event_type is None:
        event_type = get_event_type(event)
    event_handlers = get_event_handlers(event)
    event_handler_module_str = event_handlers.get(event_type)
    if event_handler_module_str:
        from htk.utils.general import resolve_method_dynamically
        event_handler = resolve_method_dynamically(event_handler_module_str)
    else:
        event_handler = None
    return event_handler
Exemplo n.º 21
0
def get_event_handler_for_type(event, event_type=None):
    """Gets the event handler for `event_type`

    `event` is the original Slack webhook event
    """
    if event_type is None:
        event_type = get_event_type(event)
    event_handlers = get_event_handlers(event)
    event_handler_module_str = event_handlers.get(event_type)
    if event_handler_module_str:
        from htk.utils.general import resolve_method_dynamically
        event_handler = resolve_method_dynamically(event_handler_module_str)
    else:
        event_handler = None
    return event_handler