ishapi 0.1.8.142 → 0.1.8.146

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
  SHA256:
3
- metadata.gz: 22b9f244f6e4a3c79fda643d0eca55e244a03ad5762412d2cb52f6175ee2ce97
4
- data.tar.gz: b6bd24cdaad0054db3ad571623964a87517784933e0e01f7c67fe745fea5c93b
3
+ metadata.gz: 7daed337d478761f910b4330f860a5c730a858dc50cf75272ef05ff6609459ef
4
+ data.tar.gz: 63ca6a01982f267a5cc411b32a0a949abb3d97ff5a2cdd43454b2a301607d8cd
5
5
  SHA512:
6
- metadata.gz: 582ad0e2dd8f1f809a87ee5716b1770d05a00198d3d93a1b203151dca8cdf0c7844c18a499486686d6f95a84dd78c920263c07b6c73f4eff8ead2b6372cb412f
7
- data.tar.gz: 01c8f26d18422745fdae325588c46d92828d65f86a677fece418ec2e98e9f6ba1fb9a694fb23d140ee270f1ca8a42d179b9667cc362e504be8aef43eefc9b28a
6
+ metadata.gz: 23e0af13c63e3ad5f24621cfd93f680f946bdebadc10d8bc2e5ed41a962c2c901237d839ae3f27a19ca01ede1e5cd73fe84649962247168db1127768c52dfb40
7
+ data.tar.gz: 1a0d67e6ff177b1d474538e4fb9a2770fb3f14872355a9ddba3b1cadeb69feaa644d3e3aa78b2d7e6fce1685e26bee74f9e6fd3f5c0551b576cdf9c71d2141b5
@@ -1,16 +1,7 @@
1
1
  module Ishapi
2
2
  class ApplicationController < ActionController::Base
3
- after_action :append_long_term_token, except: [ :long_term_token, :test ]
4
-
5
- protect_from_forgery :prepend => true, :with => :exception
6
- layout :false
7
-
8
- check_authorization except: [ :long_term_token ]
9
- skip_before_action :verify_authenticity_token
10
-
11
- def test
12
- end
13
3
 
4
+ ## POST /api/users/long_term_token , a FB login flow
14
5
  def long_term_token
15
6
  accessToken = request.headers[:accessToken]
16
7
  accessToken ||= params[:accessToken]
@@ -37,213 +28,19 @@ module Ishapi
37
28
  }
38
29
  end
39
30
 
40
- def home
41
- authorize! :welcome_home, Ishapi
42
- render :json => { :status => :ok, :message => 'Ishapi::ApiController.home',
43
- :n_reports => Report.count, :n_cities => City.count }
44
- end
45
-
46
- #
47
- # private
48
- #
49
31
  private
50
32
 
