ishapi 0.1.8.133 → 0.1.8.134

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: 214eb06a86cd16e99e941a3c22331117b6fde6f617d21149b26584718e81535b
4
- data.tar.gz: 21b011a4ca8f9daf09753bb6ca3df95c5f8b536d321b586b9b193bcf65c03546
3
+ metadata.gz: a9055c8aee254cef203fa0ba8a7c82fd98d7c4b66870342d2286201ef7613dbd
4
+ data.tar.gz: eee54217f1e118989c390a1e7b73c49284f441504f661f1d4b189da385436720
5
5
  SHA512:
6
- metadata.gz: 4bbfa9c73cb0e80eb74a7c52c2e40f120239445caabb62c153b65c21fe77258f088b289b18eab506b8a0a759ae913edae63c6561fbca2464b869ced7176a98a7
7
- data.tar.gz: 3c62e845e6ec976248c8c94cd34b4bc87a370548319b8b2459560e0ed610c369ceac97e00dc5f76bb9c9805ba2d1c238b43897fd74c4a01e9722e6832694b8ee
6
+ metadata.gz: 38e5d8e9948fd4c50e4df5045e1a3e8c2e8789b45b6f8697cd7f8b6d966cf48f59869ea73399e596e75457eeca9ea351d0f488e0e8bb9ee6029f0001829e3ca9
7
+ data.tar.gz: 0e633543d607411b971a437d9ad7f28f603a54754ff667ded394ac046fa9b2b64e4bdb2c0b1a1ae2ff1a8f13f6dc53ee0c284cd8148f7dbe0ba6acae1170bdfb
@@ -22,23 +22,32 @@ module Ishapi
22
22
 
23
23
  params['domain'] = 'tgm.piousbox.com'
24
24
 
25
- response = HTTParty.get "https://graph.facebook.com/v5.0/oauth/access_token?grant_type=fb_exchange_token&" +
25
+ response = ::HTTParty.get "https://graph.facebook.com/v5.0/oauth/access_token?grant_type=fb_exchange_token&" +
26
26
  "client_id=#{FB[params['domain']][:app]}&client_secret=#{FB[params['domain']][:secret]}&" +
27
27
  "fb_exchange_token=#{accessToken}"
28
28
  j = JSON.parse response.body
29
- puts! j, 'fb response'
30
- @long_term_token = j['access_token']
31
-
32
- # get user email
29
+ @long_term_token = j['access_token']
33
30
  @graph = Koala::Facebook::API.new( accessToken )
34
31
  @me = @graph.get_object( 'me', :fields => 'email' )
35
32
  @current_user = User.where( :email => @me['email'] ).first
36
- @profile = @current_user.profile
33
+
34
+ puts! @current_user, '#long_term_token @current_user'
37
35
 
38
36
  # send the jwt to client
39
- @jwt_token = encode(user_id: @current_user.id)
37
+ @jwt_token = encode(user_id: @current_user.id.to_s)
38
+
39
+ render json: {
40
+ email: @current_user.email,
41
+ jwt_token: @jwt_token,
42
+ long_term_token: @long_term_token,
43
+ n_unlocks: @current_user.profile.n_unlocks,
44
+ }
45
+ end
40
46
 
41
- render json: { long_term_token: @long_term_token, jwt_token: @jwt_token }
47
+ def home
48
+ authorize! :welcome_home, Ishapi
49
+ render :json => { :status => :ok, :message => 'Ishapi::ApiController.home',
50
+ :n_reports => Report.count, :n_cities => City.count }
42
51
  end
43
52
 
44
53
  #
@@ -73,7 +82,6 @@ module Ishapi
73
82
  ## Does not crap out if accessToken is missing
74
83
  def soft_check_long_term_token
75
84
  check_long_term_token soft=true
76
- # puts! @profile, 'soft_check_long_term_token() profile'
77
85
  end
78
86
 
79
87
  def check_multiprofile provider = 'google'
