authy 0.0.4 → 0.0.5

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "authy"
8
- s.version = "0.0.4"
8
+ s.version = "0.0.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Authy", "David A. Cuadrado"]
12
- s.date = "2012-05-21"
12
+ s.date = "2012-05-25"
13
13
  s.description = "Ruby library to access Authy services"
14
14
  s.email = "krawek@gmail.com"
15
15
  s.executables = ["authy-api-console"]
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  "VERSION",
29
29
  "authy.gemspec",
30
30
  "bin/authy-api-console",
31
+ "examples/demo.rb",
31
32
  "lib/authy.rb",
32
33
  "lib/authy/api.rb",
33
34
  "lib/authy/config.rb",
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'authy' # gem install authy
4
+ require 'sqlite3'
5
+ require 'active_record'
6
+ require 'highline/import' # gem install highline
7
+
8
+ Authy.api_url = "http://sandbox-api.authy.com"
9
+ Authy.api_key = "a1ffc30aa2d775c7ebebe45585727fe0"
10
+
11
+ # setup db
12
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => "db")
13
+ class AddUsers < ActiveRecord::Migration
14
+ def self.up
15
+ create_table :users do |t|
16
+ t.string :email
17
+ t.string :authy_id
18
+ end
19
+ end
20
+
21
+ def self.down
22
+ drop_table :users
23
+ end
24
+ end
25
+ AddUsers.migrate(:up) if !File.exist?("db")
26
+
27
+ class User < ActiveRecord::Base
28
+ validates_uniqueness_of :email
29
+ end
30
+
31
+
32
+ choose do |menu|
33
+ menu.prompt = "what do you want to do? "
34
+
35
+ menu.choice(:register) do
36
+ loop do
37
+ email = ask("email: ")
38
+ country_code = ask("country code: ")
39
+ cellphone = ask("cellphone: ")
40
+
41
+ if user = User.where(:email => email).first
42
+ puts "You're already registered with authy id: #{user.authy_id}"
43
+ break
44
+ end
45
+
46
+ authy_user = Authy::API.register_user(:email => email, :country_code => country_code, :cellphone => cellphone)
47
+ if authy_user.ok?
48
+ puts "User was registered. its authy id is #{authy_user.id}"
49
+ User.create!(:authy_id => authy_user.id, :email => email)
50
+ break
51
+ else
52
+ puts "Failed to register user: #{authy_user.errors}"
53
+ end
54
+ end
55
+ end
56
+
57
+ menu.choice(:login) do
58
+ email = ask("email: ")
59
+ token = ask("token: ")
60
+
61
+ user = User.where(:email => email).first
62
+ otp = Authy::API.verify(:id => user.authy_id, :token => token)
63
+
64
+ if otp.ok?
65
+ puts "Welcome back!"
66
+ else
67
+ puts "Wrong email or token :("
68
+ end
69
+ end
70
+
71
+ menu.choice(:request_token) do
72
+ email = ask("email: ")
73
+
74
+ user = User.where(:email => email).first
75
+ response = Authy::API.request_sms(:id => user.authy_id, :force => true)
76
+
77
+ if response.ok?
78
+ puts "Message was sent"
79
+ else
80
+ puts "Failed to send message: #{response.errors.inspect}"
81
+ end
82
+ end
83
+ end
@@ -20,22 +20,30 @@ module Authy
20
20
  # options:
21
21
  # :id user id
22
22
  # :token authy token entered by the user
23
- def self.verify(attributes)
24
- token = attributes[:token] || attributes['token']
25
- user_id = attributes[:id] || attributes['id']
26
- response = Typhoeus::Request.get("#{Authy.api_uri}/protected/json/verify/#{token}/#{user_id}", :params => {:api_key => Authy.api_key})
23
+ # :force (true|false) force to check even if the cellphone is not confirmed
24
+ #
25
+ def self.verify(params)
26
+ token = params.delete(:token) || params.delete('token')
27
+ user_id = params.delete(:id) || params.delete('id')
28
+
29
+ response = Typhoeus::Request.get("#{Authy.api_uri}/protected/json/verify/#{escape_for_url(token)}/#{escape_for_url(user_id)}", :params => params.merge({:api_key => Authy.api_key}))
27
30
 
28
31
  Authy::Response.new(response)
29
32
  end
30
33
 
31
34
  # options:
32
35
  # :id user id
33
- def self.request_sms(attributes)
34
- user_id = attributes[:id] || attributes['id']
36
+ def self.request_sms(params)
37
+ user_id = params.delete(:id) || params.delete('id')
35
38
 