51
- def append_long_term_token
52
- if @long_term_token
53
- response.body = JSON.parse(response.body).merge({ long_term_token: @long_term_token }).to_json
54
- end
55
- end
56
-
57
- ## Hard check by default; craps out if accessToken is missing
58
- def check_long_term_token soft=false
59
- accessToken = request.headers[:accessToken]
60
- accessToken ||= params[:accessToken]
61
- if accessToken
62
- @graph = Koala::Facebook::API.new( accessToken )
63
- @me = @graph.get_object( 'me', :fields => 'email' )
64
- @current_user = User.where( :email => @me['email'] ).first
65
- @profile = @current_user.profile
66
- raise '98& - no profile' unless @profile
67
- else
68
- if soft
69
- return
70
- else
71
- raise 'no access token'
72
- end
73
- end
74
- end
75
-
76
- ## Does not crap out if accessToken is missing
77
- def soft_check_long_term_token
78
- check_long_term_token soft=true
79
- end
80
-
81
- def check_multiprofile provider = 'google'
82
- if 'google' == provider
83
- # client_secrets = ::Google::APIClient::ClientSecrets.load
84
- # accessToken = params[:accessToken]
85
- # authorization = ::Google::Auth.get_application_default
86
- # result = authorization.apply({ accessToken: params[:accessToken] })
87
- # puts! result, 'googleauth result'
88
-
89
- decoded_token = JWT.decode params[:idToken], nil, false
90
-
91
- @current_user = User.find_by email: decoded_token[0]['email']
92
-
93
- elsif 'facebook' == provider
94
- # accessToken ||= params[:fb_long_access_token]
95
-
96
- accessToken = request.headers[:accessToken]
97
- accessToken ||= params[:accessToken]
98
- if accessToken
99
-
100
- #
101
- # long-term token
102
- #
103
- params['domain'] = 'tgm.piousbox.com'
104
- response = HTTParty.get "https://graph.facebook.com/v5.0/oauth/access_token?grant_type=fb_exchange_token&" +
105
- "client_id=#{FB[params['domain']][:app]}&client_secret=#{FB[params['domain']][:secret]}&" +
106
- "fb_exchange_token=#{accessToken}"
107
- j = JSON.parse response.body
108
- @long_term_token = j['access_token']
109
-
110
-
111
- @graph = Koala::Facebook::API.new( accessToken )
112
- @me = @graph.get_object( 'me', :fields => 'email' )
113
- @current_user = User.where( :email => @me['email'] ).first
114
- @current_user ||= User.create! email: @me['email'], password: SecureRandom.urlsafe_base64
115
-
116
- @current_profile = @current_user.profile
117
- if !@current_profile
118
- begin
119
- g = Gallery.find '5e1495e2d697f768ad0779eb'
120
- rescue Mongoid::Errors::DocumentNotFound => e
121
- g = Gallery.create id: '5e1495e2d697f768ad0779eb'
122
- end
123
- @current_profile = IshModels::UserProfile.create user: @current_user, name: @me['email'], email: @me['email']
124
- test_newsitem = Newsitem.new gallery_id: '5e1495e2d697f768ad0779eb'
125
- @current_profile.newsitems << test_newsitem
126
- @current_profile.save
127
- end
128
- @current_profile.update fb_long_access_token: @long_term_token
129
- else
130
- @current_user = current_user if Rails.env.test?
131
- end
132
-
133
- elsif 'jwt' == provider
33
+ def check_profile
34
+ begin
134
35
  decoded = decode(params[:jwt_token])
135
36
  @current_user = User.find decoded['user_id']
136
- else
137
- raise "ww1 - not implemented"
138
- end
139
-
140
- # @TODO: refactor [ref-5]
141
- sign_in @current_user, scope: :user
142
- current_ability
143
- end
144
-
145
-
146
-
147
- # same as check_profile but doesn't error out when jwt_token is missing or expired
148
- def check_profile_optionally
149
- if !params[:jwt_token]
150
- @current_user = User.new profile: Profile.new
151
- else
152
- begin
153
- check_profile
154
- rescue JWT::ExpiredSignature
155
- Rails.logger.info("JWT::ExpiredSignature")
156
- @current_user = User.new profile: Profile.new
157
- end
37
+ rescue JWT::ExpiredSignature, JWT::DecodeError => e
38
+ puts! e, 'ee1'
39
+ flash[:notice] = 'You arent logged in, or you have been logged out.'
40
+ # @current_user = User.new
158
41
  end
159
42
  end
160
43
 