@@ -132,21 +140,37 @@ module Ishapi
132
140
  puts! @current_profile, 'current_profile'
133
141
 
134
142
  elsif 'jwt' == provider
135
- decoded = decode(params[:jwt_token])
136
- puts! decoded, 'decoded'
137
- @current_user = User.find decoded[:user_id]
143
+ begin
144
+ decoded = decode(params[:jwt_token])
145
+ rescue JWT::ExpiredSignature
146
+ # @TODO: refactor [ref-5]
147
+ @current_user = User.new profile: Profile.new
148
+ sign_in @current_user, scope: :user
149
+ set_current_ability
150
+ return
151
+ end
152
+ @current_user = User.find decoded['user_id']
138
153
 
139
154
  else
140
155
  puts! 'check_multiprofile(): no access token'
141
156
  raise "ww1 - not implemented"
142
157
  end
143
158
 
159
+ # @TODO: refactor [ref-5]
144
160
  sign_in @current_user, scope: :user
145
161
  set_current_ability
146
162
  end
147
163
 
164
+ # same as check_profile but doesn't error out when jwt_token is missing
165
+ def check_profile_optionally
166
+ if !params[:jwt_token]
167
+ @current_user = User.new profile: Profile.new
168
+ else
169
+ check_profile
170
+ end
171
+ end
172
+
148
173
  # this doesn't generate long-lived token, doesn't update user_profile
149
- # this is only for facebook now
150
174
  def check_profile
151
175
  puts! params, 'params'
152
176
 
@@ -21,7 +21,7 @@ module Ishapi
21
21
  :amount => params[:amount],
22
22
  :currency => 'usd',
23
23
  :source => params[:stripeToken],
24
- :destination => {
24
+ :destination => {
25
25
  :account => acct,
26
26
  }
27
27
  )
@@ -46,7 +46,7 @@ module Ishapi
46
46
  def do_purchase
47
47
  authorize! :do_purchase, ::Gameui
48
48
  item = params[:className].constantize.find_by_slug( params[:slug] )
49
-
49
+
50
50
  raise 'no such item' if !item
51
51
  raise 'too little funds' if @profile.n_stars < item.premium_tier
52
52
 
@@ -4,7 +4,16 @@ module Ishapi
4
4
  class MyController < Ishapi::ApplicationController
5
5
 
6
6
  # before_action :set_profile # this is DoS on FB - disabled
7
- before_action :do_login
7
+ # before_action :do_login
8
+ before_action :check_profile
9
+
10
+ def account
11
+ puts! params, 'my account'
12
+
13
+ @profile = current_user.profile
14
+ authorize! :show, @profile
15
+ end
16
+
8
17
 
9
18
  private
10
19
 
@@ -2,6 +2,12 @@ require_dependency "ishapi/application_controller"
2
2
  module Ishapi
3
3
  class PaymentsController < ApplicationController
4
4
 
5
+ before_action :check_profile, only: %i| create2 unlock |
6
+
7
+ ##
8
+ ## this is for invoices on wasya.co, isn't it?
9
+ ## 20200712
10
+ ##
5
11
  def create
6
12
  authorize! :open_permission, ::Ishapi
7
13
  begin
@@ -18,11 +24,10 @@ module Ishapi
18
24
  :amount => amount_cents,
19
25
  :currency => 'usd',
20
26
  :source => params[:token][:id],
21
- :destination => {
27
+ :destination => {
22
28
  :account => acct,
23
29
  }
24
30
  )
25
- # puts! charge, 'charge'
26
31
 
27
32
  payment.charge = JSON.parse( charge.to_json )
28
33
  if payment.save
@@ -36,6 +41,73 @@ module Ishapi
36
41
  end
37
42
  end
38
43
 
