X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=turbot_lambda%2Fturbot_lambda.py;h=d529c85ed625a1846d3dd7e72703de9ecc912676;hb=HEAD;hp=7d8ac4d917cbd46dd148296397ce51ac18e7e1e0;hpb=3f55f48bd1a209854aef278b7e70e663cda4ee9a;p=turbot diff --git a/turbot_lambda/turbot_lambda.py b/turbot_lambda/turbot_lambda.py index 7d8ac4d..d529c85 100644 --- a/turbot_lambda/turbot_lambda.py +++ b/turbot_lambda/turbot_lambda.py @@ -59,6 +59,7 @@ service = build('drive', 'v3', credentials=gsheets_creds, cache_discovery=False) +files = service.files() permissions = service.permissions() db = boto3.resource('dynamodb') @@ -66,7 +67,9 @@ db = boto3.resource('dynamodb') turb = SimpleNamespace() turb.slack_client = slack_client turb.db = db +turb.table = db.Table("turbot") turb.sheets = sheets +turb.files = files turb.permissions = permissions def error(message): @@ -86,12 +89,43 @@ def error(message): def turbot_lambda(event, context): """Top-level entry point for our lambda function. + This can handle either a REST API request from Slack, or an HTTP + request for teh Turbot web view + """ + + # First, determine if we've been invoked by Slack, (by presence of + # the X-Slack-Signature header) + headers = requests.structures.CaseInsensitiveDict(event['headers']) + + if 'X-Slack-Signature' in headers: + return turbot_slack_handler(event, context) + + # Otherwise, emit the Turbot web view + return turbot_web_view(event, context) + +def turbot_web_view(event, context): + """Turbot web view + + """ + + return { + 'statusCode': '200', + 'body': 'Hello, Lambda world.', + 'headers': { + 'Content-Type': 'application/text', + }, + } + +def turbot_slack_handler(event, context): + """Primary entry point for all Slack-initiated API requests to Turbot + This function first verifies that the request actually came from Slack, (by means of the SLACK_SIGNING_SECRET SSM parameter), and refuses to do anything if not. Then this defers to either turbot_event_handler or turbot_slash_command to do any real work. + """ headers = requests.structures.CaseInsensitiveDict(event['headers']) @@ -153,7 +187,7 @@ def turbot_interactive_or_slash_command(turb, event, context): """Handler for Slack interactive things (buttons, shortcuts, etc.) as well as slash commands. - This function simply makes a quiuck determination of what we're looking + This function simply makes a quick determination of what we're looking at and then defers to either turbot_interactive or turbot_slash_command.""" # Both interactives and slash commands have a urlencoded body @@ -198,7 +232,10 @@ def turbot_block_action(turb, payload): action = actions[0] atype = action['type'] - avalue = action['value'] + if 'value' in action: + avalue = action['value'] + else: + avalue = '*' if ( atype in turbot.interaction.actions