lib/groupr.rb in groupr-0.1.0 vs lib/groupr.rb in groupr-0.1.1

- old
+ new

@@ -1,72 +1,146 @@ +require 'net/http' +require 'nokogiri' class Groupr + attr_accessor :api_url, :certificate, :key, :uw_ca_file + def initialize + @api_url = "https://iam-ws.u.washington.edu:7443/group_sws/v2" + @uw_ca_file = "#{ENV['HOME']}/uwca.crt" + end + def make_get_request + options = { + use_ssl: true, + cert: OpenSSL::X509::Certificate.new(@certificate), + key: OpenSSL::PKey::RSA.new(@key), + ca_file: @uw_ca_file, + verify_mode: OpenSSL::SSL::VERIFY_PEER + } + Net::HTTP.start(@uri.host, @uri.port, options) do |http| + request = Net::HTTP::Get.new(@uri.request_uri) + @response = http.request(request) + end + @response.body + end + # This method returns nil if the http request doesn't return a 200. Maybe also support for not-authorized? + # def validate_response(response) + # nil if get_response_code != 200 + # response.body if get_response_code == 200 + # end + def get_response_code + @response.code.to_i + end + def group_exists?(group) + @uri = URI.parse("#{@api_url}/group/#{group}") + make_get_request + if get_response_code == 200 + true + else + false + end + end + + def view_group(group) + @uri = URI.parse("#{@api_url}/group/#{group}") + body = make_get_request + @doc = Nokogiri::HTML(body) + { + title: get_title, + description: get_description, + name: get_name, + regid: get_regid, + contact: get_contact + } + end + + def get_contact + @doc.xpath('//span[@class="contact"]').text + end + + def get_title + @doc.xpath('//span[@class="title"]').text + end + def get_description + @doc.xpath('//span[@class="description"]').text + end + def get_name + @doc.xpath('//span[@class="name"]').text + end + def get_regid + @doc.xpath('//span[@class="regid"]').text + end + + # def other thing to use + # http.ssl_timeout + # It throws TimeoutError exceptions for timeouts + # http.cert_store to for.... the CA? + # or maybe http.ca_file end \ No newline at end of file