44
+ ## This is for guyd _vp_ 20200721
45
+ def create2
46
+ authorize! :create, ::Ish::Payment
47
+
48
+ begin
49
+ amount_cents = 503 # @TODO: change
50
+
51
+ ::Stripe.api_key = STRIPE_SK
52
+ intent = Stripe::PaymentIntent.create({
53
+ amount: amount_cents,
54
+ currency: 'usd',
55
+ metadata: { integration_check: "accept_a_payment" },
56
+ })
57
+
58
+ payment = Ish::Payment.create!(
59
+ client_secret: intent.client_secret,
60
+ email: @current_user.email,
61
+ payment_intent_id: intent.id,
62
+ profile_id: @current_user.profile.id )
63
+
64
+ render json: { client_secret: intent.client_secret }
65
+ rescue Mongoid::Errors::DocumentNotFound => e
66
+ puts! e, 'e'
67
+ render :status => 404, :json => e
68
+ end
69
+ end
70
+
71
+ ## webhook
72
+ def stripe_confirm
73
+ authorize! :open_permission, ::Ishapi
74
+ payload = request.body.read
75
+ event = nil
76
+ begin
77
+ event = Stripe::Event.construct_from(JSON.parse(payload, symbolize_names: true))
78
+ rescue StandardError => e
79
+ puts! e, 'e'
80
+ render status: 400, json: { status: :not_ok }
81
+ return
82
+ end
83
+
84
+ payment_intent = event.data.object
85
+
86
+ payment = Ish::Payment.where( payment_intent_id: payment_intent.id ).first
87
+ if payment && payment_intent['status'] == 'succeeded'
88
+ payment.update_attributes( status: :confirmed )
89
+ payment.profile.update_attributes!( n_unlocks: payment.profile.n_unlocks + 5 )
90
+ end
91
+
92
+ render status: 200, json: { status: :ok }
93
+ end
94
+
95
+ def unlock
96
+ authorize! :unlock, ::Ish::Payment
97
+ item = Object::const_get(params['kind']).find params['id']
98
+
99
+ existing = Purchase.where( user_profile: @current_user.profile, item: item ).first
100
+ if existing
101
+ render status: 200, json: { status: :ok, message: 'already purchased' }
102
+ return
103
+ end
104
+
105
+ @current_user.profile.update_attributes n_unlocks: @current_user.profile.n_unlocks - 1 # @TODO: the number is variable
106
+ purchase = ::Gameui::PremiumPurchase.create!( item: item, user_profile: @current_user.profile, )
107
+
108
+ render status: 200, json: { status: :ok }
109
+ end
110
+
39
111
  end
40
112
  end
41
113
 
@@ -3,6 +3,8 @@ 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 |
7
+
6
8
  def index
7
9
  authorize! :index, ::Site
8
10
  @sites = ::Site.all
@@ -14,10 +16,9 @@ module Ishapi
14
16
  else
15
17
  domain = params[:domain]
16
18
  end
17
- @site = ::Site.find_by :domain => domain, :lang => :en
19
+ @site = ::Site.find_by(domain: domain, lang: :en)
18
20
  authorize! :show, @site
19
21
 
20
-
21
22
  if @site.is_private
22
23
  if !params[:accessToken]
23
24
  render :json => { :status => :unauthorized}, :status => :unauthorized
@@ -9,12 +9,5 @@ module Ishapi
9
9
  authorize! :show, @profile
10
10
  end
11
11
 
12
- def my
13
- puts! params, 'params 233'
14
-
15
- @profile = current_user.profile
16
- authorize! :show, @profile
17
- end
18
-
19
12
  end
20
13
  end
@@ -13,15 +13,17 @@ class Ishapi::Ability
13
13
  can :manage, :all
14
14
  end
15
15
 
16
+ can [ :update ], ::CoTailors::Address do |address|
17
+ puts [ user.inspect, address.inspect ], '+++ user in cancancan'
18
+ true
19
+ end
20
+
16
21
  can [ :show ], Gallery do |gallery|
17
22
  gallery.user_profile == user.profile
18
23
  end
19
24
  can [ :do_purchase ], ::Gameui
20
25
 
