lra_client 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +43 -15
- data/app/assets/javascripts/lra_client/lra.js +2 -0
- data/app/assets/stylesheets/lra_client/lra.css +4 -0
- data/app/controllers/lra_client/lra_controller.rb +46 -0
- data/app/helpers/lra_client/lra_helper.rb +4 -0
- data/app/models/lra_client/user.rb +14 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20161219184020_create_lra_client_users.rb +11 -0
- data/lib/lra_client/version.rb +1 -1
- data/lib/lra_client.rb +16 -1
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d375d12b47958dbd15927d665ccab0e38de53fac
|
4
|
+
data.tar.gz: 17b1d9835198ab8cc9d379a69e61ad691f00bc07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 150cf5b14c2988a67eb92e332e0463eac66ee23123cfdea0feb4f1c89ebdd49c8e52724f0ffb111e1de16038f254e2b9ffbebc2e1e88ff264e730efcb5840df4
|
7
|
+
data.tar.gz: 2def0facde50210e369b6bc2b96c55d5fd87bbaf56ce5a52c15b4abb367d1a6335c4a6e3c05a010da3a4f7092d5ffccd72466d93b977690b3af2b56925e68296
|
data/README.md
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
# LraClient
|
2
|
-
Short description and motivation.
|
3
|
-
|
4
|
-
## Usage
|
5
|
-
How to use my plugin.
|
6
|
-
|
7
1
|
## Installation
|
8
2
|
Add this line to your application's Gemfile:
|
9
3
|
|
@@ -11,18 +5,52 @@ Add this line to your application's Gemfile:
|
|
11
5
|
gem 'lra_client'
|
12
6
|
```
|
13
7
|
|
14
|
-
And then execute:
|
8
|
+
And then execute the following to setup:
|
15
9
|
```bash
|
16
|
-
$ bundle
|
10
|
+
$ bundle install
|
11
|
+
$ bundle exec rake lra_client:install:migrations
|
12
|
+
$ bundle exec rake db:migrate
|
17
13
|
```
|
18
14
|
|
19
|
-
|
20
|
-
```
|
21
|
-
|
15
|
+
To configure the client, add a new initializer to your project with the following:
|
16
|
+
```ruby
|
17
|
+
LraClient.app_id = [your app ID]
|
18
|
+
LraClient.key = '[your app key]'
|
19
|
+
LraClient.domain_namespace = 'https://my.website.com/[mountpoint]'
|
20
|
+
LraClient.login_completion_url = '[where to redirect after login attempt]'
|
22
21
|
```
|
23
22
|
|
24
|
-
|
25
|
-
|
23
|
+
Finally, mount the engine into your `config/routes.rb` file:
|
24
|
+
```ruby
|
25
|
+
mount LraClient::Engine, at: '[mountpoint]'
|
26
|
+
```
|
27
|
+
|
28
|
+
(A good example mountpoint for the above might be simply `/lra`)
|
29
|
+
|
30
|
+
## Usage
|
31
|
+
|
32
|
+
Assuming you have mounted the engine at `/lra`, direct your users to `/lra/login` in order to
|
33
|
+
start the login process. After a login attempt, your user will be redirected back to the endpoint
|
34
|
+
you have specified by `LraClient.login_completion_url`. If the login was successful, a record
|
35
|
+
in the `lra_client_users` table will have been created with some basic details. In addition,
|
36
|
+
two session variables will have been set to identify the user:
|
37
|
+
```ruby
|
38
|
+
session[:current_user_id] # the ID of a LraClient::User
|
39
|
+
session[:current_user_type] # always set to the string "LraClient::User"
|
40
|
+
```
|
41
|
+
|
42
|
+
At any point, you can validate that the current user has a valid LRA session by calling
|
43
|
+
`LraClient.validate_session(session)`. The `LraClient::User` object will be returned if
|
44
|
+
the session is valid, and `nil` otherwise. This can be used to restrict access to pages
|
45
|
+
by doing something similar to:
|
46
|
+
```ruby
|
47
|
+
before_filter :validate_session
|
48
|
+
|
49
|
+
def validate_session
|
50
|
+
@current_user = LraClient.validate_session
|
51
|
+
return true if @current_user.present?
|
52
|
+
redirect_to '/lra/login'
|
53
|
+
false
|
54
|
+
end
|
55
|
+
```
|
26
56
|
|
27
|
-
## License
|
28
|
-
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_dependency "lra_client/application_controller"
|
2
|
+
|
3
|
+
module LraClient
|
4
|
+
class LraController < ApplicationController
|
5
|
+
|
6
|
+
def login
|
7
|
+
result = send_post_request(
|
8
|
+
LraClient.request_challenge_url,
|
9
|
+
app_id: LraClient.app_id,
|
10
|
+
key: LraClient.key,
|
11
|
+
return_url: LraClient.return_url
|
12
|
+
)
|
13
|
+
|
14
|
+
redirect_to result['login_url']
|
15
|
+
end
|
16
|
+
|
17
|
+
def return
|
18
|
+
result = send_post_request(
|
19
|
+
LraClient.load_details_url,
|
20
|
+
app_id: LraClient.app_id,
|
21
|
+
key: LraClient.key,
|
22
|
+
answer: params[:answer]
|
23
|
+
)
|
24
|
+
|
25
|
+
if result['success']
|
26
|
+
user = LraClient::User.create_or_update_from_loft(result)
|
27
|
+
session[:current_user_id] = user.id
|
28
|
+
session[:current_user_type] = 'LraClient::User'
|
29
|
+
end
|
30
|
+
|
31
|
+
redirect_to LraClient.login_completion_url
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def send_post_request(url, data)
|
37
|
+
uri = URI.parse(url)
|
38
|
+
req = Net::HTTP::Post.new(uri.path)
|
39
|
+
req.form_data = data
|
40
|
+
con = Net::HTTP.new(uri.host, uri.port)
|
41
|
+
con.use_ssl = true
|
42
|
+
result = con.start { |https| https.request(req) }
|
43
|
+
JSON.parse(result.body)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module LraClient
|
2
|
+
class User < ApplicationRecord
|
3
|
+
def self.create_or_update_from_loft(params)
|
4
|
+
user = User.find_by(loft_id: params['id'])
|
5
|
+
user = User.new if user.nil?
|
6
|
+
user.loft_id = params['id']
|
7
|
+
user.name = params['name']
|
8
|
+
user.avatar = params['avatar']
|
9
|
+
user.email = params['email']
|
10
|
+
user.save!
|
11
|
+
user
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/config/routes.rb
CHANGED
data/lib/lra_client/version.rb
CHANGED
data/lib/lra_client.rb
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
require "lra_client/engine"
|
2
2
|
|
3
3
|
module LraClient
|
4
|
-
|
4
|
+
class << self
|
5
|
+
attr_accessor :app_id, :key, :domain_namespace, :login_completion_url
|
6
|
+
attr_accessor :request_challenge_url, :load_details_url
|
7
|
+
|
8
|
+
def return_url
|
9
|
+
self.domain_namespace + '/return'
|
10
|
+
end
|
11
|
+
|
12
|
+
def validate_session(session)
|
13
|
+
return nil if session[:current_user_type] != 'LraClient::User'
|
14
|
+
User::find_by(id: session[:current_user_id])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
self.request_challenge_url = 'https://lifemakesuslaugh.com/api/lra/request_challenge.json'
|
19
|
+
self.load_details_url = 'https://lifemakesuslaugh.com/api/lra/load_details.json'
|
5
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lra_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Caleb Simpson
|
@@ -56,14 +56,20 @@ files:
|
|
56
56
|
- Rakefile
|
57
57
|
- app/assets/config/lra_client_manifest.js
|
58
58
|
- app/assets/javascripts/lra_client/application.js
|
59
|
+
- app/assets/javascripts/lra_client/lra.js
|
59
60
|
- app/assets/stylesheets/lra_client/application.css
|
61
|
+
- app/assets/stylesheets/lra_client/lra.css
|
60
62
|
- app/controllers/lra_client/application_controller.rb
|
63
|
+
- app/controllers/lra_client/lra_controller.rb
|
61
64
|
- app/helpers/lra_client/application_helper.rb
|
65
|
+
- app/helpers/lra_client/lra_helper.rb
|
62
66
|
- app/jobs/lra_client/application_job.rb
|
63
67
|
- app/mailers/lra_client/application_mailer.rb
|
64
68
|
- app/models/lra_client/application_record.rb
|
69
|
+
- app/models/lra_client/user.rb
|
65
70
|
- app/views/layouts/lra_client/application.html.erb
|
66
71
|
- config/routes.rb
|
72
|
+
- db/migrate/20161219184020_create_lra_client_users.rb
|
67
73
|
- lib/lra_client.rb
|
68
74
|
- lib/lra_client/engine.rb
|
69
75
|
- lib/lra_client/version.rb
|