messenger 0.0.3 → 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.
@@ -1,5 +1,5 @@
1
1
  ---
2
- :patch: 3
2
+ :patch: 0
3
3
  :major: 0
4
- :minor: 0
5
4
  :build:
5
+ :minor: 1
@@ -61,8 +61,8 @@ EOS
61
61
  opt :jabber_password, "The password for your jabber id", :type => String
62
62
 
63
63
  # CLI options
64
- opt :silent, "Don't print anything to stdout", :default => false
65
- opt :verbose, "Print verbose output on success", :default => false
64
+ # opt :silent, "Don't print anything to stdout", :default => false
65
+ # opt :verbose, "Print verbose output on success", :default => false
66
66
  end
67
67
 
68
68
  options.merge!(trollop_options.reject{|k,v| v.nil?})
@@ -20,6 +20,11 @@ module Messenger
20
20
  end
21
21
 
22
22
 
23
+ def self.valid_url?(url)
24
+ service_handler = handler(url)
25
+ service_handler.valid_url?(url)
26
+ end
27
+
23
28
  def self.send(url, message, options={})
24
29
  service_handler = handler(url)
25
30
  SystemTimer.timeout_after(options[:timeout] || 15) do
@@ -27,6 +32,11 @@ module Messenger
27
32
  end
28
33
  end
29
34
 
35
+ def self.obfuscate(url)
36
+ service_handler = handler(url)
37
+ service_handler.obfuscate(url)
38
+ end
39
+
30
40
 
31
41
  def self.protocol(url)
32
42
  # TODO: More services
@@ -5,14 +5,17 @@ module Messenger
5
5
 
6
6
  class Campfire
7
7
 
8
+ def self.valid_url?(url)
9
+ !!matcher(url)
10
+ rescue NoMethodError
11
+ false
12
+ end
13
+
8
14
  # URL format:
9
15
  # campfire://api-key:room-id@subdomain.campfirenow.com
10
16
  def self.send(url, body, options={})
