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

- old
+ new

@@ -1,76 +1,186 @@ 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 + attr_accessor :api_url, :certificate, :key, :uw_ca_file + attr_reader :request + def initialize + @api_url = "https://iam-ws.u.washington.edu:7443/group_sws/v2" + @uw_ca_file = "#{ENV['HOME']}/uwca.crt" + end - def get_contact - @doc.xpath('//span[@class="contact"]').text - 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 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 + ## Membership-related methods: get, get effective, update, delete - # 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 + + # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Get+Members + def get_membership + end + + # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Get+Effective+Members + def get_effective_membership + end + + # http://wiki.cac.washington.edu/display/infra/Groups+WebService+Update+Members + def update_membership + end + + # http://wiki.cac.washington.edu/display/infra/Groups+WebService+Delete+Members + def delete_membership + end + + ## Member-related methods + + # http://wiki.cac.washington.edu/display/infra/Groups+WebService+Get+Member + def get_member + end + + # http://wiki.cac.washington.edu/display/infra/Groups+WebService+Get+Effective+Member + def get_effective_member + end + + # http://wiki.cac.washington.edu/display/infra/Groups+WebService+Add+Member + def add_member + end + + # http://wiki.cac.washington.edu/display/infra/Groups+WebService+Delete+Member + def delete_member + end + + + ## Group-related methods. View, create, update, delete. + + # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Get+Group + 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 + + + + # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Create+Group + def create_group(group,description=nil) + @group = group + description.nil? ? @description = group : @description = description + @uri = URI.parse("#{@api_url}/group/#{group}") + make_put_request + get_response_code == 200 ? true : false + end + + # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Update+Group + def update_group + end + + # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Delete+Group + def delete_group + end + + ## Search + + # http://wiki.cac.washington.edu/display/infra/Groups+WebService+Search + def search + end + + # http://wiki.cac.washington.edu/display/infra/Groups+WebService+Get+History + def get_history + end + + + private + 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 + + def make_put_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::Put.new(@uri.request_uri) + request.body = %Q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11/dtd"> + <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/> + </head> + <body> + <div class="group"> + <span class="description">#{@description}</span> + <ul class="names"><li class="name">#{@group}</li></ul> + <ul class="admins"> + <li class="admin">nikky</li> + </ul> + </div> + </body> + </html>} + @response = http.request(request) + end + puts "Response is: #{get_response_code}" + puts "Body is: #{@response.body}" + @response.body + end + + def get_response_code + @response.code.to_i + 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 + +end