petergate_api 0.2.2 → 0.2.3

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: cb685ed4676593a95e0639d97712289dbf943f51
4
- data.tar.gz: d4c081136c029e88f4fb322607a13a1d9f09572b
3
+ metadata.gz: a8bf0f6469cf43e2abaad4bcc7012ae9a49a12f2
4
+ data.tar.gz: d6eeda324dcdce64075d466bc9b053af2d5efb50
5
5
  SHA512:
6
- metadata.gz: 7d0cd46b8dc2e5f678128e1dca9c4875212a31354dcff139444a3fa07e174d6a7be6e643409b5931b9d4d63d23d46be3c65666d22172d585d56a83570c3d38ff
7
- data.tar.gz: c6bdbb474c749cb4ee085102a8fc9576c6bdfc143f7bae7d172122f23da34fce57b121ed6059024e562c38fdb57ec585366765e0807a2139f9eb99218a846454
6
+ metadata.gz: 566fe11a2cf616aec852a21fe8d9838ab911a37ecac1f8d59c4d704e393763a1a37fe48211d7ec9dab2e5f14ba234e7ef8a777f0de7b1cc211625637cd0d45f4
7
+ data.tar.gz: 495cebe9cd821721f36e3e2dc4a659f8f354816133a03a9c359e5d05dcb5596f228f7e5687cbc94ba68f88a024b45fc71c8e5bc51b1933d8bb7fce5f5b87bcbd
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /pkg/
9
9
  /spec/reports/
10
10
  /tmp/
11
+ .DS_Store
@@ -15,6 +15,7 @@ module PetergateApi
15
15
 
16
16
  def add_to_gemfile
17
17
  gem "apipie-rails"
18
+ gem "jwt"
18
19
  end
19
20
 
20
21
  def insert_into_user_model
@@ -39,6 +40,10 @@ module PetergateApi
39
40
  run "cp -rf #{self.class.source_root}/app/ app/"
40
41
  end
41
42
 
43
+ def copy_lib
44
+ run "cp -rf #{self.class.source_root}/lib/ lib/"
45
+ end
46
+
42
47
  def copy_initializers
43
48
  run "cp -rf #{self.class.source_root}/initializers config/"
44
49
  end
@@ -1,18 +1,16 @@
1
- class Api::BaseController < ActionController::Base
1
+ require 'api_user'
2
2
 
3
+ class Api::BaseController < ActionController::Base
3
4
  def current_user
4
5
  @user ||= begin
5
- if (@connection = Api::Connection.find_by(token: request.headers["Authorization"])).present?
6
- @user = @connection.user
6
+ if request.headers["Authorization"]
7
+ # you might want to check redis or memcache to for cache invalidation
8
+ ::ApiUser.new(request.headers["Authorization"])
7
9
  else
8
- nil
10
+ nil
9
11
  end
10
12
  end
11
13
  end
12
14
 
13
- def current_city
14
- @current_city ||= current_user.try(:city)
15
- end
16
-
17
- helper_method :current_user, :current_city
15
+ helper_method :current_user
18
16
  end
@@ -12,7 +12,7 @@ class Api::V1::AuthController < Api::BaseController
12
12
  }"
13
13
  def create
14
14
  if params[:email] && (@user = User.find_by_email(params[:email])) && @user.valid_password?(auth_params[:password])
15
- connection = @user.api_connections.create
15
+ connection = @user.api_connections.create
16
16
  render json: {id: @user.id, auth_token: connection.token, email: @user.email}.to_json, status: :ok
17
17
  else
18
18
  render status: :unauthorized, nothing: true
@@ -1,22 +1,7 @@
1
- # == Schema Information
2
- #
3
- # Table name: api_connections
4
- #
5
- # id :integer not null, primary key
6
- # user_id :integer
7
- # token :string(255)
8
- # meta_data :text(65535)
9
- # device_type :string(255)
10
- # created_at :datetime not null
11
- # updated_at :datetime not null
12
- #
13
-
14
1
  class Api::Connection < ActiveRecord::Base
15
2
  belongs_to :user, class_name: "::User"
16
3
  before_create do
17
- begin
18
- self.token = Base64.strict_encode64(Devise.friendly_token + user.email).strip
19
- end while self.class.find_by(token: self.token).present?
4
+ self.token = ::ApiUser.create_token(user)
20
5
  end
21
- scope :push_tokens, -> { where(meta_data: 'push_notifications_token')}
22
6
  end
7
+
@@ -0,0 +1,23 @@
1
+ require 'jwt'
2
+
3
+ class ApiUser
4
+ JWT_SECRET = "$ecr3t_tok3n!"
5
+
6
+ def initialize(token)
7
+ @jwt = JWT.decode(token, JWT_SECRET, true, {algorithm: 'HS256'}).first
8
+ @jwt.each do |k, v|
9
+ v = v.map(&:to_sym) if v.is_a?(Array)
10
+ define_singleton_method(k){v}
11
+ end
12
+ end
13
+
14
+ def method_missing(sym, *args, &block)
15
+ @user ||= (User.find(id) || User.first)
16
+ return @user.send(sym, *args, &block)
17
+ end
18
+
19
+ def self.create_token(user)
20
+ payload = {id: user.id, name: user.name, roles: user.roles, email: user.email}
21
+ JWT.encode(payload, JWT_SECRET, 'HS256')
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module PetergateApi
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: petergate_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Isaac Sloan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-30 00:00:00.000000000 Z
11
+ date: 2017-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -85,6 +85,7 @@ files:
85
85
  - lib/generators/petergate_api/templates/app/controllers/api/v1/auth_controller.rb
86
86
  - lib/generators/petergate_api/templates/app/models/api/connection.rb
87
87
  - lib/generators/petergate_api/templates/initializers/apipie.rb
88
+ - lib/generators/petergate_api/templates/lib/api_user.rb
88
89
  - lib/generators/petergate_api/templates/migrations/add_mobile_reset_token_to_user.rb
89
90
  - lib/generators/petergate_api/templates/migrations/create_api_connections.rb
90
91
  - lib/petergate_api.rb