horse_power 0.7.1 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9aab5006e5fcb9c7b28e788336b27061cb73ab20
4
- data.tar.gz: a244e720ed53c1e46b05ffd6cbc1d0d01bedff02
3
+ metadata.gz: fe53c436f835f2a2941759bb55f910c8a0e972da
4
+ data.tar.gz: 46bd713a02db23ffcb166af1563d7c7358a34028
5
5
  SHA512:
6
- metadata.gz: a1565138976ab4023ef6dfc0ee0f412caa9d1f0f0144e6ac00992f39b66733992f6787cf4409d5a9a0ad470ba038dd26af5b7422199dce3314977f8fee541330
7
- data.tar.gz: c58e5a9e17be91aef17117076c08f2a504d052f5b974010aa7542e0656ceaccc114ae5257ca282e26d662864e04a31921f434f8af34db727b992a63a67630061
6
+ metadata.gz: f72d25da489952278ab4a4ecf97b887db5550363b90ebf7ee7f834d274262404c0bb1b9100b9b772d13a4ad1fe34f84799584f526a837c9178de29139384ffa4
7
+ data.tar.gz: 5960b0dcd977417456018c94c15246446bfad8c72ae95143a32b2126564cd991d5197086f58877e19044b6350052a200a39ca03972847b4e719b43f92f1fe411
@@ -20,10 +20,9 @@ module HorsePower
20
20
  end
21
21
 
22
22
  def createSettings
23
- copy_file "identity_cache.rb", "config/initializers/identity_cache.rb"
24
23
  run "rails g rails_config:install"
25
24
  prepend_to_file 'config/settings.yml' do
26
- "token_header: \"Auth-Token\"\nmain_api_header: \"Main-Api-Header\"\n"
25
+ "token_header: \"Auth-Token\"\nmain_api_header: \"Main-Api-Header\"\nexpire_time: 20000\n"
27
26
  end
28
27
  createEnvSettings
29
28
  end
@@ -54,7 +53,7 @@ module HorsePower
54
53
  resource '*',
55
54
  :headers => :any,
56
55
  :methods => [:get, :post, :put, :delete, :options],
57
- :expose => ['Logged-In-Status','Auth-Token','Main-Api-Header']
56
+ :expose => ['Logged-In-Status','Auth-Token','Main-Api-Header','Authorization']
58
57
  end
59
58
  end
60
59
 
@@ -67,8 +66,7 @@ module HorsePower
67
66
  gsub_file "config/environments/development.rb", "config.action_mailer.raise_delivery_errors = false\n", "#config.action_mailer.raise_delivery_errors = false\n"
68
67
  inject_into_file 'config/environments/development.rb', after: "configure do\n" do <<-'RUBY'
69
68
 
70
- config.cache_store = :memory_store
71
- config.identity_cache_store = :memory_store, { size: 64.megabytes }
69
+ config.cache_store = :memory_store
72
70
  config.action_mailer.perform_deliveries = false
73
71
  config.action_mailer.raise_delivery_errors = false
74
72
  config.action_mailer.default_options = {from: ENV['GMAIL_USERNAME']}
@@ -94,8 +92,7 @@ module HorsePower
94
92
  gsub_file "config/environments/test.rb", "config.action_mailer.delivery_method = :test\n", "#config.action_mailer.delivery_method = :test\n"
95
93
  inject_into_file 'config/environments/test.rb', after: "configure do\n" do <<-'RUBY'
96
94
 
97
- config.cache_store = :null_store
98
- config.identity_cache_store = :null_store
95
+ config.cache_store = :null_store
99
96
  #config.action_mailer.perform_deliveries = false
100
97
  config.action_mailer.raise_delivery_errors = true
101
98
  config.action_mailer.default_options = {from: 'testing123@example.com'}
@@ -121,10 +118,7 @@ module HorsePower
121
118
  ::Settings.reload!
122
119
  inject_into_file 'config/environments/production.rb', after: "configure do\n" do <<-'RUBY'
123
120
 
124
- config.cache_store = :null_store
125
- #identity_cache
126
- #config.identity_cache_store = :mem_cache_store, Memcached::Rails.new(:servers => ["mem1.server.com"])
127
- config.identity_cache_store = :null_store
121
+ config.cache_store = :null_store
128
122
  config.force_ssl = true
129
123
  config.action_mailer.perform_deliveries = true
130
124
  config.action_mailer.raise_delivery_errors = true
@@ -144,11 +144,11 @@ module HorsePower
144
144
  gem 'bcrypt', '~> 3.1.7'
145
145
  gem 'type_cartographer'
146
146
  gem 'devise', "~> 3.2.4"
147
- gem 'arcadex', '>= 1.3.1'
147
+ gem 'arcadex', '~> 1.2.3'
148
148
  gem 'autoprefixer-rails'
149
149
  gem 'bootstrap-sass', '~> 3.2.0'