21
- can [ :update ], ::CoTailors::Address do |address|
22
- puts [ user.inspect, address.inspect ], '+++ user in cancancan'
23
- true
24
- end
26
+ can [ :create, :unlock ], ::Ish::Payment
25
27
 
26
28
  can [ :buy_stars ], ::IshModels::UserProfile
27
29
 
@@ -42,6 +44,11 @@ class Ishapi::Ability
42
44
 
43
45
  can [ :index, :show ], Event
44
46
 
47
+ #
48
+ # Ish::P
49
+ #
50
+
51
+
45
52
  #
46
53
  # G
47
54
  #
@@ -8,6 +8,8 @@ json.n_galleries @profile.galleries.count
8
8
  json.n_videos @profile.videos.count
9
9
  json.n_stars @profile.n_stars
10
10
 
11
+ json.n_unlocks @profile.n_unlocks
12
+
11
13
  if @profile.current_city
12
14
  json.current_city @profile.current_city
13
15
  end
@@ -10,7 +10,7 @@ json.newsitems do
10
10
  json.name item.name
11
11
  json.created_at item.created_at
12
12
  json.updated_at item.updated_at
13
-
13
+
14
14
  if item.gallery
15
15
  json.item_type 'gallery'
16
16
  json.name item.gallery.name
@@ -39,7 +39,7 @@ json.newsitems do
39
39
  json.username item.report.user_profile.name if item.report.user_profile
40
40
 
41
41
  if item.report.photo
42
- json.photo_s169_url item.report.photo.photo.url( :s169 )
42
+ json.photo_s169_url item.report.photo.photo.url( :s169 )
43
43
  json.photo_thumb2_url item.report.photo.photo.url( :thumb2 )
44
44
  end
45
45
 
@@ -51,7 +51,7 @@ json.newsitems do
51
51
  json.is_purchased current_user.profile.has_premium_purchase( item.report )
52
52
  end
53
53
  end
54
-
54
+
55
55
  if item.video_id
56
56
  json.partial! 'ishapi/videos/show', :video => Video.unscoped.find( item.video_id )
57
57
  end
@@ -60,6 +60,6 @@ json.newsitems do
60
60
  json.item_type 'photo'
61
61
  json.partial! 'ishapi/photos/index', :photos => [ item.photo ]
62
62
  end
63
-
63
+
64
64
  end
65
65
  end
@@ -1,4 +1,4 @@
1
-
1
+
2
2
  #
3
3
  # ishapi / sites / show
4
4
  #
@@ -22,7 +22,7 @@ json.cache! key do
22
22
  json.partial! 'ishapi/newsitems/index', :newsitems => @newsitems, :resource => @site
23
23
  json.partial! 'ishapi/reports/index', :reports => @reports, :resource => @site
24
24
  json.partial! 'ishapi/videos/index', :videos => @site.videos
25
-
25
+
26
26
  json.feature_tags do
27
27
  json.array! @feature_tags do |feature_tag|
28
28
  json.partial! 'ishapi/tags/widget', :tag => feature_tag
@@ -1,6 +1,6 @@
1
1
  Ishapi::Engine.routes.draw do
2
- root :to => 'api#home'
3
- post 'home', :to => 'api#home'
2
+ root :to => 'application#home'
3
+ post 'home', :to => 'application#home'
4
4
 
5
5
  resources :addresses
6
6
 
@@ -15,8 +15,6 @@ Ishapi::Engine.routes.draw do
15
15
  namespace :co_tailors do
16
16
  end
17
17
 
18
- post 'do_purchase', to: 'gameui#do_purchase'
19
-
20
18
  get 'events/view/:eventname', :to => 'events#show'
21
19
 
22
20
  get 'galleries', :to => 'galleries#index'
@@ -29,17 +27,20 @@ Ishapi::Engine.routes.draw do
29
27
  get 'maps', to: 'maps#index'
30
28
  get 'maps/view/:slug', to: 'maps#show'
31
29
  get 'markers/view/:slug', to: 'maps#show_marker'