161
- # this doesn't generate long-lived token, doesn't update user_profile
162
- def check_profile
163
- # return check_multiprofile 'google'
164
- # return check_multiprofile 'facebook'
165
- return check_multiprofile 'jwt'
166
-
167
- accessToken = request.headers[:accessToken]
168
- accessToken ||= params[:fb_long_access_token]
169
- accessToken ||= params[:accessToken]
170
- if accessToken
171
- @graph = Koala::Facebook::API.new( accessToken )
172
- @me = @graph.get_object( 'me', :fields => 'email' )
173
- @current_user = User.find_by :email => @me['email']
174
- else
175
- @current_user = current_user if Rails.env.test?
176
- end
177
- @current_profile = @current_user.profile
178
- @current_order = @current_profile.current_order
179
- # orders.where( :submitted_at => nil ).first || ::CoTailors::Order.create( :profile_id => @current_profile.id )
180
-
181
- ## for sedux
182
- sign_in( @current_user )
183
- end
184
-
185
- def set_profile
186
- accessToken = request.headers[:accessToken]
187
- accessToken ||= params[:fb_long_access_token]
188
- accessToken ||= params[:accessToken]
189
-
190
- # params[:domain] ||= '_default'
191
-
192
- if accessToken
193
- begin
194
- @graph = Koala::Facebook::API.new( accessToken )
195
- @me = @graph.get_object( 'me', :fields => 'email' )
196
- @current_user = User.find_or_create_by :email => @me['email']
197
- @oauth = Koala::Facebook::OAuth.new( FB[params['domain']][:app], FB[params['domain']][:secret] )
198
- get_token = get_long_token( accessToken )
199
- @long_lived_token = get_token['access_token']
200
-
201
- begin
202
- @current_profile = IshModels::UserProfile.find_by :email => @me['email']
203
- @current_profile.update_attributes({ :fb_access_token => @long_lived_token,
204
- :fb_long_access_token => @long_lived_token,
205
- :fb_expires_in => get_token['expires_in']
206
- })
207
- rescue Mongoid::Errors::DocumentNotFound
208
- @current_profile = IshModels::UserProfile.create :user => @current_user, :email => @me['email'],
209
- :fb_access_token => @long_lived_token,
210
- :fb_long_access_token => @long_lived_token,
211
- :fb_expires_in => get_token['expires_in'],
212
- :fb_id => params[:id],
213
- :name => params[:name],
214
- :signed_request => params[:signedRequest]
215
- end
216
- @current_user.reload
217
- rescue Koala::Facebook::AuthenticationError => e
218
- render :json => { :status => :not_ok, :errors => "Probably expired token: #{accessToken}" }
219
- return
220
- end
221
- else
222
- @current_user = current_user if Rails.env.test?
223
- end
224
- @current_profile = @current_user.profile
225
- @current_order = @current_profile.current_order
226
- # orders.where( :submitted_at => nil ).first || ::CoTailors::Order.new( :profile_id => @current_profile.id )
227
- end
228
-
229
- def get_long_token accessToken
230
- url = "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&" +
231
- "client_id=#{FB[params['domain']][:app]}&client_secret=#{FB[params['domain']][:secret]}&fb_exchange_token=#{accessToken}"
232
- result = HTTParty.get url
233
- token = JSON.parse result.body
234
- return token # ['access_token']
235
- end
236
-
237
- def current_ability
238
- @current_user ||= User.new({ profile: ::IshModels::UserProfile.new })
239
- @current_ability ||= Ishapi::Ability.new( @current_user )
240
- end
241
-
242
- def puts! a, b=''
243
- puts "+++ +++ #{b}"
244
- puts a.inspect
245
- end
246
-
247
44
  # jwt
248
45
  def check_jwt
249
46
  begin
@@ -254,20 +51,23 @@ module Ishapi
254
51
  rescue JWT::DecodeError
255
52
  Rails.logger.info("JWT::DecodeError")
256
53
  end
257
- @current_user ||= User.new
258
54
  current_ability
259
55
  end
260
56
 
57
+ # jwt
58
+ def decode(token)
59
+ decoded = JWT.decode(token, Rails.application.secrets.secret_key_base.to_s)[0]
60
+ HashWithIndifferentAccess.new decoded
61
+ end
62
+
261
63
  # jwt
262
64
  def encode(payload, exp = 2.hours.from_now)
263
65
  payload[:exp] = exp.to_i
264
66
  JWT.encode(payload, Rails.application.secrets.secret_key_base.to_s)
265
67
  end
266
68
 
267
- # jwt
268
- def decode(token)
269
- decoded = JWT.decode(token, Rails.application.secrets.secret_key_base.to_s)[0]
270
- HashWithIndifferentAccess.new decoded
69
+ def current_ability
70
+ @current_ability ||= Ishapi::Ability.new( current_user )
271
71
  end
272
72
 
273
73
  end
