From 5bf21f5978b672d597e6fd9a85a9203036818d33 Mon Sep 17 00:00:00 2001 From: jasper Date: Mon, 18 Mar 2013 20:22:50 +0000 Subject: [PATCH] import agcaldav-0.2.5.3 ruby-agcaldav is yet another great Ruby client for CalDAV calendar and tasks. ok jeremy@ --- net/ruby-agcaldav/Makefile | 23 ++ net/ruby-agcaldav/distinfo | 2 + .../patches/patch-agcaldav_gemspec | 21 ++ .../patches/patch-lib_agcaldav_client_rb | 217 ++++++++++++++++++ .../patches/patch-lib_agcaldav_rb | 15 ++ net/ruby-agcaldav/pkg/DESCR | 2 + net/ruby-agcaldav/pkg/PLIST | 27 +++ 7 files changed, 307 insertions(+) create mode 100644 net/ruby-agcaldav/Makefile create mode 100644 net/ruby-agcaldav/distinfo create mode 100644 net/ruby-agcaldav/patches/patch-agcaldav_gemspec create mode 100644 net/ruby-agcaldav/patches/patch-lib_agcaldav_client_rb create mode 100644 net/ruby-agcaldav/patches/patch-lib_agcaldav_rb create mode 100644 net/ruby-agcaldav/pkg/DESCR create mode 100644 net/ruby-agcaldav/pkg/PLIST diff --git a/net/ruby-agcaldav/Makefile b/net/ruby-agcaldav/Makefile new file mode 100644 index 00000000000..6c0792992a7 --- /dev/null +++ b/net/ruby-agcaldav/Makefile @@ -0,0 +1,23 @@ +# $OpenBSD: Makefile,v 1.1.1.1 2013/03/18 20:22:50 jasper Exp $ + +COMMENT= Ruby client for CalDAV calendars + +DISTNAME= agcaldav-0.2.5.3 +CATEGORIES= net + +HOMEPAGE= https://github.com/agilastic/agcaldav + +# MIT +PERMIT_PACKAGE_CDROM= Yes + +MODULES= lang/ruby + +CONFIGURE_STYLE= gem + +BUILD_DEPENDS= ${RUN_DEPENDS} +RUN_DEPENDS= devel/ruby-uuid,${MODRUBY_FLAVOR} \ + net/ruby-net-http-digest_auth,${MODRUBY_FLAVOR} \ + textproc/ruby-builder,${MODRUBY_FLAVOR} \ + textproc/ruby-icalendar,${MODRUBY_FLAVOR} + +.include diff --git a/net/ruby-agcaldav/distinfo b/net/ruby-agcaldav/distinfo new file mode 100644 index 00000000000..02bf1f1e977 --- /dev/null +++ b/net/ruby-agcaldav/distinfo @@ -0,0 +1,2 @@ +SHA256 (agcaldav-0.2.5.3.gem) = pb1bejre7aIFwBKKvEpoINk09aUW6qbxeybc7GryepY= +SIZE (agcaldav-0.2.5.3.gem) = 12288 diff --git a/net/ruby-agcaldav/patches/patch-agcaldav_gemspec b/net/ruby-agcaldav/patches/patch-agcaldav_gemspec new file mode 100644 index 00000000000..5e20ee85c50 --- /dev/null +++ b/net/ruby-agcaldav/patches/patch-agcaldav_gemspec @@ -0,0 +1,21 @@ +$OpenBSD: patch-agcaldav_gemspec,v 1.1.1.1 2013/03/18 20:22:50 jasper Exp $ + +commit c13ea74da87d56c526f0187abe30e9d185f43374 +Author: Geoff Evans +Date: Wed Feb 20 11:01:50 2013 +1300 +Subject:Adds Digest Authentication + +--- agcaldav.gemspec.orig Thu Jan 1 01:00:00 1970 ++++ agcaldav.gemspec Mon Mar 18 10:09:33 2013 +@@ -18,8 +18,10 @@ Gem::Specification.new do |s| + s.add_runtime_dependency 'icalendar' + s.add_runtime_dependency 'uuid' + s.add_runtime_dependency 'builder' ++ s.add_runtime_dependency 'net-http-digest_auth' + s.add_development_dependency "rspec" +- s.add_development_dependency "fakeweb" ++ s.add_development_dependency "fakeweb" ++ + + + s.description = <<-DESC diff --git a/net/ruby-agcaldav/patches/patch-lib_agcaldav_client_rb b/net/ruby-agcaldav/patches/patch-lib_agcaldav_client_rb new file mode 100644 index 00000000000..f082ec9bc5b --- /dev/null +++ b/net/ruby-agcaldav/patches/patch-lib_agcaldav_client_rb @@ -0,0 +1,217 @@ +$OpenBSD: patch-lib_agcaldav_client_rb,v 1.1.1.1 2013/03/18 20:22:50 jasper Exp $ + +commit c13ea74da87d56c526f0187abe30e9d185f43374 +Author: Geoff Evans +Date: Wed Feb 20 11:01:50 2013 +1300 +Subject:Adds Digest Authentication + +commit 20687529a3c3554d0f51dabd81e06b172a96b940 +Author: Geoff Evans +Date: Wed Mar 6 12:34:46 2013 +1300 +Subject:Fix Digest to work over ssl. + +--- lib/agcaldav/client.rb.orig Thu Jan 1 01:00:00 1970 ++++ lib/agcaldav/client.rb Mon Mar 18 11:06:49 2013 +@@ -17,6 +17,7 @@ module AgCalDAV + @proxy_host = proxy_uri.host + @proxy_port = proxy_uri.port.to_i + end ++ + uri = URI(data[:uri]) + @host = uri.host + @port = uri.port.to_i +@@ -24,6 +25,24 @@ module AgCalDAV + @user = data[:user] + @password = data[:password] + @ssl = uri.scheme == 'https' ++ ++ unless data[:authtype].nil? ++ @authtype = data[:authtype] ++ if @authtype == 'digest' ++ ++ @digest_auth = Net::HTTP::DigestAuth.new ++ @duri = URI.parse data[:uri] ++ @duri.user = @user ++ @duri.password = @password ++ ++ elsif @authtype == 'basic' ++ #Don't Raise or do anything else ++ else ++ raise "Authentication Type Specified Is Not Valid. Please use basic or digest" ++ end ++ else ++ @authtype = 'basic' ++ end + end + + def __create_http +@@ -44,14 +63,22 @@ module AgCalDAV + events = [] + res = nil + __create_http.start {|http| ++ + req = Net::HTTP::Report.new(@url, initheader = {'Content-Type'=>'application/xml'} ) +- req.basic_auth @user, @password +- req.body = AgCalDAV::Request::ReportVEVENT.new(DateTime.parse(data[:start]).strftime("%Y%m%dT%H%M"), +- DateTime.parse(data[:end]).strftime("%Y%m%dT%H%M") ).to_xml ++ ++ if not @authtype == 'digest' ++ req.basic_auth @user, @password ++ else ++ req.add_field 'Authorization', digestauth('REPORT') ++ end ++ ++ req.body = AgCalDAV::Request::ReportVEVENT.new(DateTime.parse(data[:start]).utc.strftime("%Y%m%dT%H%M%S"), ++ DateTime.parse(data[:end]).utc.strftime("%Y%m%dT%H%M%S") ).to_xml + res = http.request(req) + } + errorhandling res + result = "" ++ + xml = REXML::Document.new(res.body) + REXML::XPath.each( xml, '//c:calendar-data/', {"c"=>"urn:ietf:params:xml:ns:caldav"} ){|c| result << c.text} + r = Icalendar.parse(result) +@@ -70,8 +97,12 @@ module AgCalDAV + def find_event uuid + res = nil + __create_http.start {|http| +- req = Net::HTTP::Get.new("#{@url}/#{uuid}.ics") +- req.basic_auth @user, @password ++ req = Net::HTTP::Get.new("#{@url}/#{uuid}.ics") ++ if not @authtype == 'digest' ++ req.basic_auth @user, @password ++ else ++ req.add_field 'Authorization', digestauth('GET') ++ end + res = http.request( req ) + } + errorhandling res +@@ -89,7 +120,11 @@ module AgCalDAV + res = nil + __create_http.start {|http| + req = Net::HTTP::Delete.new("#{@url}/#{uuid}.ics") +- req.basic_auth @user, @password ++ if not @authtype == 'digest' ++ req.basic_auth @user, @password ++ else ++ req.add_field 'Authorization', digestauth('DELETE') ++ end + res = http.request( req ) + } + errorhandling res +@@ -126,7 +161,11 @@ module AgCalDAV + __create_http.start { |http| + req = Net::HTTP::Put.new("#{@url}/#{uuid}.ics") + req['Content-Type'] = 'text/calendar' +- req.basic_auth @user, @password ++ if not @authtype == 'digest' ++ req.basic_auth @user, @password ++ else ++ req.add_field 'Authorization', digestauth('PUT') ++ end + req.body = cstring + res = http.request( req ) + } +@@ -159,7 +198,11 @@ module AgCalDAV + res = nil + __create_http.start {|http| + req = Net::HTTP::Get.new("#{@url}/#{uuid}.ics") +- req.basic_auth @user, @password ++ if not @authtype == 'digest' ++ req.basic_auth @user, @password ++ else ++ req.add_field 'Authorization', digestauth('GET') ++ end + res = http.request( req ) + } + errorhandling res +@@ -196,7 +239,11 @@ module AgCalDAV + __create_http.start { |http| + req = Net::HTTP::Put.new("#{@url}/#{uuid}.ics") + req['Content-Type'] = 'text/calendar' +- req.basic_auth @user, @password ++ if not @authtype == 'digest' ++ req.basic_auth @user, @password ++ else ++ req.add_field 'Authorization', digestauth('PUT') ++ end + req.body = cstring + res = http.request( req ) + } +@@ -210,7 +257,11 @@ module AgCalDAV + + __create_http.start {|http| + req = Net::HTTP::Report.new(@url, initheader = {'Content-Type'=>'application/xml'} ) +- req.basic_auth @user, @password ++ if not @authtype == 'digest' ++ req.basic_auth @user, @password ++ else ++ req.add_field 'Authorization', digestauth('REPORT') ++ end + req.body = AgCalDAV::Request::ReportVTODO.new.to_xml + res = http.request( req ) + } +@@ -219,29 +270,54 @@ module AgCalDAV + end + + private ++ ++ def digestauth method ++ ++ h = Net::HTTP.new @duri.host, @duri.port ++ ++ req = Net::HTTP::Get.new @duri.request_uri ++ ++ if @ssl ++ h.use_ssl = @ssl ++ h.verify_mode = OpenSSL::SSL::VERIFY_NONE ++ end ++ ++ res = h.request req ++ # res is a 401 response with a WWW-Authenticate header ++ ++ auth = @digest_auth.auth_header @duri, res['www-authenticate'], method ++ ++ return auth ++ end ++ + def entry_with_uuid_exists? uuid + res = nil ++ + __create_http.start {|http| + req = Net::HTTP::Get.new("#{@url}/#{uuid}.ics") +- req.basic_auth @user, @password ++ if not @authtype == 'digest' ++ req.basic_auth @user, @password ++ else ++ req.add_field 'Authorization', digestauth('GET') ++ end ++ + res = http.request( req ) +- } +- if res.body.empty? +- return false ++ ++ } ++ begin ++ Icalendar.parse(res.body) ++ rescue ++ return false + else +- return true ++ return true + end + end +- + def errorhandling response + raise AuthenticationError if response.code.to_i == 401 + raise NotExistError if response.code.to_i == 410 + raise APIError if response.code.to_i >= 500 + end + end +- +- +- + + + class AgCalDAVError < StandardError diff --git a/net/ruby-agcaldav/patches/patch-lib_agcaldav_rb b/net/ruby-agcaldav/patches/patch-lib_agcaldav_rb new file mode 100644 index 00000000000..fc842a88518 --- /dev/null +++ b/net/ruby-agcaldav/patches/patch-lib_agcaldav_rb @@ -0,0 +1,15 @@ +$OpenBSD: patch-lib_agcaldav_rb,v 1.1.1.1 2013/03/18 20:22:50 jasper Exp $ + +commit c13ea74da87d56c526f0187abe30e9d185f43374 +Author: Geoff Evans +Date: Wed Feb 20 11:01:50 2013 +1300 +Subject:Adds Digest Authentication + +--- lib/agcaldav.rb.orig Thu Jan 1 01:00:00 1970 ++++ lib/agcaldav.rb Mon Mar 18 10:09:33 2013 +@@ -1,4 +1,5 @@ + require 'net/https' ++require 'net/http/digest_auth' + require 'uuid' + require 'rexml/document' + require 'rexml/xpath' diff --git a/net/ruby-agcaldav/pkg/DESCR b/net/ruby-agcaldav/pkg/DESCR new file mode 100644 index 00000000000..e4bf15355a5 --- /dev/null +++ b/net/ruby-agcaldav/pkg/DESCR @@ -0,0 +1,2 @@ +ruby-agcaldav is yet another great Ruby client for CalDAV calendar and +tasks. diff --git a/net/ruby-agcaldav/pkg/PLIST b/net/ruby-agcaldav/pkg/PLIST new file mode 100644 index 00000000000..215587df832 --- /dev/null +++ b/net/ruby-agcaldav/pkg/PLIST @@ -0,0 +1,27 @@ +@comment $OpenBSD: PLIST,v 1.1.1.1 2013/03/18 20:22:50 jasper Exp $ +${GEM_LIB}/cache/${DISTNAME}.gem +${GEM_LIB}/gems/${DISTNAME}/ +${GEM_LIB}/gems/${DISTNAME}/.gitignore +${GEM_LIB}/gems/${DISTNAME}/.rspec +${GEM_LIB}/gems/${DISTNAME}/CHANGELOG.rdoc +${GEM_LIB}/gems/${DISTNAME}/README.md +${GEM_LIB}/gems/${DISTNAME}/Rakefile +${GEM_LIB}/gems/${DISTNAME}/agcaldav.gemspec +${GEM_LIB}/gems/${DISTNAME}/lib/ +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/ +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/client.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/event.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/filter.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/format.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/net.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/query.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/request.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/todo.rb +${GEM_LIB}/gems/${DISTNAME}/lib/agcaldav/version.rb +${GEM_LIB}/gems/${DISTNAME}/spec/ +${GEM_LIB}/gems/${DISTNAME}/spec/agcaldav/ +${GEM_LIB}/gems/${DISTNAME}/spec/agcaldav/client_spec.rb +${GEM_LIB}/gems/${DISTNAME}/spec/spec.opts +${GEM_LIB}/gems/${DISTNAME}/spec/spec_helper.rb +${GEM_LIB}/specifications/${DISTNAME}.gemspec