sp_2010 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ require 'domainatrix'
2
+
1
3
  module Sp2010
2
4
  class File
3
5
  attr_reader :xml
@@ -8,8 +10,8 @@ module Sp2010
8
10
 
9
11
  @name = dav_prop_at("./DAV:displayname").content
10
12
  @url = @xml.at_xpath("./DAV:href", webdav_namespace).content
11
- @uri = URI.parse(URI.escape(@url))
12
- @path = Pathname.new URI.unescape uri.path
13
+ @uri = Domainatrix.parse(@url)
14
+ @path = @uri.path
13
15
 
14
16
  @is_aspx = name[-5..-1] == ".aspx"
15
17
 
@@ -4,22 +4,63 @@ require 'json'
4
4
  require 'net/http'
5
5
  require 'uri'
6
6
  require 'file'
7
- require 'files_response'
7
+ require 'nokogiri'
8
+ require 'ntlm/http'
8
9
 
9
10
  module Sp2010
10
11
  class Client
11
12
  include HTTParty
12
13
 
13
- def self.get_files(host, user, password)
14
+ def self.get_files(options={})
15
+ host = options[:host]
16
+ domain = options[:domain]
17
+ user = options[:user]
18
+ password = options[:password]
14
19
  uri = URI.parse(host)
15
20
  http = Net::HTTP.new(uri.host, uri.port)
21
+
22
+ if (use_ssl?(host))
23
+ http.use_ssl = true
24
+ end
25
+
16
26
  req = Net::HTTP::Propfind.new(uri.request_uri)
17
- req.basic_auth(user, password)
27
+
28
+ if domain
29
+ req.ntlm_auth(user, domain, password)
30
+ else
31
+ req.basic_auth(user, password)
32
+ end
18
33
 
19
34
  res = http.request(req)
20
35
 
21
36
  FilesResponse.new(res)
22
37
  end
23
38
 
39
+ def self.use_ssl?(host)
40
+ x = URI.split(host)
41
+ false if x.count == 0
42
+ x[0] == "https"
43
+ end
44
+
45
+ end
46
+
47
+ class FilesResponse
48
+ attr :files, :error_message
49
+
50
+ def initialize(response)
51
+ if response.code == "401"
52
+ @error_message = "Unauthorized access. Check your username and password."
53
+ @files = []
54
+ elsif response.code == "207"
55
+ @error_message = ""
56
+ xml= ::Nokogiri::XML(response.body)
57
+ @files = (xml).xpath("./D:multistatus/D:response").map {|node| File.new(node) }
58
+ end
59
+ end
60
+
61
+ def valid?
62
+ @error_message.empty?
63
+ end
64
+
24
65
  end
25
66
  end
@@ -1,3 +1,3 @@
1
1
  module Sp2010
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -17,6 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.add_development_dependency "httparty"
18
18
  s.add_development_dependency "json"
19
19
  s.add_development_dependency "nokogiri"
20
+ s.add_development_dependency "ruby-ntlm"
21
+ s.add_development_dependency "domainatrix"
20
22
 
21
23
  s.files = `git ls-files`.split("\n")
22
24
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -4,7 +4,11 @@ describe "Get Files" do
4
4
 
5
5
  context "invalid login" do
6
6
  before(:each) do
7
- @result = Sp2010::Client.get_files(ENV["SP_2010_HOST"], ENV["SP_2010_USERNAME"], "badpassword")
7
+ @result = Sp2010::Client.get_files({
8
+ :host => ENV["SP_2010_HOST"],
9
+ :user => ENV["SP_2010_USERNAME"],
10
+ :password => "badpassword"
11
+ })
8
12
  end
9
13
  it { @result.should_not be_valid }
10
14
  it { @result.files.count.should == 0 }
@@ -12,10 +16,36 @@ describe "Get Files" do
12
16
 
13
17
  context "valid" do
14
18
  before(:each) do
15
- @result = Sp2010::Client.get_files(ENV["SP_2010_HOST"], ENV["SP_2010_USERNAME"], ENV["SP_2010_PASSWORD"])
19
+ @result = Sp2010::Client.get_files({
20
+ :host => ENV["SP_2010_HOST"],
21
+ :user => ENV["SP_2010_USERNAME"],
22
+ :password => ENV["SP_2010_PASSWORD"]
23
+ })
16
24
  end
17
- it { @result.should_not be_nil }
18
25
  it { @result.files.count.should > 0 }
19
26
  end
20
27
 
28
+ context "valid scenario 2" do
29
+ before(:each) do
30
+ @result = Sp2010::Client.get_files({
31
+ :host => ENV["SP_2010_HOST_2"],
32
+ :domain => ENV["SP_2010_DOMAIN_2"],
33
+ :user => ENV["SP_2010_USERNAME_2"],
34
+ :password => ENV["SP_2010_PASSWORD_2"]
35
+ })
36
+ end
37
+ it { @result.files.count.should > 0 }
38
+ end
39
+
40
+ context "valid scenario 3" do
41
+ before(:each) do
42
+ @result = Sp2010::Client.get_files({
43
+ :host => ENV["SP_2010_HOST_3"],
44
+ :user => ENV["SP_2010_USERNAME_3"],
45
+ :password => ENV["SP_2010_PASSWORD_3"]
46
+ })
47
+ end
48
+ it { @result.files.count.should > 0 }
49
+ end
50
+
21
51
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: sp_2010
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.5
5
+ version: 0.0.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jonathan Birkholz
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-11-28 00:00:00 Z
13
+ date: 2011-12-08 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -56,6 +56,28 @@ dependencies:
56
56
  version: "0"
57
57
  type: :development
58
58
  version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: ruby-ntlm
61
+ prerelease: false
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ type: :development
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: domainatrix
72
+ prerelease: false
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ type: :development
80
+ version_requirements: *id006
59
81
  description: Ruby gem for accessing files on Sharepoint 2010
60
82
  email:
61
83
  - rookieone@gmail.com
@@ -70,7 +92,6 @@ files:
70
92
  - Gemfile
71
93
  - Rakefile
72
94
  - lib/file.rb
73
- - lib/files_response.rb
74
95
  - lib/sp_2010.rb
75
96
  - lib/sp_2010/version.rb
76
97
  - sp_2010.gemspec
@@ -1,21 +0,0 @@
1
- module Sp2010
2
- class FilesResponse
3
- attr :files, :error_message
4
-
5
- def initialize(response)
6
- if response.code == "401"
7
- @error_message = "Unauthorized access. Check your username and password."
8
- @files = []
9
- elsif response.code == "207"
10
- @error_message = ""
11
- xml= Nokogiri::XML(response.body)
12
- @files = (xml).xpath("./D:multistatus/D:response").map {|node| File.new(node) }
13
- end
14
- end
15
-
16
- def valid?
17
- @error_message.empty?
18
- end
19
-
20
- end
21
- end