# https://system.netsuite.com/help/helpcenter/en_US/Output/Help/SuiteCloudCustomizationScriptingWebServices/SuiteTalkWebServices/login.html module NetSuite module Actions class Login # # REDACTED ORG NAME # # # # # REDACTED ROLE # # false # false # true # # # # REDACTED ROLE # # false # false # true # # def self.call(credentials) passport = NetSuite::Configuration.auth_header.dup passport['platformMsgs:passport'] ||= {} passport['platformMsgs:passport']['platformCore:email'] = credentials[:email] || '' passport['platformMsgs:passport']['platformCore:password'] = credentials[:password] || '' passport['platformMsgs:passport']['platformCore:role'] = credentials[:role] || '' if passport['platformMsgs:tokenPassport'] passport['platformMsgs:passport']['platformCore:account'] ||= passport['platformMsgs:tokenPassport']['platformCore:account'] end passport['platformMsgs:passport']['platformCore:account'] = credentials[:account] if !credentials[:account].nil? passport.delete('platformMsgs:tokenPassport') begin response = NetSuite::Configuration.connection(soap_header: {}).call :login, message: passport rescue Savon::SOAPFault => e error_details = e.to_hash[:fault] if error_details[:detail].has_key?(:invalid_credentials_fault) return NetSuite::Response.new( success: false, errors: [ NetSuite::Error.new( code: error_details[:detail][:invalid_credentials_fault][:code], message: error_details[:faultstring] )], body: error_details ) else raise(e) end end # include more data in body; leave it up to the user to pull the data they are looking for NetSuite::Response.new( success: response.to_hash[:login_response][:session_response][:status][:@is_success] == 'true', body: response.to_hash[:login_response][:session_response] ) end end end end