150
150
  gem 'activeadmin', :git => 'https://github.com/activeadmin/activeadmin.git', :branch => "master"
151
- gem 'defcon'
151
+ gem 'defcon', '~> 1.2.7'
152
152
  #gem 'authorization', :path => "gems/authorization"
153
153
  gem 'whenever', :require => false
154
154
  gem 'rack-cors', :require => 'rack/cors'
@@ -161,8 +161,9 @@ module HorsePower
161
161
  end
162
162
  gem 'rack-timeout'
163
163
  gem 'puma'
164
- gem 'identity_cache'
165
- gem 'cityhash' # optional, for faster hashing (C-Ruby only)
164
+ gem 'jwt'
165
+ #gem 'identity_cache'
166
+ #gem 'cityhash' # optional, for faster hashing (C-Ruby only)
166
167
  #gem 'websocket-rails'
167
168
  end
168
169
 
@@ -1,6 +1,8 @@
1
+ require 'tokenhash'
2
+
1
3
  class Api::V1::ApplicationController < ::ActionController::API
2
4
 
3
- before_action :authenticate_app
5
+ #before_action :authenticate_app
4
6
  before_action :authenticate_user
5
7
 
6
8
  private
@@ -23,7 +25,7 @@ class Api::V1::ApplicationController < ::ActionController::API
23
25
  end
24
26
 
25
27
  def set_hash
26
- @instance_hash = ::Arcadex::Authentication.get_instance_no_update(params,request,::Settings.token_header)
28
+ @instance_hash = ::TokenHash.decode(params,request)
27
29
  end
28
30
 
29
31
  def current_user
@@ -36,6 +38,9 @@ class Api::V1::ApplicationController < ::ActionController::API
36
38
 
37
39
  def current_token
38
40
  if !@instance_hash.nil?
41
+ if @instance_hash["current_token"].nil?
42
+ @instance_hash["current_token"] = ::Arcadex::Find.find_token_by_auth_token(@instance_hash["auth_token"])
43
+ end
39
44
  return @instance_hash["current_token"]
40
45
  else
41
46
  return nil
@@ -1,5 +1,6 @@
1
1
  require_dependency "api/v1/application_controller"
2
2
  require 'authorization/v1/user'
3
+ require 'tokenhash'
3
4
 
4
5
  class Api::V1::UsersController < Api::V1::ApplicationController
5
6
 
@@ -99,9 +100,9 @@ class Api::V1::UsersController < Api::V1::ApplicationController
99
100
  end
100
101
 
101
102
  def successful_login(user,token)
102
- ::Arcadex::Create.set_token(token,20000,request,nil)
103
+ ::Arcadex::Create.set_token(token,::Settings.expire_time,request,nil)
103
104
  userHash = {id: user.id, username: user.username, email: user.email}
104
- tokenHash = {auth_token: token.auth_token}
105
+ tokenHash = {auth_token: ::TokenHash.encode(token.auth_token,user.id)}
105
106
  render :json => {user: userHash,token: tokenHash}
106
107
  end
107
108
 
@@ -1,15 +1,15 @@
1
1
  require 'type_cartographer'
2
2
  require 'facebook'
3
+ require 'tokenhash'
3
4
 
4
5
  class User < ActiveRecord::Base
5
- include IdentityCache
6
6
 
7
7
  before_save { self.email = email.downcase }
8
8
  before_save { self.username = username.downcase }
9
9
  before_validation :sanitize_attributes
10
10
  after_create :setup_user
11
11
 
12
- has_secure_password
12
+ has_secure_password
13
13
 
14
14
  has_many :tokens, :as => :imageable, :class_name => "::Arcadex::Token", dependent: :destroy
15
15
 
@@ -23,7 +23,7 @@ class User < ActiveRecord::Base
23
23
  end
24
24
 
25
25
  def setup_user
26
- create_token
26
+ create_token
27
27
  return true
28
28
  end
29
29
 
@@ -74,9 +74,9 @@ class User < ActiveRecord::Base
74
74
  #Log in a user
75
75
  @api_token = @user.tokens.create
76
76
  end
77
- ::Arcadex::Create.set_token(@api_token,20000,request,nil)
77
+ ::Arcadex::Create.set_token(@api_token,::Settings.expire_time,request,nil)
78
78
  userHash = {id: @user.id, username: @user.username, fb_user_id: @user.fb_user_id}
79
- objHash = {user: userHash, api_token: @api_token.auth_token, fb_token: long_token}
79
+ objHash = {user: userHash, api_token: ::TokenHash.encode(@api_token.auth_token,@user.id), fb_token: long_token}
80
80
  return objHash
81
81
  end
82
82
 
@@ -149,7 +149,8 @@ RSpec.describe User, :type => :request do
149
149
  #A valid token needs to be returned
150
150
  expect(json["token"]["auth_token"]).to_not eq(nil)
151
151
  token = User.find(1).tokens[0]
