Class: Meta::Workplace::V3

Inherits:
Integration
  • Object
show all
Defined in:
app/models/pager_tree/integrations/meta/workplace/v3.rb

Constant Summary collapse

OPTIONS =
[
  {key: :incoming_enabled, type: :boolean, default: false},
  {key: :outgoing_enabled, type: :boolean, default: true},
  {key: :access_token, type: :string, default: nil},
  {key: :app_secret, type: :string, default: nil},
  {key: :group_id, type: :string, default: nil},
  {key: :outgoing_rules, type: :string, default: nil}
]

Instance Method Summary collapse

Instance Method Details

#adapter_actionObject



72
73
74
75
76
77
78
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 72

def adapter_action
  if option_incoming_enabled && adapter_incoming_request_params.dig("object") == "page" && _entry_changes&.dig("field") == "mention"
    :create
  else
    :other
  end
end

#adapter_incoming_can_defer?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 56

def adapter_incoming_can_defer?
  false
end

#adapter_outgoing_interest?(event_name) ⇒ Boolean

Returns:

  • (Boolean)


102
103
104
105
106
107
108
109
110
111
112
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 102

def adapter_outgoing_interest?(event_name)
  option_outgoing_enabled && [
    "alert_assigned",
    "alert_acknowledged",
    "alert_rejected",
    "alert_resolved",
    "alert_dropped",
    "alert_handoff",
    "comment_created"
  ].include?(event_name.to_s)
end

#adapter_process_createObject



88
89
90
91
92
93
94
95
96
97
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 88

def adapter_process_create
  # send back an ok
  post_id = _entry_changes&.dig("value", "post_id")
  _post_comment(post_id, "Ok") if post_id.present?

  Alert.new(
    title: _title,
    thirdparty_id: adapter_thirdparty_id
  )
end

#adapter_process_otherObject



99
100
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 99

def adapter_process_other
end

#adapter_process_outgoingObject



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 114

def adapter_process_outgoing
  event_type = adapter_outgoing_event.event_name.to_s
  message = _generate_message(event_type)

  return unless message.present?

  if event_type == "alert_assigned"
    _post_message(option_group_id, message)
  else
    post_id = _alert.meta["#{id}_meta_workplace_post_id"]

    if post_id.blank?
      outgoing_webhook_delivery_id = _alert.meta["#{id}_meta_workplace_outgoing_webhook_delivery_id"]
      outgoing_webhook_delivery = OutgoingWebhookDelivery.find_by(id: outgoing_webhook_delivery_id)
      post_id = begin
        JSON.parse(outgoing_webhook_delivery.responses.first.dig("body"))["id"]
      rescue
        nil
      end

      if post_id.present?
        _alert.meta["#{id}_meta_workplace_post_id"] = post_id
        _alert.save!
      end
    end

    _post_comment(post_id, message) if post_id.present?
  end
rescue => e
  Rails.logger.error "[Workplace] Error processing outgoing event: #{e.message}"
end

#adapter_response_incomingObject



80
81
82
83
84
85
86
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 80

def adapter_response_incoming
  if adapter_incoming_request_params["hub.mode"] == "subscribe"
    adapter_controller&.render(plain: adapter_incoming_request_params["hub.challenge"])
  else
    adapter_controller&.head(:ok)
  end
end

#adapter_should_block_incoming?(request) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 29

def adapter_should_block_incoming?(request)
  should_block = false

  if option_app_secret.present? && request.headers["x-hub-signature-256"].present?
    signature = request.headers["x-hub-signature-256"].delete_prefix("sha256=")
    data = request.body.read
    digest = OpenSSL::HMAC.hexdigest("SHA256", option_app_secret, data)
    should_block = signature != digest
  end

  should_block
end

#adapter_show_outgoing_webhook_delivery?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 52

def adapter_show_outgoing_webhook_delivery?
  true
end

#adapter_supports_description_template?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 64

def adapter_supports_description_template?
  false
end

#adapter_supports_incoming?Boolean

Returns:

  • (Boolean)


42
43
44
45
46
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 42

def adapter_supports_incoming?
  # TODO - change this to true once we are ready to support this. The code currently works, but we don't want to confuse our users.
  # Let's work with them to see what they want the functionality to look like
  false
end

#adapter_supports_outgoing?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 48

def adapter_supports_outgoing?
  true
end

#adapter_supports_title_template?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 60

def adapter_supports_title_template?
  false
end

#adapter_thirdparty_idObject



68
69
70
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 68

def adapter_thirdparty_id
  [_entry&.dig("id"), _entry&.dig("time")].compact_blank.join("-")
end

#endpointObject



25
26
27
# File 'app/models/pager_tree/integrations/meta/workplace/v3.rb', line 25

def endpoint
  super + "/g"
end