32
-
33
- get 'my/newsitems', to: 'newsitems#index'
34
- get 'my/account', to: 'user_profiles#my'
30
+ get "/my/account", to: "my/my#account"
35
31
  namespace :my do
36
- # post 'reports', :to => 'reports#index'
37
- get 'reports', :to => 'reports#index'
38
- get 'videos', to: 'videos#index'
39
- post 'videos', to: 'videos#index'
32
+ get 'newsitems', to: 'newsitems#index'
33
+ get 'reports', to: 'reports#index'
34
+ get 'videos', to: 'videos#index'
35
+ post 'videos', to: 'videos#index'
40
36
  end
41
37
 
38
+ post 'do_purchase', to: 'gameui#do_purchase' # @TODO: rename to just purchase, or destroy endpoint
42
39
  post 'payments', :to => 'payments#create'
40
+ post 'payments2', :to => 'payments#create2' # @TODO: change
41
+ get 'payments2', to: 'payments#create2'
42
+ post 'payments/unlock', to: 'payments#unlock' # do_purchase
43
+ post 'stripe_confirm', to: 'payments#stripe_confirm' # @TODO: test-drive
43
44
 
44
45
  get 'profiles/view/:username', :to => 'user_profiles#show'
45
46
 
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.133
4
+ version: 0.1.8.134
5
5
  platform: ruby
6
6
  authors:
7
7
  - piousbox
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-04 00:00:00.000000000 Z
11
+ date: 2020-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -195,7 +195,6 @@ files:
195
195
  - app/assets/stylesheets/ishapi/articles.css
196
196
  - app/assets/stylesheets/scaffold.css
197
197
  - app/controllers/ishapi/addresses_controller.rb
198
- - app/controllers/ishapi/api_controller.rb
199
198
  - app/controllers/ishapi/application_controller.rb
200
199
  - app/controllers/ishapi/articles_controller.rb
201
200
  - app/controllers/ishapi/cities_controller.rb
@@ -249,6 +248,7 @@ files:
249
248
  - app/views/ishapi/maps/index.jbuilder
250
249
  - app/views/ishapi/maps/show.jbuilder
251
250
  - app/views/ishapi/measurements/_show.jbuilder
251
+ - app/views/ishapi/my/my/account.jbuilder
252
252
  - app/views/ishapi/my/videos/index.jbuilder
253
253
  - app/views/ishapi/newsitems/_index.jbuilder
254
254
  - app/views/ishapi/newsitems/index.jbuilder
@@ -265,7 +265,6 @@ files:
265
265
  - app/views/ishapi/tags/_widget.jbuilder
266
266
  - app/views/ishapi/tags/index.jbuilder
267
267
  - app/views/ishapi/tags/show.jbuilder
268
- - app/views/ishapi/user_profiles/my.jbuilder
269
268
  - app/views/ishapi/user_profiles/show.jbuilder
270
269
  - app/views/ishapi/users/_index.jbuilder
271
270
  - app/views/ishapi/users/show.jbuilder
@@ -284,7 +283,7 @@ homepage: http://wasya.co
284
283
  licenses:
285
284
  - MIT
286
285
  metadata: {}
287
- post_install_message:
286
+ post_install_message:
288
287
  rdoc_options: []
289
288
  require_paths:
290
289
  - lib
@@ -300,7 +299,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
300
299
  version: '0'
301
300
  requirements: []
302
301
  rubygems_version: 3.0.6
303
- signing_key:
302
+ signing_key:
304
303
  specification_version: 4
305
304
  summary: Summary of Ishapi.
306
305
  test_files: []
@@ -1,13 +0,0 @@
1
- require_dependency "ishapi/application_controller"
2
-
3
- module Ishapi
4
- class ApiController < UnrestrictedController
5
-
6
- def home
7
- authorize! :welcome_home, Ishapi
8
- render :json => { :status => :ok, :message => 'Ishapi::ApiController.home',
9
- :n_reports => Report.count, :n_cities => City.count }
10
- end
11
-
12
- end
13
- end