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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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