Commit 8566eebc by Oleksandr Barabash

handle_mars_report now returns user emails in the team

parent d623ff42
......@@ -6,7 +6,7 @@ import time
import traceback
from datetime import datetime
from http import HTTPStatus
from typing import Dict, Union, List
from typing import Dict, Union, List, Optional
import marshmallow_dataclass
from aiohttp import web
......@@ -83,7 +83,8 @@ ADAPTER.on_turn_error = on_error
def make_response(code: int, message: str,
data: Union[Dict[any, any], List[Dict[any, any]]] = None)\
data: Optional[Union[Dict[any, any],
List[Dict[any, any]]]] = None)\
-> Response:
""" Make an API json response """
body = dict(status=dict(code=code, message=message))
......@@ -334,13 +335,16 @@ async def v1_mars_report(request: Request) -> Response:
request_json = await request.json()
report = MarsReport.load(request_json, unknown=EXCLUDE)
response = await BOT.handle_mars_report(channel_id, report)
Log.d(TAG, f"v1_mars_report::notification: '{response}'")
return make_response(200, "OK", {"info": {"channelId": channel_id}})
emails = await BOT.handle_mars_report(channel_id, report)
Log.d(TAG, f"v1_mars_report::notification: '{emails}'")
data = None
if isinstance(emails, list) and len(emails) > 0:
data = {"data": emails}
return make_response(200, "OK", data)
except Exception:
Log.e(TAG, "v1_mars_report::error", exc_info=sys.exc_info())
return make_response(500, "Bad Request",
{"info": traceback.format_exc()})
# return make_response(500, "Bad Request",
# {"info": traceback.format_exc()})
return make_response(400, "Bad Request")
......
......@@ -115,6 +115,7 @@ class TeamsMessagingExtensionsActionPreviewBot(TeamsActivityHandler):
# 2. Add permissions for the recipients
# 3. Send info into the flow
logger.info("handle_mars_report")
future = Future()
# todo(s1z): Make this secure and not such ugly
stripped_channel_id = parse.unquote_plus(channel_id).split(";")[0]
......@@ -137,9 +138,17 @@ class TeamsMessagingExtensionsActionPreviewBot(TeamsActivityHandler):
client = GraphServiceClient(credentials=credential,
scopes=scopes)
res = await client.groups.by_group_id(group_id).members.get()
except Exception:
res = traceback.format_exc()
response = await client.groups.by_group_id(
group_id
).members.get()
emails = []
for member in response.value:
if member.mail is not None:
emails.append(member.mail)
future.set_result(emails)
except Exception as e:
future.set_exception(e)
try:
# send mail notifications!
......@@ -150,8 +159,9 @@ class TeamsMessagingExtensionsActionPreviewBot(TeamsActivityHandler):
except Exception:
raise
return await self.adapter.continue_conversation(reference, callback,
self.settings.app_id)
await self.adapter.continue_conversation(reference, callback,
self.settings.app_id)
return future
def send_message(self, pa_message: PAMessage) -> Future[ResourceResponse]:
""" Send message as a bot """
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment