devise-twilio-verify 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.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.github/workflows/build.yml +32 -0
- data/.gitignore +45 -0
- data/.rspec +2 -0
- data/Appraisals +22 -0
- data/CHANGELOG.md +15 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +20 -0
- data/README.md +266 -0
- data/Rakefile +29 -0
- data/app/assets/javascripts/devise_twilio_verify.js +12 -0
- data/app/assets/stylesheets/devise_twilio_verify.css +26 -0
- data/app/assets/stylesheets/devise_twilio_verify.sass +24 -0
- data/app/controllers/devise/devise_twilio_verify_controller.rb +183 -0
- data/app/controllers/devise_twilio_verify/passwords_controller.rb +30 -0
- data/app/services/twilio_verify_service.rb +66 -0
- data/app/views/devise/enable_twilio_verify.html.erb +7 -0
- data/app/views/devise/enable_twilio_verify.html.haml +5 -0
- data/app/views/devise/verify_twilio_verify.html.erb +16 -0
- data/app/views/devise/verify_twilio_verify.html.haml +13 -0
- data/app/views/devise/verify_twilio_verify_installation.html.erb +18 -0
- data/app/views/devise/verify_twilio_verify_installation.html.haml +16 -0
- data/config/locales/en.yml +27 -0
- data/config.ru +9 -0
- data/devise-twilio-verify.gemspec +49 -0
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails_5_2.gemfile +14 -0
- data/gemfiles/rails_6.gemfile +15 -0
- data/lib/devise-twilio-verify/controllers/helpers.rb +87 -0
- data/lib/devise-twilio-verify/controllers/view_helpers.rb +50 -0
- data/lib/devise-twilio-verify/hooks/twilio_verify_authenticatable.rb +7 -0
- data/lib/devise-twilio-verify/mapping.rb +16 -0
- data/lib/devise-twilio-verify/models/twilio_verify_authenticatable.rb +21 -0
- data/lib/devise-twilio-verify/models/twilio_verify_lockable.rb +43 -0
- data/lib/devise-twilio-verify/rails.rb +16 -0
- data/lib/devise-twilio-verify/routes.rb +21 -0
- data/lib/devise-twilio-verify/version.rb +5 -0
- data/lib/devise-twilio-verify.rb +32 -0
- data/lib/generators/active_record/devise_twilio_verify_generator.rb +23 -0
- data/lib/generators/active_record/templates/migration.rb +18 -0
- data/lib/generators/devise_twilio_verify/devise_twilio_verify_generator.rb +30 -0
- data/lib/generators/devise_twilio_verify/install_generator.rb +80 -0
- metadata +343 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: dd3ff424c38dccbccae443b6b21049282ddd5b780d544828da324bdd3806cfb9
|
4
|
+
data.tar.gz: e1cb5007f6acdd22dcd6f315a1dd30fcfd002f654842a014e36a4f6b2f87d4d6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cf276b167404e719c6a5e1a14eb295495a314febaeb1f2df037f1d1ee5c59870a94b2bee6d75661786c6ecaa783af453af6f3c94562d09c0bec89e4b8edacf68
|
7
|
+
data.tar.gz: 8d4949acb0d5aad351e8f5efbd3a91a528b700b240853cc1e84e24cf48a68e5f21ae6265ff93bc01288011ae11da72136cf1a513400cb21cbea24d9b80975ab0
|
data/.document
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
name: build
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
fail-fast: false
|
10
|
+
matrix:
|
11
|
+
ruby: [2.5, 2.6, 2.7, "3.0", 3.1, head]
|
12
|
+
gemfile: [rails_5_2, rails_6]
|
13
|
+
exclude:
|
14
|
+
- ruby: "3.0"
|
15
|
+
gemfile: rails_5_2
|
16
|
+
- ruby: 3.1
|
17
|
+
gemfile: rails_5_2
|
18
|
+
- ruby: head
|
19
|
+
gemfile: rails_5_2
|
20
|
+
continue-on-error: ${{ endsWith(matrix.ruby, 'head') }}
|
21
|
+
env:
|
22
|
+
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
|
23
|
+
steps:
|
24
|
+
- uses: actions/checkout@v2
|
25
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
26
|
+
uses: ruby/setup-ruby@v1
|
27
|
+
with:
|
28
|
+
ruby-version: ${{ matrix.ruby }}
|
29
|
+
- name: Install dependencies
|
30
|
+
run: bundle install
|
31
|
+
- name: Run tests
|
32
|
+
run: bundle exec rspec
|
data/.gitignore
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
## Specific to RubyMotion:
|
14
|
+
.dat*
|
15
|
+
.repl_history
|
16
|
+
build/
|
17
|
+
|
18
|
+
## Documentation cache and generated files:
|
19
|
+
/.yardoc/
|
20
|
+
/_yardoc/
|
21
|
+
/doc/
|
22
|
+
/rdoc/
|
23
|
+
|
24
|
+
## Environment normalization:
|
25
|
+
/.bundle/
|
26
|
+
/vendor/bundle
|
27
|
+
/lib/bundler/man/
|
28
|
+
|
29
|
+
# for a library or gem, you might want to ignore these files since the code is
|
30
|
+
# intended to run in multiple environments; otherwise, check them in:
|
31
|
+
Gemfile.lock
|
32
|
+
.ruby-version
|
33
|
+
.ruby-gemset
|
34
|
+
gemfiles/*.lock
|
35
|
+
|
36
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
37
|
+
.rvmrc
|
38
|
+
|
39
|
+
**/*.sqlite
|
40
|
+
**/*.log
|
41
|
+
|
42
|
+
initializers/twilio_verify.rb
|
43
|
+
.byebug_history
|
44
|
+
|
45
|
+
.rspec_status
|
data/.rspec
ADDED
data/Appraisals
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
appraise "rails-5-2" do
|
2
|
+
gem "rails", "~> 5.2.0"
|
3
|
+
gem "sqlite3", "~> 1.3.13"
|
4
|
+
|
5
|
+
group :development, :test do
|
6
|
+
gem 'factory_girl_rails', :require => false
|
7
|
+
gem 'rspec-rails', "~>4.0.0.beta3", :require => false
|
8
|
+
gem 'database_cleaner', :require => false
|
9
|
+
end
|
10
|
+
end if RUBY_VERSION.to_f < 3.0
|
11
|
+
|
12
|
+
appraise "rails-6" do
|
13
|
+
gem "rails", "~> 6.0.0"
|
14
|
+
gem "sqlite3", "~> 1.4"
|
15
|
+
gem "net-smtp"
|
16
|
+
|
17
|
+
group :development, :test do
|
18
|
+
gem 'factory_girl_rails', :require => false
|
19
|
+
gem 'rspec-rails', "~>4.0.0.beta3", :require => false
|
20
|
+
gem 'database_cleaner', :require => false
|
21
|
+
end
|
22
|
+
end if RUBY_VERSION.to_f >= 2.5
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
6
|
+
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [0.1.0] - 2023-03-15 Initial release
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
- Added devise 2FA support via Twilio Verify API
|
12
|
+
- Currently only support mobile phones with US country codes
|
13
|
+
- Removed Authy support
|
14
|
+
- Removed Onetouch support
|
15
|
+
- Removed ability to request a phone call
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2021 Jay Wolff
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,266 @@
|
|
1
|
+
# Migrate Authy to Twilio Verify API (for SMS and TOTP 2FA)
|
2
|
+
|
3
|
+
### This gem is meant to be a drop-in replacement for devise-authy in a Rails app (minus the following features)
|
4
|
+
- Currently only support mobile phones with US country codes
|
5
|
+
- Removed Onetouch support
|
6
|
+
- Removed ability to request a phone call
|
7
|
+
|
8
|
+
### Just follow the steps below to migrate:
|
9
|
+
- Swap out `devise-authy` in your Gemfile with `devise-twilio-verify` (ref this repo/branch for now)
|
10
|
+
- `gem 'devise-twilio-verify', git: 'https://github.com/jayywolff/twilio-verify-devise.git', branch: 'authy-to-twilio-verify'`
|
11
|
+
- Setup a Twilio Verify account
|
12
|
+
- Add env vars and/or Rails credentials for:
|
13
|
+
- `TWILIO_AUTH_TOKEN`
|
14
|
+
- `TWILIO_ACCOUNT_SID`
|
15
|
+
- `TWILIO_VERIFY_SERVICE_SID`
|
16
|
+
- Create/run a migration to rename and add the following columns
|
17
|
+
```ruby
|
18
|
+
class MigrateAuthyToTwilioVerify < ActiveRecord::Migration[6.1]
|
19
|
+
def change
|
20
|
+
rename_column :users, :authy_sms, :twilio_verify_sms
|
21
|
+
rename_column :users, :authy_enabled, :twilio_verify_enabled
|
22
|
+
rename_column :users, :last_sign_in_with_authy, :last_sign_in_with_twilio_verify
|
23
|
+
add_column :users, :twilio_totp_factor_sid, :string
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
```
|
28
|
+
- you can also delete the `users.authy_id` column if you choose
|
29
|
+
- Twilio Verify service sms will be sent to `users.mobile_phone`, so make sure you store the users 2fa phone number in this column, can make this field name dynamic in the future
|
30
|
+
- Do a project code wide search & replace of these terms
|
31
|
+
- `devise-authy` -> `devise-twilio-verify`
|
32
|
+
- `authy_` -> `twilio_verify_`
|
33
|
+
- `_authy` -> `_twilio_verify`
|
34
|
+
- `authy-` -> `twilio-verify-`
|
35
|
+
- `-authy` -> `-twilio-verify`
|
36
|
+
- `Authy` -> `TwilioVerify`
|
37
|
+
- Do a project file search & replace of any file with authy in the name (here's a few examples to replace)
|
38
|
+
- app/javascript/src/deviseTwilioVerify.js
|
39
|
+
- app/assets/stylesheets/devise_twilio_verify.scss
|
40
|
+
- config/locales/devise.twilio_verify.en.yml
|
41
|
+
|
42
|
+
# Twilio Verify Devise [](https://github.com/twilio/authy-devise/actions)
|
43
|
+
|
44
|
+
This is a [Devise](https://github.com/heartcombo/devise) extension to add [Two-Factor Authentication with Twilio Verify](https://www.twilio.com/docs/verify) to your Rails application.
|
45
|
+
|
46
|
+
Please visit the Twilio Docs for more information:
|
47
|
+
[Twilio Verify API](https://www.twilio.com/docs/verify)
|
48
|
+
* [Verify + Ruby (Rails) quickstart](https://www.twilio.com/docs/verify/quickstarts/ruby-rails)
|
49
|
+
* [Twilio Ruby helper library](https://www.twilio.com/docs/libraries/ruby)
|
50
|
+
* [Verify API reference](https://www.twilio.com/docs/verify/api)
|
51
|
+
|
52
|
+
|
53
|
+
* [Pre-requisites](#pre-requisites)
|
54
|
+
* [Demo](#demo)
|
55
|
+
* [Getting started](#getting-started)
|
56
|
+
* [Configuring Models](#configuring-models)
|
57
|
+
* [With the generator](#with-the-generator)
|
58
|
+
* [Manually](#manually)
|
59
|
+
* [Final steps](#final-steps)
|
60
|
+
* [Custom Views](#custom-views)
|
61
|
+
* [Custom Redirect Paths (eg. using modules)](#custom-redirect-paths-eg-using-modules)
|
62
|
+
* [I18n](#i18n)
|
63
|
+
* [Session variables](#session-variables)
|
64
|
+
* [Generic authenticator token support](#generic-authenticator-token-support)
|
65
|
+
* [Rails 5 CSRF protection](#rails-5-csrf-protection)
|
66
|
+
* [Running Tests](#running-tests)
|
67
|
+
* [Copyright](#copyright)
|
68
|
+
|
69
|
+
## Pre-requisites
|
70
|
+
|
71
|
+
To use the Twilio Verify API you will need a Twilio Account, [sign up for a free Twilio account here](https://www.twilio.com/try-twilio).
|
72
|
+
|
73
|
+
Create an [Twilio Verify Application in the Twilio console](https://www.twilio.com/console/authy/applications) and take note of the API key.
|
74
|
+
|
75
|
+
## Getting started
|
76
|
+
|
77
|
+
First get your Twilio Verify API key from [the Twilio console](https://www.twilio.com/console/authy/applications). We recommend you store your API key as an environment variable.
|
78
|
+
|
79
|
+
```bash
|
80
|
+
$ export TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN
|
81
|
+
$ export TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID
|
82
|
+
$ export TWILIO_VERIFY_SERVICE_SID=YOUR_TWILIO_VERIFY_SERVICE_SID
|
83
|
+
```
|
84
|
+
|
85
|
+
Next add the gem to your Gemfile:
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
gem 'devise'
|
89
|
+
gem 'devise-twilio-verify'
|
90
|
+
```
|
91
|
+
|
92
|
+
And then run `bundle install`
|
93
|
+
|
94
|
+
Add `Devise Twilio Verify` to your App:
|
95
|
+
|
96
|
+
rails g devise_twilio_verify:install
|
97
|
+
|
98
|
+
--haml: Generate the views in Haml
|
99
|
+
--sass: Generate the stylesheets in Sass
|
100
|
+
|
101
|
+
### Configuring Models
|
102
|
+
|
103
|
+
You can add devise_twilio_verify to your user model in two ways.
|
104
|
+
|
105
|
+
#### With the generator
|
106
|
+
|
107
|
+
Run the following command:
|
108
|
+
|
109
|
+
```bash
|
110
|
+
rails g devise_twilio_verify [MODEL_NAME]
|
111
|
+
```
|
112
|
+
|
113
|
+
To support account locking (recommended), you must add `:twilio_verify_lockable` to the `devise :twilio_verify_authenticatable, ...` configuration in your model as this is not yet supported by the generator.
|
114
|
+
|
115
|
+
#### Manually
|
116
|
+
|
117
|
+
Add `:twilio_verify_authenticatable` and `:twilio_verify_lockable` to the `devise` options in your Devise user model:
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
devise :twilio_verify_authenticatable, :twilio_verify_lockable, :database_authenticatable, :lockable
|
121
|
+
```
|
122
|
+
|
123
|
+
(Note, `:twilio_verify_lockable` is optional but recommended. It should be used with Devise's own `:lockable` module).
|
124
|
+
|
125
|
+
Also add a new migration. For example, if you are adding to the `User` model, use this migration:
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
class DeviseTwilioVerifyAddToUsers < ActiveRecord::Migration[6.0]
|
129
|
+
def self.up
|
130
|
+
change_table :users do |t|
|
131
|
+
t.string :authy_id
|
132
|
+
t.datetime :last_sign_in_with_twilio_verify
|
133
|
+
t.boolean :twilio_verify_enabled, :default => false
|
134
|
+
end
|
135
|
+
|
136
|
+
add_index :users, :authy_id
|
137
|
+
end
|
138
|
+
|
139
|
+
def self.down
|
140
|
+
change_table :users do |t|
|
141
|
+
t.remove :authy_id, :last_sign_in_with_twilio_verify, :twilio_verify_enabled
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
```
|
146
|
+
|
147
|
+
#### Final steps
|
148
|
+
|
149
|
+
For either method above, run the migrations:
|
150
|
+
|
151
|
+
```bash
|
152
|
+
rake db:migrate
|
153
|
+
```
|
154
|
+
|
155
|
+
**[Optional]** Update the default routes to point to something like:
|
156
|
+
|
157
|
+
```ruby
|
158
|
+
devise_for :users, :path_names => {
|
159
|
+
:verify_twilio_verify => "/verify-token",
|
160
|
+
:enable_twilio_verify => "/enable-two-factor",
|
161
|
+
:verify_twilio_verify_installation => "/verify-installation"
|
162
|
+
}
|
163
|
+
```
|
164
|
+
|
165
|
+
Now whenever a user wants to enable two-factor authentication they can go to:
|
166
|
+
|
167
|
+
http://your-app/users/enable-two-factor
|
168
|
+
|
169
|
+
And when the user logs in they will be redirected to:
|
170
|
+
|
171
|
+
http://your-app/users/verify-token
|
172
|
+
|
173
|
+
## Custom Views
|
174
|
+
|
175
|
+
If you want to customise your views, you can modify the files that are located at:
|
176
|
+
|
177
|
+
app/views/devise/devise_twilio_verify/enable_twilio_verify.html.erb
|
178
|
+
app/views/devise/devise_twilio_verify/verify_twilio_verify.html.erb
|
179
|
+
app/views/devise/devise_twilio_verify/verify_twilio_verify_installation.html.erb
|
180
|
+
|
181
|
+
## Custom Redirect Paths (eg. using modules)
|
182
|
+
|
183
|
+
If you want to customise the redirects you can override them within your own controller like this:
|
184
|
+
|
185
|
+
```ruby
|
186
|
+
class MyCustomModule::DeviseTwilioVerifyController < Devise::DeviseTwilioVerifyController
|
187
|
+
|
188
|
+
protected
|
189
|
+
def after_twilio_verify_enabled_path_for(resource)
|
190
|
+
my_own_path
|
191
|
+
end
|
192
|
+
|
193
|
+
def after_twilio_verify_verified_path_for(resource)
|
194
|
+
my_own_path
|
195
|
+
end
|
196
|
+
|
197
|
+
def after_twilio_verify_disabled_path_for(resource)
|
198
|
+
my_own_path
|
199
|
+
end
|
200
|
+
|
201
|
+
def invalid_resource_path
|
202
|
+
my_own_path
|
203
|
+
end
|
204
|
+
end
|
205
|
+
```
|
206
|
+
|
207
|
+
And tell the router to use this controller
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
devise_for :users, controllers: {devise_twilio_verify: 'my_custom_module/devise_twilio_verify'}
|
211
|
+
```
|
212
|
+
|
213
|
+
## I18n
|
214
|
+
|
215
|
+
The install generator also copies a `Devise Twilio Verify` i18n file which you can find at:
|
216
|
+
|
217
|
+
config/locales/devise.twilio_verify.en.yml
|
218
|
+
|
219
|
+
## Session variables
|
220
|
+
|
221
|
+
If you want to know if the user is signed in using Two-Factor authentication,
|
222
|
+
you can use the following session variable:
|
223
|
+
|
224
|
+
```ruby
|
225
|
+
session["#{resource_name}_twilio_verify_token_checked"]
|
226
|
+
|
227
|
+
# Eg.
|
228
|
+
session["user_twilio_verify_token_checked"]
|
229
|
+
```
|
230
|
+
|
231
|
+
## Generic authenticator token support
|
232
|
+
|
233
|
+
Twilio Verify supports other authenticator apps by providing a QR code that your users can scan.
|
234
|
+
|
235
|
+
> **To use this feature, you need to enable it in your [Twilio Console](https://www.twilio.com/console/authy/applications)**
|
236
|
+
|
237
|
+
Once you have enabled generic authenticator tokens, you can enable this in devise-twilio-verify by modifying the Devise config file `config/initializers/devise.rb` and adding the configuration:
|
238
|
+
|
239
|
+
```
|
240
|
+
config.twilio_verify_enable_qr_code = true
|
241
|
+
```
|
242
|
+
|
243
|
+
This will display a QR code on the verification screen (you still need to take a user's phone number and country code). If you have implemented your own views, the QR code URL is available on the verification page as `@twilio_verify_qr_code`.
|
244
|
+
|
245
|
+
## Rails 5 CSRF protection
|
246
|
+
|
247
|
+
In Rails 5 `protect_from_forgery` is no longer prepended to the `before_action` chain. If you call `authenticate_user` before `protect_from_forgery` your request will result in a "Can't verify CSRF token authenticity" error.
|
248
|
+
|
249
|
+
To remedy this, add `prepend: true` to your `protect_from_forgery` call, like in this example from the [Twilio Verify Devise demo app](https://github.com/twilio/authy-devise-demo):
|
250
|
+
|
251
|
+
```ruby
|
252
|
+
class ApplicationController < ActionController::Base
|
253
|
+
protect_from_forgery with: :exception, prepend: true
|
254
|
+
end
|
255
|
+
```
|
256
|
+
|
257
|
+
## Running Tests
|
258
|
+
|
259
|
+
Run the following command:
|
260
|
+
|
261
|
+
```bash
|
262
|
+
$ bundle exec rspec
|
263
|
+
```
|
264
|
+
|
265
|
+
## Copyright
|
266
|
+
See LICENSE.txt for further details.
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
require 'bundler/gem_tasks'
|
6
|
+
begin
|
7
|
+
Bundler.setup(:default, :development)
|
8
|
+
rescue Bundler::BundlerError => e
|
9
|
+
$stderr.puts e.message
|
10
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
11
|
+
exit e.status_code
|
12
|
+
end
|
13
|
+
require 'rake'
|
14
|
+
|
15
|
+
require 'rspec/core'
|
16
|
+
require 'rspec/core/rake_task'
|
17
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
18
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
19
|
+
end
|
20
|
+
|
21
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
22
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
23
|
+
spec.rcov = true
|
24
|
+
end
|
25
|
+
|
26
|
+
task :default => :spec
|
27
|
+
|
28
|
+
require 'yard'
|
29
|
+
YARD::Rake::YardocTask.new
|
@@ -0,0 +1,12 @@
|
|
1
|
+
$(document).ready(function() {
|
2
|
+
$('a#twilio-verify-request-sms-link').unbind('ajax:success');
|
3
|
+
$('a#twilio-verify-request-sms-link').bind('ajax:success', function(evt, data, status, xhr) {
|
4
|
+
alert(data.message);
|
5
|
+
});
|
6
|
+
|
7
|
+
$('a#twilio-verify-request-phone-call-link').unbind('ajax:success');
|
8
|
+
$('a#twilio-verify-request-phone-call-link').bind('ajax:success', function(evt, data, status, xhr) {
|
9
|
+
alert(data.message);
|
10
|
+
});
|
11
|
+
});
|
12
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
.devise-twilio-verify {
|
2
|
+
margin-left: auto;
|
3
|
+
margin-right: auto;
|
4
|
+
width: 350px;
|
5
|
+
}
|
6
|
+
|
7
|
+
.twilio-verify-form legend {
|
8
|
+
display: block;
|
9
|
+
width: 100%;
|
10
|
+
padding: 0;
|
11
|
+
margin-bottom: 20px;
|
12
|
+
font-size: 21px;
|
13
|
+
line-height: 40px;
|
14
|
+
color: #333;
|
15
|
+
border-bottom: 1px solid #E5E5E5;
|
16
|
+
}
|
17
|
+
|
18
|
+
.twilio-verify-form label,
|
19
|
+
.twilio-verify-form input,
|
20
|
+
.twilio-verify-form button {
|
21
|
+
font-size: 14px;
|
22
|
+
font-weight: normal;
|
23
|
+
line-height: 20px;
|
24
|
+
padding: 8px;
|
25
|
+
margin: 8px;
|
26
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
.devise-twilio-verify
|
2
|
+
margin-left: auto
|
3
|
+
margin-right: auto
|
4
|
+
width: 350px
|
5
|
+
|
6
|
+
.twilio-verify-form
|
7
|
+
legend
|
8
|
+
display: block
|
9
|
+
width: 100%
|
10
|
+
padding: 0
|
11
|
+
margin-bottom: 20px
|
12
|
+
font-size: 21px
|
13
|
+
line-height: 40px
|
14
|
+
color: #333
|
15
|
+
border-bottom: 1px solid #E5E5E5
|
16
|
+
|
17
|
+
label,
|
18
|
+
input,
|
19
|
+
button
|
20
|
+
font-size: 14px
|
21
|
+
font-weight: normal
|
22
|
+
line-height: 20px
|
23
|
+
padding: 8px
|
24
|
+
margin: 8px
|