horse_power 0.0.1 → 0.1.0

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: 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.