horse_power 0.0.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d6757502c2b6ad55d70f8c7614ee92270bc85713
4
- data.tar.gz: b357c8627065e761ecf4b07084b5200074e80177
3
+ metadata.gz: b866611178f0a0657301cf04b18e7a3290535d14
4
+ data.tar.gz: 75ad42579bd6ce7b95227c2a4fa987f8274ed17b
5
5
  SHA512:
6
- metadata.gz: eb582f257a5e8d17a077e5bc2cc9b498e543f6aef26248d864c7e73e098dfff4530898e90557370d741d584cd13e62d548eaca96f48eaa47c8364835009da7f7
7
- data.tar.gz: 62439515e52b76adadbe0c363d1b276dd66eafebc4a59415da1eb5a036e26cf80fb97a3aa1ed674a57faecdce10f3fd77bc5ba66eca7cd20a3aeae03a0e2a354
6
+ metadata.gz: ca5504904cb6589fa094060e0cf621d29661d9d13e325b421cc8ddcf91090fff00c57cccc170d9aa588ef6b3472dd7f0f0d90cddde67036b88f8d9bc619ad6a1
7
+ data.tar.gz: 7d533ea51ac0da6ac99abe719c7a38fd061b45b477a0ad1877833b3fc036a616e95f49cd2153528a4d3724c4d5c84976586046c86e9676c24a6ff72ce9ce6220
@@ -56,7 +56,7 @@ module HorsePower
56
56
  config.current_user_method = :current_admin_user
57
57
  config.logout_link_path = "/sessions/destroy"
58
58
  config.logout_link_method = :post
59
- config.allow_comments = false
59
+ config.comments = false
60
60
  config.site_title_link = "/"
61
61
 
62
62
  RUBY
@@ -10,8 +10,8 @@ module HorsePower
10
10
  # We only need this to create the migration
11
11
  if api_version == "1"
12
12
  run "rails g model #{HorsePower.get_singular(resource_name)} #{attributes.join(" ")} --no-fixture --skip"
13
- run "rm -rf spec/factories/oceans.rb"
14
- run "rm -rf spec/models/ocean_spec.rb"
13
+ run "rm -rf spec/factories/#{HorsePower.get_plural(resource_name)}.rb"
14
+ run "rm -rf spec/models/#{HorsePower.get_singular(resource_name)}_spec.rb"
15
15
  end
16
16
  end
17
17
 
@@ -1,5 +1,5 @@
1
1
  ActiveAdmin.register User do
2
- permit_params :username, :email, :password, :password_confirmation
2
+ permit_params :username, :email, :password, :password_confirmation, :fb_user_id
3
3
 
4
4
  config.per_page = 50
5
5
 
@@ -11,6 +11,7 @@ ActiveAdmin.register User do
11
11
  f.input :email
12
12
  f.input :password
13
13
  f.input :password_confirmation
14
+ f.input :fb_user_id
14
15
  f.input :updated_at
15
16
  f.input :created_at
16
17
  end
@@ -62,6 +62,12 @@ module Authorization
62
62
  return true
63
63
  end
64
64
 
65
+ def self.include_fb_user_id?(current_user,user_object,options)
66
+ action = options[:url_options][:_recall][:action]
67
+ controller = options[:url_options][:_recall][:controller]
68
+ return true
69
+ end
70
+
65
71
  def self.include_password_digest?(current_user,user_object,options)
66
72
  action = options[:url_options][:_recall][:action]
67
73
  controller = options[:url_options][:_recall][:controller]
@@ -3,7 +3,7 @@ require 'authorization'
3
3
 
4
4
  class Api::V1::UsersController < Api::V1::ApplicationController
5
5
 
6
- skip_before_filter :authenticate_user, :only => [:register, :login]
6
+ skip_before_filter :authenticate_user, :only => [:register, :login, :facebook_login]
7
7
  before_action :set_user, only: [:show, :update, :destroy]
8
8
  before_action :index_authorize, only: [:index]
9
9
  before_action :show_authorize, only: [:show]
@@ -61,6 +61,17 @@ class Api::V1::UsersController < Api::V1::ApplicationController
61
61
  end
62
62
  end
63
63
 
64
+ # POST /api/1/users/facebook_login
65
+ def facebook_login
66
+ objHash = ::User.facebook_login(params)
67
+ if objHash.nil?
68
+ objHash = {error: "Could not retrieve the facebook user_id from your token"}
69
+ render :json => objHash, status: :unauthorized
70
+ else
71
+ render :json => objHash
72
+ end
73
+ end
74
+
64
75
  # POST /api/1/users/logout
65
76
  def logout
