1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
# frozen_string_literal: true
module Integrations
class Pushover < Integration
include HasAvatar
BASE_URI = 'https://api.pushover.net/1'
validates :api_key, :user_key, :priority, presence: true, if: :activated?
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
def self.title
'Pushover'
end
def self.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.to_s,
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
|