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 +1 -1
- data/authy.gemspec +3 -2
- data/examples/demo.rb +83 -0
- data/lib/authy/api.rb +15 -7
- data/lib/authy/config.rb +1 -1
- data/lib/authy/response.rb +2 -1
- data/spec/authy/api_spec.rb +9 -0
- metadata +22 -21
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/authy.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "authy"
|
8
|
-
s.version = "0.0.
|
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-
|
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",
|
data/examples/demo.rb
ADDED
@@ -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
|
data/lib/authy/api.rb
CHANGED
@@ -20,22 +20,30 @@ module Authy
|
|
20
20
|
# options:
|
21
21
|
# :id user id
|
22
22
|
# :token authy token entered by the user
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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(
|
34
|
-
user_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
|
data/lib/authy/config.rb
CHANGED
data/lib/authy/response.rb
CHANGED
@@ -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
|
data/spec/authy/api_spec.rb
CHANGED
@@ -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
|
+
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-
|
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: &
|
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: *
|
25
|
+
version_requirements: *70093065684660
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: pry
|
28
|
-
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: *
|
36
|
+
version_requirements: *70093065683380
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
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: *
|
47
|
+
version_requirements: *70093065681480
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: yard
|
50
|
-
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: *
|
58
|
+
version_requirements: *70093065893320
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rdoc
|
61
|
-
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: *
|
69
|
+
version_requirements: *70093065886620
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: bundler
|
72
|
-
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: *
|
80
|
+
version_requirements: *70093065963440
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: jeweler
|
83
|
-
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: *
|
91
|
+
version_requirements: *70093066181600
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: simplecov
|
94
|
-
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: *
|
102
|
+
version_requirements: *70093066179060
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: reek
|
105
|
-
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: *
|
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:
|
157
|
+
hash: 3694718674118841425
|
157
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
159
|
none: false
|
159
160
|
requirements:
|