66
77
  current_user.logout(current_token)
@@ -89,6 +100,21 @@ class Api::V1::UsersController < Api::V1::ApplicationController
89
100
  render :json => {user: userHash,token: tokenHash}
90
101
  end
91
102
 
103
+ def get_id(fb_api,long_token,short_token)
104
+ response = fb_api.get_user_id(long_token)
105
+ if response.code == 200
106
+ @token = long_token
107
+ return JSON.parse(response.body)["id"]
108
+ end
109
+ #Lets try it with the short token now
110
+ response = fb_api.get_user_id(short_token)
111
+ if response.code == 200
112
+ @token = short_token
113
+ return JSON.parse(response.body)["id"]
114
+ end
115
+ return nil
116
+ end
117
+
92
118
  # Authorizations below here
93
119
 
94
120
  def index_authorize
@@ -0,0 +1,48 @@
1
+ require 'httparty'
2
+
3
+ class Facebook
4
+ include ::HTTParty
5
+ base_uri 'https://graph.facebook.com/v2.1'
6
+ #format :json
7
+ #debug_output $stdout
8
+
9
+ def initialize()
10
+ end
11
+
12
+ def get_long_token(short_token)
13
+ params = {
14
+ grant_type: "fb_exchange_token",
15
+ client_id: ENV["FB_APP_ID1"],
16
+ client_secret: ENV["FB_APP_SECRET1"],
17
+ fb_exchange_token: short_token
18
+ }
19
+ headers = { 'Content-Type' => 'application/json' }
20
+ response = self.class.get("/oauth/access_token", query: params, headers: headers)
21
+ if response.code == 200
22
+ return parse_token(response.body)
23
+ else
24
+ return ""
25
+ end
26
+ end
27
+
28
+ def get_user_id(token)
29
+ options = { query:{
30
+ fields: "id",
31
+ access_token: token
32
+ }
33
+ }
34
+ response = self.class.get("/me", options)
35
+ return response
36
+ end
37
+
38
+ private
39
+
40
+ def parse_token(response)
41
+ #access_token={access-token}&expires={seconds-til-expiration}
42
+ index = response.index('&')
43
+ start_index = "access_token=".size
44
+ length = index - start_index
45
+ return response.slice(start_index,length)
46
+ end
47
+
48
+ end
@@ -36,6 +36,8 @@ class User < ActiveRecord::Base
36
36
  return user
37
37
  end
38
38
 
39
+ #Should use one or the other for login
40
+
39
41
  def self.login(user_params)
40
42
  email = user_params[:email]
41
43
  if email
@@ -49,6 +51,32 @@ class User < ActiveRecord::Base
49
51
  end
50
52
  end
51
53
 
54
+ def self.facebook_login(params)
55
+ short_token = params[:token]
56
+ fb_api = Facebook.new
57
+ long_token = fb_api.get_long_token(short_token)
58
+ fb_user_id = get_id(fb_api,long_token,short_token)
59
+ if fb_user_id.nil?
60
+ #Couldn't retrieve the facebook user_id from token
61
+ return nil;
62
+ end
63
+ @user = User.find_by(fb_user_id: fb_user_id)
64
+ if @user.nil?
65
+ #Create new user
66
+ params = {username: "user#{fb_user_id}", email: "#{fb_user_id}@email.com",
67
+ fb_user_id: fb_user_id, password: "password"}
68
+ @user = User.create(params)
69
+ @api_token = @user.tokens[0]
70
+ else
71
+ #Log in a user
72
+ @api_token = @user.tokens.create
73
+ end
74
+ ::Arcadex::Create.set_token(@api_token,20000,request,nil)
75
+ userHash = {id: @user.id, username: @user.username, fb_user_id: @user.fb_user_id}
76
+ objHash = {user: userHash, api_token: @api_token.auth_token, fb_token: @token}
77
+ return objHash
78
+ end
79
+
52
80
  def logout(token)
53
81
  token.destroy
54
82
  end
@@ -6,6 +6,7 @@ class V1::UserSerializer < ActiveModel::Serializer
6
6
  attributes :id
7
7
  attributes :email
8
8
  attributes :username
9
+ attributes :fb_user_id
9
10
  attributes :password_digest
10
11
  attributes :created_at
11
12
  attributes :updated_at
@@ -25,6 +26,10 @@ class V1::UserSerializer < ActiveModel::Serializer
25
26
  return ::Authorization::V1::User.include_username?(current_user,object,@options)
26
27
  end
27
28
 
29
+ def include_fb_user_id?
30
+ return ::Authorization::V1::User.include_fb_user_id?(current_user,object,@options)
31
+ end
32
+
28
33
  def include_password_digest?
