Files
grecia/lib/sms_api.rb
Javi Martín dc87f9d69a Add Security/Open rubocop rule
The `open` method can be used to open files or URLs and it's deprecated
in Ruby 2.7. In this case, it's clear we're dealing with a URL, so we
can use `URI.parse`.

The code was a bit strange, since it returned a value and had a side
effect: opening the URL. I'm not sure about the intention of the code;
my best guess is we wanted to test the URL exists and was accessible
before returning it (and, if that's the case, IMHO the code should be a
bit more explicit in order to show the intention behind it), but it
could also be an unintended side effect which was there by accident.

Now the URL is no longer opened; if the URL isn't accessible, we'll find
out when trying to connect to it with the Savon client.
2021-11-16 12:37:32 +01:00

58 lines
1.4 KiB
Ruby

require "open-uri"
class SMSApi
attr_accessor :client
def initialize
@client = Savon.client(wsdl: url)
end
def url
return "" unless end_point_available?
URI.parse(Rails.application.secrets.sms_end_point).to_s
end
def authorization
Base64.encode64("#{Rails.application.secrets.sms_username}:#{Rails.application.secrets.sms_password}")
end
def sms_deliver(phone, code)
return stubbed_response unless end_point_available?
response = client.call(:enviar_sms_simples, message: request(phone, code))
success?(response)
end
def request(phone, code)
{ autorizacion: authorization,
destinatarios: { destinatario: phone },
texto_mensaje: "Clave para verificarte: #{code}. Gobierno Abierto",
solicita_notificacion: "All" }
end
def success?(response)
response.body[:respuesta_sms][:respuesta_servicio_externo][:texto_respuesta] == "Success"
end
def end_point_available?
Rails.env.staging? || Rails.env.preproduction? || Rails.env.production?
end
def stubbed_response
{
respuesta_sms: {
identificador_mensaje: "1234567",
fecha_respuesta: "Thu, 20 Aug 2015 16:28:05 +0200",
respuesta_pasarela: {
codigo_pasarela: "0000",
descripcion_pasarela: "Operación ejecutada correctamente."
},
respuesta_servicio_externo: {
codigo_respuesta: "1000",
texto_respuesta: "Success"
}
}
}
end
end