11
- begin
12
- api_key, room, subdomain = url.match(/^campfire:\/\/([^:]+):([^@]+)@([^\.]+)/)[1,3]
13
- rescue
14
- raise URLError, "The URL provided is invalid"
15
- end
17
+ raise URLError, "The URL provided is invalid" unless valid_url?(url)
18
+ api_key, room, subdomain = matcher(url)
16
19
  response = HTTParty.post(
17
20
  "http://#{subdomain}.campfirenow.com/room/#{room}/speak.json",
18
21
  :basic_auth => { :username => api_key, :password => "x" },
@@ -22,9 +25,19 @@ module Messenger
22
25
  [success?(response), response]
23
26
  end
24
27
 
28
+ def self.obfuscate(url)
29
+ raise URLError, "The URL provided is invalid" unless valid_url?(url)
30
+ api_key, room, subdomain = matcher(url)
31
+ "campfire://xxxx:#{room}@#{subdomain}.campfirenow.com"
32
+ end
33
+
25
34
 
26
35
  private
27
36
 
37
+ def self.matcher(url)
38
+ url.match(/^campfire:\/\/([^:]+):([^@]+)@([^\.]+).campfirenow.com/)[1,3]
39
+ end
40
+
28
41
  def self.success?(response)
29
42
  case response.code
30
43
  when 200, 201: true
@@ -4,6 +4,10 @@ module Messenger
4
4
 
5
5
  class Email
6
6
 
7
+ def self.valid_url?(url)
8
+ !!url.match(/mailto:[^@]+@.*/)
9
+ end
10
+
7
11
  # URL format:
8
12
  # mailto:email@example.com
9
13
  #
@@ -11,6 +15,7 @@ module Messenger
11
15
  # :email_from => Who the email is from
12
16
  # :email_subject => The subject of the email
13
17
  def self.send(url, message, options={})
18
+ raise URLError, "The URL provided is invalid" unless valid_url?(url)
14
19
  mail = Mail.new do
15
20
  from options[:email_from]
16
21
  to url.sub(/mailto:/, '')
@@ -21,6 +26,11 @@ module Messenger
21
26
  [true, nil]
22
27
  end
23
28
 
29
+ def self.obfuscate(url)
30
+ raise URLError, "The URL provided is invalid" unless valid_url?(url)
31
+ url
32
+ end
33
+
24
34
  end
25
35
 
26
36
  end
@@ -4,6 +4,12 @@ module Messenger
4
4
 
5
5
  class Jabber
6
6
 
7
+ def self.valid_url?(url)
8
+ !!matcher(url)
9
+ rescue NoMethodError
10
+ false
11
+ end
12
+
7
13
  # URL format:
8
14
  # jabber://email@example.com/server_hostname
9
15
  #
@@ -13,6 +19,7 @@ module Messenger
13
19
  # :jabber_id => The jabber id of the sender
14
20
  # :jabber_password => The password of the sender
15
21
  def self.send(url, body, options={})
22
+ raise URLError, "The URL provided is invalid" unless valid_url?(url)
16
23
  recipient, host = url.sub("jabber://", "").split("/")[0,2]
17
24
  jabber = ::Jabber::Simple.new(options[:jabber_id], options[:jabber_password], host)
18
25
  jabber.deliver(recipient, body)
@@ -25,6 +32,18 @@ module Messenger
25
32
  [status, status ? nil : "Not yet authorized"]
26
33
  end
27
34
 
35
+ def self.obfuscate(url)
36
+ raise URLError, "The URL provided is invalid" unless valid_url?(url)
37
+ url
38
+ end
39
+
40
+
41
+ private
42
+
43
+ def self.matcher(url)
44
+ url.sub("jabber://", "").match("@")
45
+ end
46
+
28
47
  end
29
48
 
30
49
  end
@@ -4,15 +4,34 @@ module Messenger
4
4
 
5
5
  class Web
6
6
 
7
+ def self.valid_url?(url)
8
+ !!URI.parse(url)
9
+ rescue URI::InvalidURIError
10
+ false
11
+ end
12
+
7
13
  # URL format:
8
14
  # http://example.com
15
+ # https://user:pass@example.com
9
16
  #
10
17
  # The body of the message is posted as the body of the request, not the query.
11
18
  def self.send(url, body, options={})
19
+ raise URLError, "The URL provided is invalid" unless self.valid_url?(url)
12
20
  response = HTTParty.post(url, options.merge(:body => body))
13
21
  [success?(response), response]
14
22
  end
15
23
 
24
+ def self.obfuscate(url)
25
+ raise URLError, "The URL provided is invalid" unless self.valid_url?(url)
26
+ path = URI.parse(url)
27
+ if path.password
28
+ url.sub(/#{path.password}/, 'xxxx')
29
+ else
30
+ url
31
+ end
32
+ end
33
+
34
+
16
35
  private
17
36
 
18
37
  def self.success?(response)
@@ -13,21 +13,45 @@ module Messenger
13
13
 
14
14
  should "post a successful message" do
15
15
  HTTParty.expects(:post).with("http://subdomain.campfirenow.com/room/room/speak.json", :basic_auth => { :username => 'api', :password => 'x' }, :body => '{"message":{"body":"content"}}', :headers => { "Content-Type" => "application/json" }).returns(@success_response)
16
- result = Campfire.send("campfire://api:room@subdomain.campfirewnow.com", 'content')
16
+ result = Campfire.send("campfire://api:room@subdomain.campfirenow.com", 'content')
17
17
  assert_equal [true, @success_response], result
18
18
  end
19
19
 
20
20
  should "post a failed message" do
21
21
  HTTParty.expects(:post).with("http://subdomain.campfirenow.com/room/room/speak.json", :basic_auth => { :username => 'api', :password => 'x' }, :body => '{"message":{"body":"content"}}', :headers => { "Content-Type" => "application/json" }).returns(@failure_response)
22
- result = Campfire.send("campfire://api:room@subdomain.campfirewnow.com", 'content')
22
+ result = Campfire.send("campfire://api:room@subdomain.campfirenow.com", 'content')
23
23
  assert_equal [false, @failure_response], result
24
24
  end
25
25
 
26
- should "raise on invalid URL" do
27
- assert_raises Messenger::URLError do
28
- Campfire.send("campfire://missing_room@subdomain.campfirewnow.com", 'content')
26
+ should "raise when sending to an invalid URL" do
27
+ assert_raises URLError do
28
+ Campfire.send("campfire://missing_room@subdomain.campfirenow.com", 'content')
29
29
  end
30
30
  end
31
+
32
+ should "obfuscate the URL" do
33
+ assert_equal "campfire://xxxx:1234@example.campfirenow.com", Campfire.obfuscate("campfire://asdf1234:1234@example.campfirenow.com")
34
+ end
35
+
36
+ should "raise when obfuscating an invalid URL" do
37
+ assert_raises URLError do
38
+ Campfire.obfuscate("campfire://missing_room@subdomain.campfirenow.com")
39
+ end
40
+ end
41
+ end
42
+
43
+ context "Campfire URL validation" do
44
+ should "return true for good URLs" do
45
+ assert true, Campfire.valid_url?("campfire://api_key:room@subdomain.campfirenow.com")
46
+ end
47
+
48
+ should "return false for bad URLs" do
49
+ assert_equal false, Campfire.valid_url?("campfire://!")
50
+ assert_equal false, Campfire.valid_url?("campfire://api_key@subdomain.campfirenow.com")
51
+ assert_equal false, Campfire.valid_url?("campfire://:room@subdomain.campfirenow.com")
52
+ assert_equal false, Campfire.valid_url?("campfire://api_key:room@subdomain")
53
+ assert_equal false, Campfire.valid_url?("campfire://api_key:room@campfirenow.com")
54
+ end
31
55
  end
32
56
 
33
57
  end
@@ -20,6 +20,35 @@ module Messenger
20
20
  assert_equal "Test", Mail::TestMailer.deliveries.first.subject
21
21
  assert_equal "Test message", Mail::TestMailer.deliveries.first.body.to_s
22
22
  end
23
+
24
+ should "raise if trying to send to an invalid URL" do
25
+ assert_raises URLError do
26
+ Email.send("mailto:test", :body => "whatever", :email_from => "from_test@example.com", :email_subject => "Test")
27
+ end
28
+ end
29
+
30
+ should "obfuscate the URL" do
31
+ assert_equal "mailto:test@example.com", Email.obfuscate("mailto:test@example.com")
32
+ end
33
+
34
+ should "raise if trying obfuscate an invalid URL" do
35
+ assert_raises URLError do
36
+ Email.obfuscate("mailto:test")
37
+ end
38
+ end
39
+ end
40
+
41
+ context "Email notificaiton URL validation" do
42
+ should "return true for good URLs" do
43
+ assert true, Email.valid_url?("mailto:test@example.com")
44
+ end
45
+
46
+ should "return false for bad URLs" do
47
+ assert_equal false, Email.valid_url?("mailto:")
48
+ assert_equal false, Email.valid_url?("mailto:test")
49
+ assert_equal false, Email.valid_url?("mailto:@example.com")
50
+ assert_equal false, Email.valid_url?("mailto:example.com")
51
+ end
23
52
  end
24
53
 
25
54
  end
@@ -28,6 +28,34 @@ module Messenger
28
28
  result = Jabber.send("jabber://brandon@zencoder.com", "Test message", :jabber_id => "notifier@zencoder.com", :jabber_password => "asdfasdf")
29
29
  assert_equal [false, "Not yet authorized"], result
30
30
  end
31
+
32
+ should "raise when sending to an invalid URL" do
33
+ assert_raises URLError do
34
+ Jabber.send("jabber://", :jabber_id => "asdf", :jabber_password => "asdf")
35
+ end
36
+ end
37
+
38
+ should "obfuscate the URL" do
39
+ assert_equal "jabber://test@example.com", Jabber.obfuscate("jabber://test@example.com")
40
+ end
41
+
42
+ should "raise when obfuscating an invalid URL" do
43
+ assert_raises URLError do
44
+ Jabber.obfuscate("jabber://")
45
+ end
46
+ end
47
+ end
48
+
49
+ context "Jabber URL validation" do
50
+ should "return true for good URLs" do
51
+ assert true, Jabber.valid_url?("jabber://test@example.com")
52
+ end
53
+
54
+ should "return false for bad URLs" do
55
+ assert_equal false, Jabber.valid_url?("jabber://!")
56
+ assert_equal false, Jabber.valid_url?("jabber://test")
57
+ assert_equal false, Jabber.valid_url?("jabber://example.com")
58
+ end
31
59
  end
32
60
 
33
61
  end
@@ -4,18 +4,20 @@ module Messenger
4
4
 
5
5
  class MessengerTest < Test::Unit::TestCase
6
6
 
7
- context "Protocol/Handler" do
8
- should "determine the proper service" do
9
- assert_equal :email, Messenger.protocol("mailto:test@example.com")
10
- assert_equal :http, Messenger.protocol("http://example.com")
11
- assert_equal :http, Messenger.protocol("https://example.com")
12
- end
7
+ should "determine the proper protocol" do
8
+ assert_equal :email, Messenger.protocol("mailto:test@example.com")
9
+ assert_equal :http, Messenger.protocol("http://example.com")
10
+ assert_equal :http, Messenger.protocol("https://example.com")
11
+ assert_equal :jabber, Messenger.protocol("jabber://test@example.com")
12
+ assert_equal :campfire, Messenger.protocol("campfire://api_key:room_id@subdomain.campfirenow.com")
13
+ end
13
14
 
14
- should "determine the proper notification handler given a protocol" do
15
- assert_equal Email, Messenger.handler("mailto:test@example.com")
16
- assert_equal Web, Messenger.handler("http://example.com")
17
- assert_equal Web, Messenger.handler("https://example.com")
18
- end
15
+ should "determine the proper notification handler given a protocol" do
16
+ assert_equal Email, Messenger.handler("mailto:test@example.com")
17
+ assert_equal Web, Messenger.handler("http://example.com")
18
+ assert_equal Web, Messenger.handler("https://example.com")
19
+ assert_equal Jabber, Messenger.handler("jabber://test@example.com")
20
+ assert_equal Campfire, Messenger.handler("campfire://api_key:room_id@subdomain.campfirenow.com")
19
21
  end
20
22
 
21
23
  end
@@ -22,6 +22,40 @@ module Messenger
22
22
  result = Web.send("http://example.com", '{ "key": "value" }', :headers => { "Content-Type" => "application/json" })
23
23
  assert_equal [false, @failure_response], result
24
24
  end
25
+
26
+ should "raise if trying to send to an invalid URL" do
27
+ assert_raises URLError do
28
+ Web.send("http://!", :body => "whatever")
29
+ end
30
+ end
31
+
32
+ should "obfuscate the URL" do
33
+ assert_equal "http://example.com", Web.obfuscate("http://example.com")
34
+ assert_equal "http://user:xxxx@example.com", Web.obfuscate("http://user:secure_pass@example.com")
35
+ assert_equal "https://user:xxxx@example.com", Web.obfuscate("https://user:secure_pass@example.com")
36
+ end
37
+
38
+ should "raise if trying to obfuscate an invalid URL" do
39
+ assert_raises URLError do
40
+ Web.obfuscate("http://!")
41
+ end
42
+ end
43
+ end
44
+
45
+ context "Web notificaiton URL validation" do
46
+ should "return true for good URLs" do
47
+ assert true, Web.valid_url?("http://example.com")
48
+ assert true, Web.valid_url?("https://example.com")
49
+ assert true, Web.valid_url?("https://user@example.com")
50
+ assert true, Web.valid_url?("http://user:pass@example.com")
51
+ assert true, Web.valid_url?("https://user:#{URI.escape('!#$%^&*¢ç⎋')}@example.com")
52
+ end
53
+
54
+ should "return false for bad URLs" do
55
+ assert_equal false, Web.valid_url?("http://!")
56
+ assert_equal false, Web.valid_url?("http://")
57
+ assert_equal false, Web.valid_url?("https://")
58
+ end
25
59
  end
26
60
 
27
61
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: messenger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Arbini