@@ -0,0 +1,275 @@
1
+ module Ishapi
2
+ class ApplicationController < ActionController::Base
3
+ after_action :append_long_term_token, except: [ :long_term_token, :test ]
4
+
5
+ protect_from_forgery :prepend => true, :with => :exception
6
+ layout :false
7
+
8
+ check_authorization except: [ :long_term_token ]
9
+ skip_before_action :verify_authenticity_token
10
+
11
+ def test
12
+ end
13
+
14
+ def long_term_token
15
+ accessToken = request.headers[:accessToken]
16
+ accessToken ||= params[:accessToken]
17
+
18
+ params['domain'] = 'tgm.piousbox.com'
19
+
20
+ response = ::HTTParty.get "https://graph.facebook.com/v5.0/oauth/access_token?grant_type=fb_exchange_token&" +
21
+ "client_id=#{FB[params['domain']][:app]}&client_secret=#{FB[params['domain']][:secret]}&" +
22
+ "fb_exchange_token=#{accessToken}"
23
+ j = JSON.parse response.body
24
+ @long_term_token = j['access_token']
25
+ @graph = Koala::Facebook::API.new( accessToken )
26
+ @me = @graph.get_object( 'me', :fields => 'email' )
27
+ @current_user = User.where( :email => @me['email'] ).first
28
+
29
+ # send the jwt to client
30
+ @jwt_token = encode(user_id: @current_user.id.to_s)
31
+
32
+ render json: {
33
+ email: @current_user.email,
34
+ jwt_token: @jwt_token,
35
+ long_term_token: @long_term_token,
36
+ n_unlocks: @current_user.profile.n_unlocks,
37
+ }
38
+ end
39
+
40
+ def home
41
+ authorize! :welcome_home, Ishapi
42
+ render :json => { :status => :ok, :message => 'Ishapi::ApiController.home',
43
+ :n_reports => Report.count, :n_cities => City.count }
44
+ end
45
+
46
+ #
47
+ # private
48
+ #
49
+ private
50
+
51
+ def append_long_term_token
52
+ if @long_term_token
53
+ response.body = JSON.parse(response.body).merge({ long_term_token: @long_term_token }).to_json
54
+ end
55
+ end
56
+
57
+ ## Hard check by default; craps out if accessToken is missing
58
+ def check_long_term_token soft=false
59
+ accessToken = request.headers[:accessToken]
60
+ accessToken ||= params[:accessToken]
61
+ if accessToken
62
+ @graph = Koala::Facebook::API.new( accessToken )
63
+ @me = @graph.get_object( 'me', :fields => 'email' )
64
+ @current_user = User.where( :email => @me['email'] ).first
65
+ @profile = @current_user.profile
66
+ raise '98& - no profile' unless @profile
67
+ else
68
+ if soft
69
+ return
70
+ else
71
+ raise 'no access token'
72
+ end
73
+ end
74
+ end
75
+
76
+ ## Does not crap out if accessToken is missing
77
+ def soft_check_long_term_token
78
+ check_long_term_token soft=true
79
+ end
80
+
81
+ def check_multiprofile provider = 'google'
82
+ if 'google' == provider
83
+ # client_secrets = ::Google::APIClient::ClientSecrets.load
84
+ # accessToken = params[:accessToken]
85
+ # authorization = ::Google::Auth.get_application_default
86
+ # result = authorization.apply({ accessToken: params[:accessToken] })
87
+ # puts! result, 'googleauth result'
88
+
89
+ decoded_token = JWT.decode params[:idToken], nil, false
90
+
91
+ @current_user = User.find_by email: decoded_token[0]['email']
92
+
93
+ elsif 'facebook' == provider
94
+ # accessToken ||= params[:fb_long_access_token]
95
+
96
+ accessToken = request.headers[:accessToken]
97
+ accessToken ||= params[:accessToken]
98
+ if accessToken
99
+
100
+ #
101
+ # long-term token
102
+ #
103
+ params['domain'] = 'tgm.piousbox.com'
104
+ response = HTTParty.get "https://graph.facebook.com/v5.0/oauth/access_token?grant_type=fb_exchange_token&" +
105
+ "client_id=#{FB[params['domain']][:app]}&client_secret=#{FB[params['domain']][:secret]}&" +
106
+ "fb_exchange_token=#{accessToken}"
107
+ j = JSON.parse response.body
108
+ @long_term_token = j['access_token']
109
+
110
+
111
+ @graph = Koala::Facebook::API.new( accessToken )
112
+ @me = @graph.get_object( 'me', :fields => 'email' )
113
+ @current_user = User.where( :email => @me['email'] ).first
114
+ @current_user ||= User.create! email: @me['email'], password: SecureRandom.urlsafe_base64
115
+
116
+ @current_profile = @current_user.profile
117
+ if !@current_profile
118
+ begin
119
+ g = Gallery.find '5e1495e2d697f768ad0779eb'
120
+ rescue Mongoid::Errors::DocumentNotFound => e
121
+ g = Gallery.create id: '5e1495e2d697f768ad0779eb'
122
+ end
123
+ @current_profile = IshModels::UserProfile.create user: @current_user, name: @me['email'], email: @me['email']
124
+ test_newsitem = Newsitem.new gallery_id: '5e1495e2d697f768ad0779eb'
125
+ @current_profile.newsitems << test_newsitem
126
+ @current_profile.save
127
+ end
128
+ @current_profile.update fb_long_access_token: @long_term_token
129
+ else
130
+ @current_user = current_user if Rails.env.test?
131
+ end
132
+
133
+ elsif 'jwt' == provider
134
+ decoded = decode(params[:jwt_token])
135
+ @current_user = User.find decoded['user_id']
136
+ puts! @current_user, '@current_user from decoded'
137
+ else
138
+ raise "ww1 - not implemented"
139
+ end
140
+
141
+ sign_in @current_user, scope: :user
142
+ puts! current_user, 'did I sign in?'
143
+ current_ability
144
+ end
145
+
146
+
147
+
148
+ # same as check_profile but doesn't error out when jwt_token is missing or expired
149
+ def check_profile_optionally
150
+ if !params[:jwt_token]
151
+ # @current_user = User.new profile: Profile.new
152
+ else
153
+ begin
154
+ check_profile
155
+ rescue JWT::ExpiredSignature
156
+ Rails.logger.info("JWT::ExpiredSignature")
157
+ # @current_user = User.new profile: Profile.new
158
+ end
159
+ end
160
+ end
161
+
162
+ # this doesn't generate long-lived token, doesn't update user_profile
163
+ def check_profile
164
+ # return check_multiprofile 'google'
165
+ # return check_multiprofile 'facebook'
166
+ return check_multiprofile 'jwt'
167
+
168
+ accessToken = request.headers[:accessToken]
169
+ accessToken ||= params[:fb_long_access_token]
170
+ accessToken ||= params[:accessToken]
171
+ if accessToken
172
+ @graph = Koala::Facebook::API.new( accessToken )
173
+ @me = @graph.get_object( 'me', :fields => 'email' )
174
+ @current_user = User.find_by :email => @me['email']
175
+ else
176
+ @current_user = current_user if Rails.env.test?
177
+ end
178
+ @current_profile = @current_user.profile
179
+ @current_order = @current_profile.current_order
180
+ # orders.where( :submitted_at => nil ).first || ::CoTailors::Order.create( :profile_id => @current_profile.id )
181
+
182
+ ## for sedux
183
+ sign_in( @current_user )
184
+ end
185
+
186
+ def set_profile
187
+ accessToken = request.headers[:accessToken]
188
+ accessToken ||= params[:fb_long_access_token]
189
+ accessToken ||= params[:accessToken]
190
+
191
+ # params[:domain] ||= '_default'
192
+
193
+ if accessToken
194
+ begin
195
+ @graph = Koala::Facebook::API.new( accessToken )
196
+ @me = @graph.get_object( 'me', :fields => 'email' )
197
+ @current_user = User.find_or_create_by :email => @me['email']
198
+ @oauth = Koala::Facebook::OAuth.new( FB[params['domain']][:app], FB[params['domain']][:secret] )
199
+ get_token = get_long_token( accessToken )
200
+ @long_lived_token = get_token['access_token']
201
+
202
+ begin
203
+ @current_profile = IshModels::UserProfile.find_by :email => @me['email']
204
+ @current_profile.update_attributes({ :fb_access_token => @long_lived_token,
205
+ :fb_long_access_token => @long_lived_token,
206
+ :fb_expires_in => get_token['expires_in']
207
+ })
208
+ rescue Mongoid::Errors::DocumentNotFound
209
+ @current_profile = IshModels::UserProfile.create :user => @current_user, :email => @me['email'],
210
+ :fb_access_token => @long_lived_token,
211
+ :fb_long_access_token => @long_lived_token,
212
+ :fb_expires_in => get_token['expires_in'],
213
+ :fb_id => params[:id],
214
+ :name => params[:name],
215
+ :signed_request => params[:signedRequest]
216
+ end
217
+ @current_user.reload
218
+ rescue Koala::Facebook::AuthenticationError => e
219
+ render :json => { :status => :not_ok, :errors => "Probably expired token: #{accessToken}" }
220
+ return
221
+ end
222
+ else
223
+ @current_user = current_user if Rails.env.test?
224
+ end
225
+ @current_profile = @current_user.profile
226
+ @current_order = @current_profile.current_order
227
+ # orders.where( :submitted_at => nil ).first || ::CoTailors::Order.new( :profile_id => @current_profile.id )
228
+ end
229
+
230
+ def get_long_token accessToken
231
+ url = "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&" +
232
+ "client_id=#{FB[params['domain']][:app]}&client_secret=#{FB[params['domain']][:secret]}&fb_exchange_token=#{accessToken}"
233
+ result = HTTParty.get url
234
+ token = JSON.parse result.body
235
+ return token # ['access_token']
236
+ end
237
+
238
+ def current_ability
239
+ # @current_user ||= User.new({ profile: ::IshModels::UserProfile.new })
240
+ @current_ability ||= Ishapi::Ability.new( current_user )
241
+ end
242
+
243
+ def puts! a, b=''
244
+ puts "+++ +++ #{b}"
245
+ puts a.inspect
246
+ end
247
+
248
+ # jwt
249
+ def check_jwt
250
+ begin
251
+ decoded = decode(params[:jwt_token])
252
+ @current_user = User.find decoded['user_id']
253
+ rescue JWT::ExpiredSignature
254
+ Rails.logger.info("JWT::ExpiredSignature")
255
+ rescue JWT::DecodeError
256
+ Rails.logger.info("JWT::DecodeError")
257
+ end
258
+ # @current_user ||= User.new
259
+ current_ability
260
+ end
261
+
262
+ # jwt
263
+ def encode(payload, exp = 2.hours.from_now)
264
+ payload[:exp] = exp.to_i
265
+ JWT.encode(payload, Rails.application.secrets.secret_key_base.to_s)
266
+ end
267
+
268
+ # jwt
269
+ def decode(token)
270
+ decoded = JWT.decode(token, Rails.application.secrets.secret_key_base.to_s)[0]
271
+ HashWithIndifferentAccess.new decoded
272
+ end
273
+
274
+ end
275
+ end
@@ -2,8 +2,8 @@ require_dependency "ishapi/application_controller"
2
2
  module Ishapi
