petergate_api 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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