2021-09-04 01:27:46 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Integrations
|
|
|
|
class Pushover < Integration
|
|
|
|
BASE_URI = 'https://api.pushover.net/1'
|
|
|
|
|
|
|
|
validates :api_key, :user_key, :priority, presence: true, if: :activated?
|
|
|
|
|
2022-08-13 15:12:31 +05:30
|
|
|
field :api_key,
|
|
|
|
type: 'password',
|
|
|
|
title: -> { _('API key') },
|
|
|
|
help: -> { s_('PushoverService|Enter your application key.') },
|
|
|
|
non_empty_password_title: -> { s_('ProjectService|Enter new API key') },
|
|
|
|
non_empty_password_help: -> { s_('ProjectService|Leave blank to use your current API key.') },
|
|
|
|
placeholder: '',
|
|
|
|
required: true
|
|
|
|
|
|
|
|
field :user_key,
|
|
|
|
type: 'password',
|
|
|
|
title: -> { _('User key') },
|
|
|
|
help: -> { s_('PushoverService|Enter your user key.') },
|
|
|
|
non_empty_password_title: -> { s_('PushoverService|Enter new user key') },
|
|
|
|
non_empty_password_help: -> { s_('PushoverService|Leave blank to use your current user key.') },
|
|
|
|
placeholder: '',
|
|
|
|
required: true
|
|
|
|
|
|
|
|
field :device,
|
|
|
|
title: -> { _('Devices (optional)') },
|
|
|
|
help: -> { s_('PushoverService|Leave blank for all active devices.') },
|
|
|
|
placeholder: ''
|
|
|
|
|
|
|
|
field :priority,
|
|
|
|
type: 'select',
|
|
|
|
required: true,
|
|
|
|
choices: -> do
|
|
|
|
[
|
|
|
|
[s_('PushoverService|Lowest priority'), -2],
|
|
|
|
[s_('PushoverService|Low priority'), -1],
|
|
|
|
[s_('PushoverService|Normal priority'), 0],
|
|
|
|
[s_('PushoverService|High priority'), 1]
|
|
|
|
]
|
|
|
|
end
|
|
|
|
|
|
|
|
field :sound,
|
|
|
|
type: 'select',
|
|
|
|
choices: -> do
|
|
|
|
[
|
|
|
|
['Device default sound', nil],
|
|
|
|
['Pushover (default)', 'pushover'],
|
|
|
|
%w(Bike bike),
|
|
|
|
%w(Bugle bugle),
|
|
|
|
['Cash Register', 'cashregister'],
|
|
|
|
%w(Classical classical),
|
|
|
|
%w(Cosmic cosmic),
|
|
|
|
%w(Falling falling),
|
|
|
|
%w(Gamelan gamelan),
|
|
|
|
%w(Incoming incoming),
|
|
|
|
%w(Intermission intermission),
|
|
|
|
%w(Magic magic),
|
|
|
|
%w(Mechanical mechanical),
|
|
|
|
['Piano Bar', 'pianobar'],
|
|
|
|
%w(Siren siren),
|
|
|
|
['Space Alarm', 'spacealarm'],
|
|
|
|
['Tug Boat', 'tugboat'],
|
|
|
|
['Alien Alarm (long)', 'alien'],
|
|
|
|
['Climb (long)', 'climb'],
|
|
|
|
['Persistent (long)', 'persistent'],
|
|
|
|
['Pushover Echo (long)', 'echo'],
|
|
|
|
['Up Down (long)', 'updown'],
|
|
|
|
['None (silent)', 'none']
|
|
|
|
]
|
|
|
|
end
|
|
|
|
|
2021-09-04 01:27:46 +05:30
|
|
|
def title
|
|
|
|
'Pushover'
|
|
|
|
end
|
|
|
|
|
|
|
|
def description
|
|
|
|
s_('PushoverService|Get real-time notifications on your device.')
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.to_param
|
|
|
|
'pushover'
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.supported_events
|
|
|
|
%w(push)
|
|
|
|
end
|
|
|
|
|
|
|
|
def execute(data)
|
|
|
|
return unless supported_events.include?(data[:object_kind])
|
|
|
|
|
|
|
|
ref = Gitlab::Git.ref_name(data[:ref])
|
|
|
|
before = data[:before]
|
|
|
|
after = data[:after]
|
|
|
|
|
|
|
|
message =
|
|
|
|
if Gitlab::Git.blank_ref?(before)
|
|
|
|
s_("PushoverService|%{user_name} pushed new branch \"%{ref}\".") % { user_name: data[:user_name], ref: ref }
|
|
|
|
elsif Gitlab::Git.blank_ref?(after)
|
|
|
|
s_("PushoverService|%{user_name} deleted branch \"%{ref}\".") % { user_name: data[:user_name], ref: ref }
|
|
|
|
else
|
|
|
|
s_("PushoverService|%{user_name} push to branch \"%{ref}\".") % { user_name: data[:user_name], ref: ref }
|
|
|
|
end
|
|
|
|
|
|
|
|
if data[:total_commits_count] > 0
|
|
|
|
message = [message, s_("PushoverService|Total commits count: %{total_commits_count}") % { total_commits_count: data[:total_commits_count] }].join("\n")
|
|
|
|
end
|
|
|
|
|
|
|
|
pushover_data = {
|
|
|
|
token: api_key,
|
|
|
|
user: user_key,
|
|
|
|
device: device,
|
|
|
|
priority: priority,
|
|
|
|
title: "#{project.full_name}",
|
|
|
|
message: message,
|
|
|
|
url: data[:project][:web_url],
|
|
|
|
url_title: s_("PushoverService|See project %{project_full_name}") % { project_full_name: project.full_name }
|
|
|
|
}
|
|
|
|
|
|
|
|
# Sound parameter MUST NOT be sent to API if not selected
|
|
|
|
if sound
|
|
|
|
pushover_data[:sound] = sound
|
|
|
|
end
|
|
|
|
|
|
|
|
Gitlab::HTTP.post('/messages.json', base_uri: BASE_URI, body: pushover_data)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|