152
- expect(json["token"]["auth_token"]).to eq(token.auth_token)
152
+ jwt = ::JWT.decode(json["token"]["auth_token"],::Rails.application.secrets.secret_key_base)[0]
153
+ expect(jwt["auth_token"]).to eq(token.auth_token)
153
154
  end
154
155
  # post /api/1/users/register
155
156
  it "checks response of a register request with mismatched passwords" do
@@ -183,7 +184,8 @@ RSpec.describe User, :type => :request do
183
184
  expect(json["token"]["auth_token"]).to_not eq(old_auth_token)
184
185
  #This token should be the newest token in the database
185
186
  new_auth_token = User.find(1).tokens.order("created_at").last.auth_token
186
- expect(json["token"]["auth_token"]).to eq(new_auth_token)
187
+ jwt = ::JWT.decode(json["token"]["auth_token"],::Rails.application.secrets.secret_key_base)[0]
188
+ expect(jwt["auth_token"]).to eq(new_auth_token)
187
189
  end
188
190
  # post /api/1/users/login
189
191
  it "checks response of an invalid login request with an invalid password" do
@@ -0,0 +1,40 @@
1
+ class TokenHash
2
+
3
+ =begin
4
+ Ideally, the expiration for the jwt token would be less than the db token,
5
+ and we would return a new jwt token to the user if the current jwt token expired
6
+ but the db token was not yet expired.
7
+ =end
8
+
9
+ def self.encode(auth_token_hash,user_id)
10
+ obj = {}
11
+ obj["auth_token"] = auth_token_hash
12
+ obj["user_id"] = user_id
13
+ obj["exp"] = ::Time.now.to_i() + ::Settings.expire_time
14
+ return ::JWT.encode(obj,::Rails.application.secrets.secret_key_base)
15
+ end
16
+
17
+ def self.decode(params,request)
18
+ instance_hash = nil
19
+ auth_token_obj = ::Arcadex::Header.grab_param_header(params,request,::Settings.token_header,false)
20
+ begin
21
+ # Try JWT token
22
+ jwt = ::JWT.decode(auth_token_obj,::Rails.application.secrets.secret_key_base)
23
+ token = jwt[0]
24
+ user = ::User.find_by(id: token["user_id"])
25
+ instance_hash = {}
26
+ instance_hash["current_owner"] = user
27
+ instance_hash["current_token"] = nil
28
+ instance_hash["auth_token"] = token["auth_token"]
29
+ return instance_hash
30
+ rescue ::JWT::DecodeError, ::JWT::ExpiredSignature
31
+ # Try Arcadex token
32
+ instance_hash = ::Arcadex::Authentication.get_instance(params,request,::Settings.token_header)
33
+ if !instance_hash.nil?
34
+ instance_hash["auth_token"] = nil
35
+ end
36
+ return instance_hash
37
+ end
38
+ end
39
+
40
+ end
@@ -11,14 +11,15 @@ module HorsePower
11
11
  create_admin
12
12
  create_tests
13
13
  create_routes
14
- create_facebook
14
+ create_lib
15
15
  end
16
16
 
17
17
  private
18
18
 
19
- def create_facebook
19
+ def create_lib
20
20
  #run "mkdir app/facebook"
21
21
  template "facebook.rb", "lib/facebook.rb"
22
+ template "tokenhash.rb", "lib/tokenhash.rb"
22
23
  end
23
24
 
24
25
  def create_migration
@@ -1,3 +1,3 @@
1
1
  module HorsePower
2
- VERSION = "0.7.1"
2
+ VERSION = "0.8.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: horse_power
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cleophus Robinson IV
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-27 00:00:00.000000000 Z
11
+ date: 2015-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -58,7 +58,6 @@ files:
58
58
  - config/routes.rb
59
59
  - lib/generators/horse_power/app_environment/USAGE
60
60
  - lib/generators/horse_power/app_environment/app_environment_generator.rb
61
- - lib/generators/horse_power/app_environment/templates/identity_cache.rb
62
61
  - lib/generators/horse_power/app_environment/templates/procfile.rb
63
62
  - lib/generators/horse_power/app_environment/templates/puma.rb
64
63
  - lib/generators/horse_power/app_environment/templates/timeout.rb
@@ -109,6 +108,7 @@ files:
109
108
  - lib/generators/horse_power/user/templates/specs/model.rb.erb
110
109
  - lib/generators/horse_power/user/templates/specs/requests.rb.erb
111
110
  - lib/generators/horse_power/user/templates/specs/routing.rb.erb
111
+ - lib/generators/horse_power/user/templates/tokenhash.rb
112
112
  - lib/generators/horse_power/user/user_generator.rb
113
113
  - lib/horse_power.rb
114
114
  - lib/horse_power/engine.rb
@@ -1 +0,0 @@
1
- IdentityCache.cache_backend = ActiveSupport::Cache.lookup_store(*Rails.configuration.identity_cache_store)