3
3
  class MapsController < ApplicationController
4
4
 
5
- before_action :soft_check_long_term_token, only: [ :show ]
6
-
5
+ before_action :check_profile, only: [ :show ]
6
+
7
7
  def index
8
8
  authorize! :index, ::Gameui::Map
9
9
  @maps = ::Gameui::Map.all
@@ -12,6 +12,7 @@ module Ishapi
12
12
  def show
13
13
  @map = ::Gameui::Map.find_by slug: params[:slug]
14
14
  @markers = @map.markers.where( is_active: true )
15
+ @newsitems = @map.newsitems
15
16
 
16
17
  case @map.ordering_type
17
18
  when ::Gameui::Map::ORDERING_TYPE_ALPHABETIC
@@ -8,8 +8,12 @@ module Ishapi
8
8
  before_action :check_profile
9
9
 
10
10
  def account
11
- @profile = current_user.profile
11
+ @profile = current_user&.profile
12
12
  authorize! :show, @profile
13
+ rescue CanCan::AccessDenied
14
+ render json: {
15
+ status: :not_ok,
16
+ }, status: 401
13
17
  end
14
18
 
15
19
  private
@@ -96,6 +96,8 @@ module Ishapi
96
96
  authorize! :unlock, ::Ish::Payment
97
97
  item = Object::const_get(params['kind']).find params['id']
98
98
 
99
+ puts! params, 'unlocking...'
100
+
99
101
  existing = Purchase.where( user_profile: @current_user.profile, item: item ).first
100
102
  if existing
101
103
  render status: 200, json: { status: :ok, message: 'already purchased' }
@@ -3,7 +3,7 @@ require_dependency "ishapi/application_controller"
3
3
  module Ishapi
4
4
  class SitesController < ApplicationController
5
5
 
6
- before_action :check_profile_optionally, only: %i| show |
6
+ before_action :check_profile, only: %i| show |
7
7
 
8
8
  def index
9
9
  authorize! :index, ::Site
@@ -32,16 +32,24 @@ module Ishapi
32
32
  else
33
33
  render :json => { :status => :unauthorized}, :status => :unauthorized
34
34
  render :status => :unauthorized
35
+ return
35
36
  end
36
37
  end
37
38
 
38
- @galleries = @site.galleries.limit( 10 )
39
- @newsitems = @site.newsitems.limit( @site.newsitems_per_page )
40
- @reports = @site.reports.limit( 10 )
39
+ @galleries = @site.galleries.limit( 10 ) # @TODO: paginate
40
+ @newsitems = @site.newsitems.limit( @site.newsitems_per_page ) # @TODO: paginate
41
+ @reports = @site.reports.limit( 10 ) # @TODO: paginate
41
42
  @langs = ::Site.where( :domain => domain ).map( &:lang )
42
43
  @feature_tags = @site.tags.where( :is_feature => true )