36
- response = Typhoeus::Request.get("#{Authy.api_uri}/protected/json/sms/#{user_id}", :params => {:api_key => Authy.api_key})
39
+ response = Typhoeus::Request.get("#{Authy.api_uri}/protected/json/sms/#{escape_for_url(user_id)}", :params => params.merge({:api_key => Authy.api_key}))
37
40
 
38
41
  Authy::Response.new(response)
39
42
  end
43
+
44
+ private
45
+ def self.escape_for_url(field)
46
+ URI.escape(field.to_s.strip, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
47
+ end
40
48
  end
41
49
  end
@@ -11,7 +11,7 @@ module Authy
11
11
  def api_uri=(uri)
12
12
  @api_uri = uri
13
13
  end
14
- alias :api_url= :api_key=
14
+ alias :api_url= :api_uri=
15
15
 
16
16
  def api_uri
17
17
  @api_uri || "https://api.authy.com"
@@ -3,6 +3,7 @@ module Authy
3
3
  attr_reader :raw_response
4
4
  def initialize(response)
5
5
  @raw_response = response
6
+ @errors = {}
6
7
  parse_body
7
8
  end
8
9
 
@@ -27,7 +28,7 @@ module Authy
27
28
  end
28
29
 
29
30
  def errors
30
- self['errors'] || {}
31
+ self['errors'] || @errors
31
32
  end
32
33
 
33
34
  protected
@@ -20,6 +20,15 @@ describe "Authy::API" do
20
20
  response.body.should == 'valid token'
21
21
  end
22
22
 
23
+ it "should fail to validate a given token when force=true is given" do
24
+ user = Authy::API.register_user(:email => generate_email, :cellphone => generate_cellphone, :country_code => 1)
25
+ response = Authy::API.verify(:token => 'invalid_token', :id => user['id'], :force => true)
26
+
27
+ response.should be_kind_of(Authy::Response)
28
+ response.ok?.should be_false
29
+ response.body.should == 'invalid token'
30
+ end
31
+
23
32
  it "should return the error messages as a hash" do
24
33
  user = Authy::API.register_user(:email => generate_email, :cellphone => "abc-1234", :country_code => 1)
25
34
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-21 00:00:00.000000000 Z
13
+ date: 2012-05-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: typhoeus
17
- requirement: &70133947788640 !ruby/object:Gem::Requirement
17
+ requirement: &70093065684660 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - =
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.3.3
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70133947788640
25
+ version_requirements: *70093065684660
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: pry
28
- requirement: &70133947797280 !ruby/object:Gem::Requirement
28
+ requirement: &70093065683380 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - =
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.9.8.1
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70133947797280
36
+ version_requirements: *70093065683380
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &70133947829020 !ruby/object:Gem::Requirement
39
+ requirement: &70093065681480 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.8.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70133947829020
47
+ version_requirements: *70093065681480
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: yard
50
- requirement: &70133947843780 !ruby/object:Gem::Requirement
50
+ requirement: &70093065893320 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0.7'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70133947843780
58
+ version_requirements: *70093065893320
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rdoc
61
- requirement: &70133947850600 !ruby/object:Gem::Requirement
61
+ requirement: &70093065886620 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '3.12'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70133947850600
69
+ version_requirements: *70093065886620
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: bundler
72
- requirement: &70133947848220 !ruby/object:Gem::Requirement
72
+ requirement: &70093065963440 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 1.1.0
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70133947848220
80
+ version_requirements: *70093065963440
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: jeweler
83
- requirement: &70133947871480 !ruby/object:Gem::Requirement
83
+ requirement: &70093066181600 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 1.8.3
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70133947871480
91
+ version_requirements: *70093066181600
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: simplecov
94
- requirement: &70133947883720 !ruby/object:Gem::Requirement
94
+ requirement: &70093066179060 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *70133947883720
102
+ version_requirements: *70093066179060
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: reek
105
- requirement: &70133947909680 !ruby/object:Gem::Requirement
105
+ requirement: &70093066176760 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,7 +110,7 @@ dependencies:
110
110
  version: 1.2.8
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *70133947909680
113
+ version_requirements: *70093066176760
114
114
  description: Ruby library to access Authy services
115
115
  email: krawek@gmail.com
116
116
  executables:
@@ -130,6 +130,7 @@ files:
130
130
  - VERSION
131
131
  - authy.gemspec
132
132
  - bin/authy-api-console
133
+ - examples/demo.rb
133
134
  - lib/authy.rb
134
135
  - lib/authy/api.rb
135
136
  - lib/authy/config.rb
@@ -153,7 +154,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
154
  version: '0'
154
155
  segments:
155
156
  - 0
156
- hash: 600584506253976133
157
+ hash: 3694718674118841425
157
158
  required_rubygems_version: !ruby/object:Gem::Requirement
158
159
  none: false
159
160
  requirements: