From 3e9dc458bc3a194c5fe999f884f02d22e7b5cfbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Thu, 15 Oct 2015 13:43:15 +0200 Subject: [PATCH] adds manager_authenticator for UWeb Web Services --- lib/manager_authenticator.rb | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 lib/manager_authenticator.rb diff --git a/lib/manager_authenticator.rb b/lib/manager_authenticator.rb new file mode 100644 index 000000000..a5b9921cc --- /dev/null +++ b/lib/manager_authenticator.rb @@ -0,0 +1,44 @@ +class ManagerAuthenticator + + def initialize(data={}) + @manager = {login: data[:login], user_key: data[:user_key], date: data[:date]} + end + + def auth + return false unless [@manager[:login], @manager[:user_key], @manager[:date]].all? {|_| _.present?} + return @manager if manager_exists? && application_authorized? + false + end + + private + + def manager_exists? + response = client.call(:get_status_user_data, message: { ub: {user_key: @manager[:user_key], date: @manager[:date]} }).body + parsed_response = parser.parse((response[:get_status_user_data_response][:get_status_user_data_return])) + @manager[:login] == parsed_response["USUARIO"]["LOGIN"] + rescue + false + end + + def application_authorized? + response = client.call(:get_applications_user_list, message: { ub: {user_key: @manager[:user_key]} }).body + parsed_response = parser.parse((response[:get_applications_user_list_response][:get_applications_user_list_return])) + aplication_value = parsed_response["APLICACIONES"]["APLICACION"] + # aplication_value from UWEB can be an array of hashes or a hash + aplication_value.include?( {"CLAVE_APLICACION" => application_key}) || aplication_value["CLAVE_APLICACION"] == application_key + rescue + false + end + + def client + @client ||= Savon.client(wsdl: Rails.application.secrets.managers_url) + end + + def parser + @parser ||= Nori.new + end + + def application_key + Rails.application.secrets.managers_application_key.to_s + end +end \ No newline at end of file