29
34
  return ::Authorization::V1::User.include_password_digest?(current_user,object,@options)
30
35
  end
@@ -8,6 +8,7 @@ FactoryGirl.define do
8
8
  factory :user_1, class: User do
9
9
  username
10
10
  email
11
+ fb_user_id
11
12
  password "password123"
12
13
  password_confirmation "password123"
13
14
  end
@@ -199,6 +199,10 @@ RSpec.describe User, :type => :request do
199
199
  #Errors need to be returned
200
200
  expect(json["errors"]).to_not eq(nil)
201
201
  end
202
+ # post /api/1/users/facebook_login
203
+ it "checks response of a valid facebook_login request" do
204
+
205
+ end
202
206
  end
203
207
  end
204
208
  RSpec.describe User, :type => :request do
@@ -49,6 +49,12 @@ RSpec.describe "Users controller rest routing", :type => :routing do
49
49
  :action => "login"
50
50
  )
51
51
  end
52
+ it "routes create to facebook_login" do
53
+ expect(:post => "/api/1/users/facebook_login").to route_to(
54
+ :controller => "api/v1/users",
55
+ :action => "facebook_login"
56
+ )
57
+ end
52
58
  it "routes create to logout" do
53
59
  expect(:post => "/api/1/users/logout").to route_to(
54
60
  :controller => "api/v1/users",
@@ -11,12 +11,18 @@ module HorsePower
11
11
  create_admin
12
12
  create_tests
13
13
  create_routes
14
+ create_facebook
14
15
  end
15
16
 
16
17
  private
17
18
 
19
+ def create_facebook
20
+ run "mkdir app/facebook"
21
+ template "facebook.rb", "app/facebook/facebook.rb"
22
+ end
23
+
18
24
  def create_migration
19
- run "rails g model user username:string:uniq email:string:uniq password_digest:string --no-fixture --skip"
25
+ run "rails g model user username:string:uniq email:string:uniq fb_user_id:integer:uniq password_digest:string --no-fixture --skip"
20
26
  run "rm -rf app/models/user.rb"
21
27
  run "rm -rf spec/models/user_spec.rb"
22
28
  run "rm -rf spec/factories/users.rb"
@@ -56,6 +62,7 @@ module HorsePower
56
62
  collection do
57
63
  post 'register', to: "api/v1/users#register"
58
64
  post 'login', to: "api/v1/users#login"
65
+ post 'facebook_login', to: "api/v1/users#facebook_login"
59
66
  post 'logout', to: "api/v1/users#logout"
60
67
  end
61
68
  end
@@ -1,3 +1,3 @@
1
1
  module HorsePower
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/horse_power.rb CHANGED
@@ -2,15 +2,15 @@ require "horse_power/engine"
2
2
 
3
3
  module HorsePower
4
4
 
5
- def self.params_list(attributes)
6
- params = []
7
- attributes.each do |pair|
8
- elem = pair.split(/:/)[0]
9
- field = ":#{elem}"
10
- params << field
11
- end
12
- return params.join(",")
13
- end
5
+ def self.params_list(attributes)
6
+ params = []
7
+ attributes.each do |pair|
8
+ elem = pair.split(/:/)[0]
9
+ field = ":#{elem}"
10
+ params << field
11
+ end
12
+ return params.join(",")
13
+ end
14
14
 
15
15
  def self.get_column(pair)
16
16
  return pair.split(/:/)[0]
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.0.1
4
+ version: 0.1.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: 2014-12-09 00:00:00.000000000 Z
11
+ date: 2015-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -55,7 +55,6 @@ extensions: []
55
55
  extra_rdoc_files: []
56
56
  files:
57
57
  - MIT-LICENSE
58
- - README.rdoc
59
58
  - Rakefile
60
59
  - app/assets/javascripts/horse_power/application.js
61
60
  - app/assets/stylesheets/horse_power/application.css
@@ -104,6 +103,7 @@ files:
104
103
  - lib/generators/horse_power/user/templates/admin.rb.erb
105
104
  - lib/generators/horse_power/user/templates/authorization.rb.erb
106
105
  - lib/generators/horse_power/user/templates/controller.rb.erb
106
+ - lib/generators/horse_power/user/templates/facebook.rb
107
107
  - lib/generators/horse_power/user/templates/model.rb.erb
108
108
  - lib/generators/horse_power/user/templates/serializer.rb.erb
109
109
  - lib/generators/horse_power/user/templates/specs/factory.rb.erb
data/README.rdoc DELETED
@@ -1,3 +0,0 @@
1
- = HorsePower
2
-
3
- This project rocks and uses MIT-LICENSE.