openfire_api 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +9 -0
- data/Gemfile.lock +30 -0
- data/Rakefile +28 -0
- data/VERSION +1 -0
- data/lib/openfire_api.rb +6 -0
- data/lib/openfire_api/user_service.rb +77 -0
- data/openfire_api.gemspec +60 -0
- data/readme.rdoc +43 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/user_service_spec.rb +88 -0
- metadata +120 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.1.2)
|
5
|
+
fakeweb (1.3.0)
|
6
|
+
git (1.2.5)
|
7
|
+
jeweler (1.5.2)
|
8
|
+
bundler (~> 1.0.0)
|
9
|
+
git (>= 1.2.5)
|
10
|
+
rake
|
11
|
+
rake (0.9.2)
|
12
|
+
rspec (2.6.0)
|
13
|
+
rspec-core (~> 2.6.0)
|
14
|
+
rspec-expectations (~> 2.6.0)
|
15
|
+
rspec-mocks (~> 2.6.0)
|
16
|
+
rspec-core (2.6.4)
|
17
|
+
rspec-expectations (2.6.0)
|
18
|
+
diff-lcs (~> 1.1.2)
|
19
|
+
rspec-mocks (2.6.0)
|
20
|
+
shoulda (2.11.3)
|
21
|
+
|
22
|
+
PLATFORMS
|
23
|
+
ruby
|
24
|
+
|
25
|
+
DEPENDENCIES
|
26
|
+
bundler (~> 1.0.0)
|
27
|
+
fakeweb
|
28
|
+
jeweler (~> 1.5.2)
|
29
|
+
rspec (>= 2.6.0)
|
30
|
+
shoulda
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'rake'
|
11
|
+
|
12
|
+
require 'jeweler'
|
13
|
+
Jeweler::Tasks.new do |gem|
|
14
|
+
gem.name = "openfire_api"
|
15
|
+
gem.homepage = "http://github.com/paulasmuth/openfire_api"
|
16
|
+
gem.summary = %Q{ruby client for the openfire userservice api}
|
17
|
+
gem.description = %Q{ruby client for the openfire xmpp-server user_service api}
|
18
|
+
gem.email = "paul@23linesofcode.com"
|
19
|
+
gem.authors = ["Paul Asmuth"]
|
20
|
+
end
|
21
|
+
Jeweler::RubygemsDotOrgTasks.new
|
22
|
+
|
23
|
+
require 'rspec'
|
24
|
+
require 'rspec/core/rake_task'
|
25
|
+
desc "Run all examples"
|
26
|
+
task RSpec::Core::RakeTask.new('spec')
|
27
|
+
|
28
|
+
task :default => :spec
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/lib/openfire_api.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
class OpenfireApi::UserService
|
2
|
+
|
3
|
+
@@api_path = "plugins/userService/userservice"
|
4
|
+
@@api_exceptions = %w(UserServiceDisabled RequestNotAuthorised IllegalArgumentException UserNotFoundException UserAlreadyExistsException)
|
5
|
+
|
6
|
+
class HTTPException < StandardError; end
|
7
|
+
class InvalidResponseException < StandardError; end
|
8
|
+
class UserServiceDisabledException < StandardError; end
|
9
|
+
class RequestNotAuthorisedException < StandardError; end
|
10
|
+
class IllegalArgumentException < StandardError; end
|
11
|
+
class UserNotFoundException < StandardError; end
|
12
|
+
class UserAlreadyExistsException < StandardError; end
|
13
|
+
|
14
|
+
def initialize(options=Hash.new)
|
15
|
+
@options = { :path => @@api_path }.merge(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_user!(opts)
|
19
|
+
submit_request(opts.merge(:type => :add))
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete_user!(opts)
|
23
|
+
submit_request(opts.merge(:type => :delete))
|
24
|
+
end
|
25
|
+
|
26
|
+
def update_user!(opts)
|
27
|
+
submit_request(opts.merge(:type => :update))
|
28
|
+
end
|
29
|
+
|
30
|
+
def lock_user!(opts)
|
31
|
+
submit_request(opts.merge(:type => :disable))
|
32
|
+
end
|
33
|
+
|
34
|
+
def unlock_user!(opts)
|
35
|
+
submit_request(opts.merge(:type => :enable))
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def build_query(params)
|
41
|
+
"#{build_query_uri.to_s}?#{build_query_params(params)}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def build_query_uri
|
45
|
+
uri = URI.parse(@options[:url])
|
46
|
+
uri.path = File.join(uri.path, @@api_path)
|
47
|
+
uri
|
48
|
+
end
|
49
|
+
|
50
|
+
def build_query_params(params)
|
51
|
+
params.merge!(:secret => @options[:secret])
|
52
|
+
params.to_a.map{ |p| "#{p[0]}=#{p[1]}" }.join('&')
|
53
|
+
end
|
54
|
+
|
55
|
+
def submit_request(params)
|
56
|
+
data = submit_http_request(build_query_uri, build_query_params(params))
|
57
|
+
parse_response(data)
|
58
|
+
end
|
59
|
+
|
60
|
+
def submit_http_request(uri, params)
|
61
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
62
|
+
resp, data = http.get("#{uri.path}?#{params}")
|
63
|
+
return data
|
64
|
+
rescue Exception => e
|
65
|
+
raise HTTPException, e.to_s
|
66
|
+
end
|
67
|
+
|
68
|
+
def parse_response(data)
|
69
|
+
error = data.match(/<error>(.*)<\/error>/)
|
70
|
+
if error && @@api_exceptions.include?(error[1])
|
71
|
+
raise eval("#{error[1].gsub('Exception', '')}Exception")
|
72
|
+
end
|
73
|
+
raise InvalidResponseException unless data.match(/<result>ok<\/result>/)
|
74
|
+
return true
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{openfire_api}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Paul Asmuth"]
|
12
|
+
s.date = %q{2011-06-26}
|
13
|
+
s.description = %q{ruby client for the openfire xmpp-server user_service api}
|
14
|
+
s.email = %q{paul@23linesofcode.com}
|
15
|
+
s.files = [
|
16
|
+
"Gemfile",
|
17
|
+
"Gemfile.lock",
|
18
|
+
"Rakefile",
|
19
|
+
"VERSION",
|
20
|
+
"lib/openfire_api.rb",
|
21
|
+
"lib/openfire_api/user_service.rb",
|
22
|
+
"openfire_api.gemspec",
|
23
|
+
"readme.rdoc",
|
24
|
+
"spec/spec_helper.rb",
|
25
|
+
"spec/user_service_spec.rb"
|
26
|
+
]
|
27
|
+
s.homepage = %q{http://github.com/paulasmuth/openfire_api}
|
28
|
+
s.require_paths = ["lib"]
|
29
|
+
s.rubygems_version = %q{1.6.2}
|
30
|
+
s.summary = %q{ruby client for the openfire userservice api}
|
31
|
+
s.test_files = [
|
32
|
+
"spec/spec_helper.rb",
|
33
|
+
"spec/user_service_spec.rb"
|
34
|
+
]
|
35
|
+
|
36
|
+
if s.respond_to? :specification_version then
|
37
|
+
s.specification_version = 3
|
38
|
+
|
39
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
40
|
+
s.add_development_dependency(%q<rspec>, [">= 2.6.0"])
|
41
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
42
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
43
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
44
|
+
s.add_development_dependency(%q<fakeweb>, [">= 0"])
|
45
|
+
else
|
46
|
+
s.add_dependency(%q<rspec>, [">= 2.6.0"])
|
47
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
48
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
49
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
50
|
+
s.add_dependency(%q<fakeweb>, [">= 0"])
|
51
|
+
end
|
52
|
+
else
|
53
|
+
s.add_dependency(%q<rspec>, [">= 2.6.0"])
|
54
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
55
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
56
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
57
|
+
s.add_dependency(%q<fakeweb>, [">= 0"])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
data/readme.rdoc
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
= openfire_api
|
2
|
+
|
3
|
+
a ruby client for openfire's user_service api
|
4
|
+
|
5
|
+
{<img src="https://secure.travis-ci.org/paulasmuth/openfire_api.png" />}[http://travis-ci.org/paulasmuth/openfire_api]
|
6
|
+
|
7
|
+
|
8
|
+
== Installation
|
9
|
+
|
10
|
+
In your Gemfile
|
11
|
+
gem "mtgox-ruby", :git => "git://github.com/paulasmuth/openfire_api.git"
|
12
|
+
|
13
|
+
or
|
14
|
+
gem install git://github.com/paulasmuth/openfire_api.git
|
15
|
+
|
16
|
+
|
17
|
+
== Usage
|
18
|
+
|
19
|
+
create a new userservice object
|
20
|
+
|
21
|
+
api = OpenfireApi::UserService.new(:url => "http://localhost:9090/", :secret => "BIGSECRET")
|
22
|
+
|
23
|
+
register new user
|
24
|
+
|
25
|
+
api.add_user!(:username => "user", :password => "pass")
|
26
|
+
api.add_user!(:username => "user", :password => "pass", :name => ..., :email => ..., :groups => ...)
|
27
|
+
|
28
|
+
update existing user
|
29
|
+
|
30
|
+
api.update_user!(:username => "user", :password => "pass")
|
31
|
+
api.update_user!(:username => "user", :password => "pass", :name => ..., :email => ..., :groups => ...)
|
32
|
+
|
33
|
+
delete user
|
34
|
+
|
35
|
+
api.delete_user!(:username => "user")
|
36
|
+
|
37
|
+
lock user
|
38
|
+
|
39
|
+
api.lock_user!(:username => "user")
|
40
|
+
|
41
|
+
unlock user
|
42
|
+
|
43
|
+
api.unlock_user!(:username => "user")
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require ::File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe "User Service" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@user_service = OpenfireApi::UserService.new(:url => "http://fakehost.int:2323/", :secret => "bigsecret")
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should build query urls" do
|
10
|
+
url = @user_service.send(:build_query_uri)
|
11
|
+
url.to_s.should == "http://fakehost.int:2323/plugins/userService/userservice"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should build query params" do
|
15
|
+
params = @user_service.send(:build_query_params, :type => :add, :username => "user", :password => "pw")
|
16
|
+
params.should include("type=add")
|
17
|
+
params.should include("username=user")
|
18
|
+
params.should include("password=pw")
|
19
|
+
params.should include("secret=bigsecret")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should build queries" do
|
23
|
+
url = @user_service.send(:build_query, :type => :add, :username => "user", :password => "pw")
|
24
|
+
url.should include("http://fakehost.int:2323/plugins/userService/userservice?")
|
25
|
+
url.should include("type=add")
|
26
|
+
url.should include("type=add")
|
27
|
+
url.should include("username=user")
|
28
|
+
url.should include("password=pw")
|
29
|
+
url.should include("secret=bigsecret")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should submit requests" do
|
33
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=add&username=user&password=pw&secret=bigsecret", :body => "<result>ok</result>")
|
34
|
+
@user_service.send(:submit_request, :type => :add, :username => "user", :password => "pw").should == true
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should add users" do
|
38
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=add&username=user&password=pw&secret=bigsecret", :body => "<result>ok</result>")
|
39
|
+
@user_service.add_user!(:username => "user", :password => "pw").should == true
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should delete users" do
|
43
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=delete&username=user&secret=bigsecret", :body => "<result>ok</result>")
|
44
|
+
@user_service.delete_user!(:username => "user").should == true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should update users" do
|
48
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=update&username=user&password=pw&name=horst&secret=bigsecret", :body => "<result>ok</result>")
|
49
|
+
@user_service.update_user!(:username => "user", :password => "pw", :name => "horst").should == true
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should lock users" do
|
53
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=disable&username=user&secret=bigsecret", :body => "<result>ok</result>")
|
54
|
+
@user_service.lock_user!(:username => "user").should == true
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should unlock users" do
|
58
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?type=enable&username=user&secret=bigsecret", :body => "<result>ok</result>")
|
59
|
+
@user_service.unlock_user!(:username => "user").should == true
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should handle the error: user service disabled" do
|
63
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>UserServiceDisabled</error>")
|
64
|
+
lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(OpenfireApi::UserService::UserServiceDisabledException)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should handle the error: request not authorized" do
|
68
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>RequestNotAuthorised</error>")
|
69
|
+
lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(OpenfireApi::UserService::RequestNotAuthorisedException)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should handle the error: illegal argument" do
|
73
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>IllegalArgumentException</error>")
|
74
|
+
lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(OpenfireApi::UserService::IllegalArgumentException)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should handle the error: user not found" do
|
78
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>UserNotFoundException</error>")
|
79
|
+
lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(OpenfireApi::UserService::UserNotFoundException)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should handle the error: user already exists" do
|
83
|
+
FakeWeb.register_uri(:get, "http://fakehost.int:2323/plugins/userService/userservice?username=user1&type=disable&secret=bigsecret", :body => "<error>UserAlreadyExistsException</error>")
|
84
|
+
lambda{ @user_service.lock_user!(:username => "user1") }.should raise_error(OpenfireApi::UserService::UserAlreadyExistsException)
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: openfire_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Paul Asmuth
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-06-26 00:00:00 +02:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: rspec
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 2.6.0
|
25
|
+
type: :development
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: shoulda
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: bundler
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.0.0
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: jeweler
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ~>
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 1.5.2
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: fakeweb
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id005
|
71
|
+
description: ruby client for the openfire xmpp-server user_service api
|
72
|
+
email: paul@23linesofcode.com
|
73
|
+
executables: []
|
74
|
+
|
75
|
+
extensions: []
|
76
|
+
|
77
|
+
extra_rdoc_files: []
|
78
|
+
|
79
|
+
files:
|
80
|
+
- Gemfile
|
81
|
+
- Gemfile.lock
|
82
|
+
- Rakefile
|
83
|
+
- VERSION
|
84
|
+
- lib/openfire_api.rb
|
85
|
+
- lib/openfire_api/user_service.rb
|
86
|
+
- openfire_api.gemspec
|
87
|
+
- readme.rdoc
|
88
|
+
- spec/spec_helper.rb
|
89
|
+
- spec/user_service_spec.rb
|
90
|
+
has_rdoc: true
|
91
|
+
homepage: http://github.com/paulasmuth/openfire_api
|
92
|
+
licenses: []
|
93
|
+
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: "0"
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: "0"
|
111
|
+
requirements: []
|
112
|
+
|
113
|
+
rubyforge_project:
|
114
|
+
rubygems_version: 1.6.2
|
115
|
+
signing_key:
|
116
|
+
specification_version: 3
|
117
|
+
summary: ruby client for the openfire userservice api
|
118
|
+
test_files:
|
119
|
+
- spec/spec_helper.rb
|
120
|
+
- spec/user_service_spec.rb
|