Webhooks¶

Github¶

Handle GitHub webhooks.

class app.controller.webhook.github.core.GitHubWebhookHandler(db_facade, gh_face, config)¶

Encapsulate the handlers for all GitHub webhook events.

Parameters
__init__(db_facade, gh_face, config)¶

Give handlers access to the database.

Parameters
handle(request_body, xhub_signature, payload)¶

Verify and handle the webhook event.

Parameters
  • request_body (bytes) – Byte string of the request body

  • xhub_signature (str) – Hashed signature to validate

  • payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

Returns

appropriate ResponseTuple depending on the validity and type of webhook

verify_hash(request_body, xhub_signature)¶

Verify if a webhook event comes from GitHub.

Parameters
  • request_body (bytes) – Byte string of the request body

  • xhub_signature (str) – Hashed signature to validate

Returns

True if the signature is valid, False otherwise

Define the abstract base class for a GitHub event handler.

class app.controller.webhook.github.events.base.GitHubEventHandler(db_facade, gh_face, conf)¶

Define the properties and methods needed for a GitHub event handler.

Parameters
__init__(db_facade, gh_face, conf)¶

Give handler access to the database facade.

Parameters
abstract handle(payload)¶

Handle a GitHub event.

Parameters

payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

abstract property supported_action_list¶

Provide a list of all actions this handler can handle.

Return type

typing.List[str]

Handle GitHub membership events.

class app.controller.webhook.github.events.membership.MembershipEventHandler(db_facade, gh_face, conf)¶

Encapsulate the handler methods for GitHub membership events.

Parameters
handle(payload)¶

Handle the event where a user is added or removed from a team.

Parameters

payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

mem_added(github_id, selected_team, team_name, github_username)¶

Help membership function if payload action is added.

Parameters
  • github_id (str) –

  • selected_team (app.model.team.Team) –

  • team_name (str) –

  • github_username (str) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

mem_remove(github_id, selected_team, team_name)¶

Help membership function if payload action is removal.

Parameters
  • github_id (str) –

  • selected_team (app.model.team.Team) –

  • team_name (str) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

Handle GitHub organization events.

class app.controller.webhook.github.events.organization.OrganizationEventHandler(db_facade, gh_face, conf)¶

Encapsulate the handler methods for GitHub organization events.

Parameters
handle(payload)¶

Handle when a user is added, removed, or invited to an organization.

If the member is removed, they are removed as a user from rocket’s db if they have not been removed already.

If the member is added or invited, do nothing.

Parameters

payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

handle_added(github_id, github_username, organization)¶

Help organization function if payload action is added.

Parameters
  • github_id (str) –

  • github_username (str) –

  • organization (str) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

handle_invited(github_username, organization)¶

Help organization function if payload action is invited.

Parameters
  • github_username (str) –

  • organization (str) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

handle_remove(member_list, github_id, github_username)¶

Help organization function if payload action is remove.

Parameters
  • member_list (typing.List[app.model.user.User]) –

  • github_id (str) –

  • github_username (str) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

Handle GitHub team events.

class app.controller.webhook.github.events.team.TeamEventHandler(db_facade, gh_face, conf)¶

Encapsulate the handler methods for GitHub team events.

Parameters
handle(payload)¶

Handle team events of the organization.

This event is fired when a team is created, deleted, edited, or added or removed from a repository.

If a team is created, add or overwrite a team in rocket’s db.

If a team is deleted, delete the team from rocket’s db if it exists.

If a team is edited, overwrite the team’s fields or create the team if necessary.

If the team is added or removed from a repository, do nothing for now.

Parameters

payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

team_added_to_repository(github_id, github_team_name, payload)¶

Help team function if payload action is added_to_repository.

Parameters
  • github_id (str) –

  • github_team_name (str) –

  • payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

team_created(github_id, github_team_name, payload)¶

Help team function if payload action is created.

Parameters
  • github_id (str) –

  • github_team_name (str) –

  • payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

team_deleted(github_id, github_team_name, payload)¶

Help team function if payload action is deleted.

Parameters
  • github_id (str) –

  • github_team_name (str) –

  • payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

team_edited(github_id, github_team_name, payload)¶

Help team function if payload action is edited.

Parameters
  • github_id (str) –

  • github_team_name (str) –

  • payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

team_removed_from_repository(github_id, github_team_name, payload)¶

Help team function if payload action is removed_from_repository.

Parameters
  • github_id (str) –

  • github_team_name (str) –

  • payload (typing.Dict[str, typing.Any]) –

Return type

typing.Tuple[typing.Union[typing.Dict[str, typing.List[typing.Dict[str, typing.Any]]], str, typing.Dict[str, typing.Any]], int]

Slack¶

Handle Slack events.

class app.controller.webhook.slack.core.SlackEventsHandler(db_facade, bot)¶

Encapsulate the handlers for all Slack events.

Parameters
__init__(db_facade, bot)¶

Initialize all the required interfaces.

Parameters
handle_team_join(event_data)¶

Handle the event of a new user joining the workspace.

Parameters

event_data (typing.Dict[str, typing.Any]) – JSON event data