43
-
44
44
  end
45
45
 
46
+ private
47
+
48
+ # # jwt
49
+ # def decode(token)
50
+ # decoded = JWT.decode(token, Rails.application.secrets.secret_key_base.to_s)[0]
51
+ # HashWithIndifferentAccess.new decoded
52
+ # end
53
+
46
54
  end
47
55
  end
@@ -4,6 +4,8 @@ module Ishapi
4
4
  class UsersController < ApplicationController
5
5
  before_action :set_profile, :only => [ :fb_sign_in, :show ]
6
6
 
7
+ skip_authorization_check only: %i| login |
8
+
7
9
  def fb_sign_in
8
10
  authorize! :fb_sign_in, Ishapi
9
11
  # render :json => { :status => :ok }
@@ -14,5 +16,25 @@ module Ishapi
14
16
  authorize! :fb_sign_in, Ishapi
15
17
  end
16
18
 
19
+ def login
20
+ @current_user = User.where( email: params[:email] ).first
21
+ if !@current_user
22
+ render json: { status: :not_ok }, status: 401
23
+ return
24
+ end
25
+ if @current_user.valid_password?(params[:password])
26
+ # from: application_controller#long_term_token
27
+
28
+ # send the jwt to client
29
+ @jwt_token = encode(user_id: @current_user.id.to_s)
30
+ render json: {
31
+ email: @current_user.email,
32
+ jwt_token: @jwt_token,
33
+ long_term_token: @long_term_token,
34
+ n_unlocks: @current_user.profile.n_unlocks,
35
+ }
36
+ end
37
+ end
38
+
17
39
  end
18
40
  end
@@ -14,6 +14,14 @@ json.cache! this_key do
14
14
  json.img_path @map.img_path
15
15
  json.updated_at @map.updated_at
16
16
 
17
+ json.breadcrumbs do
18
+ json.array! @map.breadcrumbs do |b|
19
+ json.name b[:name]
20
+ json.slug b[:slug]
21
+ json.link b[:link]
22
+ end
23
+ end
24
+
17
25
  json.markers do
18
26
  json.array! @markers do |marker|
19
27
  json.name marker.name
@@ -13,6 +13,8 @@ json.cache! key do
13
13
  json.subhead @site.subhead
14
14
  json.description @site.description
15
15
 
16
+ json.email @current_user.email
17
+
16
18
  json.is_ads_enabled @site.is_ads_enabled
17
19
  json.play_videos_in_preview @site.play_videos_in_preview
18
20
  json.newsitems_per_page @site.newsitems_per_page
data/config/routes.rb CHANGED
@@ -27,7 +27,8 @@ Ishapi::Engine.routes.draw do
27
27
  get 'maps', to: 'maps#index'
28
28
  get 'maps/view/:slug', to: 'maps#show'
29
29
  get 'markers/view/:slug', to: 'maps#show_marker'
30
- get "/my/account", to: "my/my#account"
30
+ get "/my/account", to: "my/my#account"
31
+ post "/my/account", to: "my/my#account"
31
32
  namespace :my do
32
33
  get 'galleries', to: 'galleries#index'
33
34
  get 'newsitems', to: 'newsitems#index'
@@ -65,6 +66,7 @@ Ishapi::Engine.routes.draw do
65
66
  post 'users/profile/update', :to => 'users#update'
66
67
  get 'users/profile', :to => 'users#show' # @TODO: only for testing! accessToken must be hidden
67
68
  match 'users/long_term_token', to: 'application#long_term_token', via: [ :get, :post ]
69
+ post 'users/login', to: 'users#login'
68
70
 
69
71
  get 'venues', :to => 'venues#index'
70
72
  get 'venues/view/:venuename', :to => 'venues#show'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ishapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8.142
4
+ version: 0.1.8.146
5
5
  platform: ruby
6
6
  authors:
7
7
  - piousbox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-31 00:00:00.000000000 Z
11
+ date: 2021-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -196,6 +196,7 @@ files:
196
196
  - app/assets/stylesheets/scaffold.css
197
197
  - app/controllers/ishapi/addresses_controller.rb
198
198
  - app/controllers/ishapi/application_controller.rb
199
+ - app/controllers/ishapi/application_controller.rb-trash
199
200
  - app/controllers/ishapi/articles_controller.rb
200
201
  - app/controllers/ishapi/cities_controller.rb
201
202
  - app/controllers/ishapi/events_controller.rb