app_manager 2.0.0 → 2.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +11 -11
- data/README.md +7 -4
- data/app/controllers/app_manager/charges_controller.rb +10 -9
- data/app/controllers/app_manager/plans_controller.rb +3 -6
- data/lib/app_manager/client/connection.rb +3 -1
- data/lib/app_manager/client/plans.rb +6 -2
- data/lib/app_manager/fail_safe.rb +6 -10
- data/lib/app_manager/graphql_helper.rb +5 -8
- data/lib/app_manager/model.rb +32 -10
- data/lib/app_manager/set_local_storage.rb +34 -0
- data/lib/app_manager/version.rb +1 -1
- data/lib/app_manager.rb +0 -27
- metadata +3 -3
- data/lib/app_manager/set_cookie.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be4fee3fa2e98fefd78bc65eb9172801baadbc53b302b10c885fd113dfa1a508
|
4
|
+
data.tar.gz: 2c0a489b9bc8fca1f6338373d0fa48b6495d29f794fd3f4fc70c4e6a72271377
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56fa65b2c2e6972d4b0ba43fe5752068f6583b412eb29c55c46d6ee11353af3e374919384ca5d8289b0b13648c05c5cbb1a7fad80cec46a9348b175504330668
|
7
|
+
data.tar.gz: e24bc7e35e1a3046a637b6805c03fe2a0bce0e9014bb13cd34f5168abc96140aba10974da887dbfa7113a636ee4776fd224b6fa3535855d0d860cb6ad319b797
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
app_manager (2.
|
4
|
+
app_manager (2.2.2)
|
5
5
|
activerecord-import (~> 1.4)
|
6
6
|
httparty
|
7
7
|
kaminari (>= 0.16.3)
|
@@ -68,7 +68,7 @@ GEM
|
|
68
68
|
activemodel (= 7.1.3.2)
|
69
69
|
activesupport (= 7.1.3.2)
|
70
70
|
timeout (>= 0.4.0)
|
71
|
-
activerecord-import (1.
|
71
|
+
activerecord-import (1.6.0)
|
72
72
|
activerecord (>= 4.2)
|
73
73
|
activestorage (7.1.3.2)
|
74
74
|
actionpack (= 7.1.3.2)
|
@@ -89,7 +89,7 @@ GEM
|
|
89
89
|
addressable (2.8.0)
|
90
90
|
public_suffix (>= 2.0.2, < 5.0)
|
91
91
|
base64 (0.2.0)
|
92
|
-
bigdecimal (3.1.
|
92
|
+
bigdecimal (3.1.7)
|
93
93
|
builder (3.2.4)
|
94
94
|
coderay (1.1.3)
|
95
95
|
concurrent-ruby (1.2.3)
|
@@ -137,8 +137,8 @@ GEM
|
|
137
137
|
marcel (1.0.4)
|
138
138
|
method_source (1.0.0)
|
139
139
|
mini_mime (1.1.5)
|
140
|
-
mini_portile2 (2.8.
|
141
|
-
minitest (5.22.
|
140
|
+
mini_portile2 (2.8.6)
|
141
|
+
minitest (5.22.3)
|
142
142
|
multi_xml (0.6.0)
|
143
143
|
mutex_m (0.2.0)
|
144
144
|
net-imap (0.3.7)
|
@@ -148,10 +148,10 @@ GEM
|
|
148
148
|
net-protocol
|
149
149
|
net-protocol (0.2.2)
|
150
150
|
timeout
|
151
|
-
net-smtp (0.
|
151
|
+
net-smtp (0.5.0)
|
152
152
|
net-protocol
|
153
|
-
nio4r (2.7.
|
154
|
-
nokogiri (1.15.
|
153
|
+
nio4r (2.7.1)
|
154
|
+
nokogiri (1.15.6)
|
155
155
|
mini_portile2 (~> 2.8.2)
|
156
156
|
racc (~> 1.4)
|
157
157
|
pry (0.14.1)
|
@@ -161,7 +161,7 @@ GEM
|
|
161
161
|
stringio
|
162
162
|
public_suffix (4.0.6)
|
163
163
|
racc (1.7.3)
|
164
|
-
rack (3.0.
|
164
|
+
rack (3.0.10)
|
165
165
|
rack-session (2.0.0)
|
166
166
|
rack (>= 3.0.0)
|
167
167
|
rack-test (2.1.0)
|
@@ -199,9 +199,9 @@ GEM
|
|
199
199
|
thor (~> 1.0, >= 1.2.2)
|
200
200
|
zeitwerk (~> 2.6)
|
201
201
|
rake (13.0.6)
|
202
|
-
rdoc (6.6.
|
202
|
+
rdoc (6.6.3.1)
|
203
203
|
psych (>= 4.0.0)
|
204
|
-
reline (0.
|
204
|
+
reline (0.5.3)
|
205
205
|
io-console (~> 0.5)
|
206
206
|
rexml (3.2.5)
|
207
207
|
rspec (3.11.0)
|
data/README.md
CHANGED
@@ -198,7 +198,9 @@ and then you can use follwing methods with your shop objects.
|
|
198
198
|
|
199
199
|
@shop.get_active_charge_app_manager # return active charge hash from app manager otherwise nil
|
200
200
|
|
201
|
-
@shop.update_app_manager_charge # return true if shop has shopify recurring charge but app manager doesn't then it update to app manager and return true otherwise nil
|
201
|
+
@shop.update_app_manager_charge # return true if shop has shopify recurring charge but app manager doesn't then it update to app manager and return true otherwise nil. This method also accepts current shopify charge id, so you can pass it if you already. This will reduce the extra call like this @shop.update_app_manager_charge("xx23432434")
|
202
|
+
|
203
|
+
@shop.update_app_manager_charge_with_plan_id # same as update_app_manager_charge method, the only difference is that, it will not check the plan_id in the shop table is valid from app manager. This method also accepts two parameters, first is current shopify charge id and second is plan_id .It shop table doesn't have plan_id saved then you can pass in second parameter. @shop.update_app_manager_charge_with_plan_id("xx23432434",23)
|
202
204
|
|
203
205
|
@shop.get_current_shopify_charge # return active charge hash from shopify https://shopify.dev/docs/api/admin-graphql/2022-10/queries/currentAppInstallation otherwise nil
|
204
206
|
|
@@ -217,19 +219,20 @@ and then you can use follwing methods with your shop objects.
|
|
217
219
|
* Update app manager gem in your project's Gemfile
|
218
220
|
|
219
221
|
```ruby
|
220
|
-
gem 'app_manager', '2.
|
222
|
+
gem 'app_manager', '2.2.2'
|
221
223
|
```
|
222
224
|
* In Rails project, in application.rb, add following line after require "rails/all" line
|
223
225
|
|
224
226
|
```ruby
|
225
|
-
require 'app_manager/
|
227
|
+
require 'app_manager/set_local_storage'
|
226
228
|
```
|
227
229
|
|
228
230
|
* In route.rb file, add following route with constraints
|
229
231
|
```ruby
|
230
232
|
condition = ->(request) { request.path_info.include?('/discount/') }
|
233
|
+
plan_url = "https://admin.shopify.com/admin/apps/#{ENV['SHOPIFY_APP_SLUG']}/home/plan"
|
231
234
|
constraints(condition) do
|
232
|
-
get '/discount/*any', to: AppManager::
|
235
|
+
get '/discount/*any', to: AppManager::SetLocalStorage.new(Rails.application, condition, plan_url)
|
233
236
|
end
|
234
237
|
```
|
235
238
|
* If updating gem from 1.6.1, then run these commands on rails root.
|
@@ -41,6 +41,7 @@ module AppManager
|
|
41
41
|
end
|
42
42
|
if @shop.update(update_info)
|
43
43
|
begin
|
44
|
+
plan_data['old_plan'] = params[:old_plan] || nil;
|
44
45
|
AppManager::EventHandler.new('charge_created', {
|
45
46
|
"plan" => plan_data,
|
46
47
|
"charge" => nil,
|
@@ -59,11 +60,12 @@ module AppManager
|
|
59
60
|
end
|
60
61
|
request_data = {'shop' => @shop.shopify_domain, 'timestamp' => Time.now.to_i, 'plan' => params[:plan_id]}
|
61
62
|
request_data.merge!('host' => params['host']) if params['host'].present?
|
63
|
+
request_data.merge!('old_plan' => params['old_plan']) if params['old_plan'].present?
|
62
64
|
|
63
65
|
return_url = "#{app_url}#{plan_callback_path}?#{Rack::Utils.build_query(request_data)}"
|
64
|
-
discount_cookie = AppManager.resolve_from_cookies(self.request)
|
65
66
|
gq_obj = AppManager::GraphqlHelper.new(@shop.shopify_domain, @shop.shopify_token)
|
66
|
-
|
67
|
+
discount_local_storage = params[:discount_code].present? && !params[:discount_code].nil? ? params[:discount_code] : nil
|
68
|
+
data = gq_obj.recurring_charge_api_call(plan_data, return_url, @shop,discount_local_storage)
|
67
69
|
if data.present? && !data["errors"].present? && (data["data"].present? && data["data"]["appSubscriptionCreate"].present? && (!data["data"]["appSubscriptionCreate"]["userErrors"].any? && data["data"]["appSubscriptionCreate"]["confirmationUrl"]))
|
68
70
|
redirect_charge = data["data"]["appSubscriptionCreate"]["confirmationUrl"]
|
69
71
|
render json: {'redirect_url' => redirect_charge}
|
@@ -88,8 +90,7 @@ module AppManager
|
|
88
90
|
shopify_token = @field_names['shopify_token']
|
89
91
|
shopify_domain = @field_names['name']
|
90
92
|
grandfathered_field = @field_names['grandfathered']
|
91
|
-
discounted_plans =
|
92
|
-
discounted_plans = discounted_plans.map!(&:to_s) if discounted_plans.any?
|
93
|
+
discounted_plans = []
|
93
94
|
if !@shop.nil?
|
94
95
|
old_plan_id = @shop[@plan_field]
|
95
96
|
old_plan_data = nil
|
@@ -139,11 +140,11 @@ module AppManager
|
|
139
140
|
|
140
141
|
begin
|
141
142
|
plan_obj = AppManager::Client.new
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
143
|
+
if params[:discount].present? && !params[:discount].nil?
|
144
|
+
discounted_plans = plan_obj.get_related_discounted_plans(params[:discount])
|
145
|
+
if discounted_plans.empty? || discounted_plans.include?(params[:plan].to_i)
|
146
|
+
plan_obj.discount_used(@shop[shopify_domain], params[:discount])
|
147
|
+
end
|
147
148
|
end
|
148
149
|
rescue
|
149
150
|
Rollbar.error("Error in APP MANAGER Discount used API call >>>> #{e.inspect}")
|
@@ -66,15 +66,12 @@ module AppManager
|
|
66
66
|
end
|
67
67
|
|
68
68
|
promotional_discount = []
|
69
|
-
|
70
|
-
|
71
|
-
created_at = @shop[AppManager.configuration.field_names['created_at']]
|
72
|
-
reinstall = AppManager.check_if_reinstall(created_at)
|
69
|
+
if params[:discount_code].present? && !params[:discount_code].nil? && @shop
|
70
|
+
discount_local_storage = params[:discount_code]
|
73
71
|
plan_obj = AppManager::Client.new
|
74
|
-
promotional_discount = plan_obj.get_promotional_discount(params[:shop_domain],
|
72
|
+
promotional_discount = plan_obj.get_promotional_discount(params[:shop_domain],discount_local_storage)
|
75
73
|
promotional_discount = [] if promotional_discount.class.to_s == "Hash" && promotional_discount.has_key?('status') && promotional_discount['status'] == 404
|
76
74
|
end
|
77
|
-
|
78
75
|
response = {
|
79
76
|
'plans' => plans,
|
80
77
|
'promotional_discount' => promotional_discount,
|
@@ -74,7 +74,7 @@ module AppManager
|
|
74
74
|
return fetch_static_cached_response(cache_key)
|
75
75
|
end
|
76
76
|
begin
|
77
|
-
response = self.class.send(http_method, path, { body: options, timeout:
|
77
|
+
response = self.class.send(http_method, path, { body: options, timeout: 120 })
|
78
78
|
if response.class.to_s == "HTTParty::Response" && (response.code.to_s.start_with?('2') or response.code.to_s.start_with?('4')) && (response.code.to_s != '429')
|
79
79
|
Rails.cache.write(cache_key, response, expires_in: AppManager.configuration.expires_in)
|
80
80
|
else
|
@@ -131,6 +131,8 @@ module AppManager
|
|
131
131
|
return @fs.get_local_discount(params, options)
|
132
132
|
when 'use-discount'
|
133
133
|
return @fs.store_discount_used(params,options)
|
134
|
+
when 'get-related-discounted-plans'
|
135
|
+
return @fs.get_local_related_discounted_plans(params,options)
|
134
136
|
else
|
135
137
|
return nil
|
136
138
|
end
|
@@ -43,8 +43,8 @@ module AppManager
|
|
43
43
|
get("/has-plan?shop_domain=#{shop_domain}&plan_id=#{plan_id}&trial_activated_at=#{trial_activated_at}&grandfathered=#{grandfathered}")
|
44
44
|
end
|
45
45
|
|
46
|
-
def get_promotional_discount(shop_domain = nil,
|
47
|
-
get("/discount?shop_domain=#{shop_domain}&
|
46
|
+
def get_promotional_discount(shop_domain = nil,code)
|
47
|
+
get("/discount?shop_domain=#{shop_domain}&code=#{code}")
|
48
48
|
end
|
49
49
|
|
50
50
|
def discount_used(shop_domain, discount_id)
|
@@ -55,6 +55,10 @@ module AppManager
|
|
55
55
|
post("/use-discount-sync", options)
|
56
56
|
end
|
57
57
|
|
58
|
+
def get_related_discounted_plans(discount_id)
|
59
|
+
get("/get-related-discounted-plans?discount_id=#{discount_id}")
|
60
|
+
end
|
61
|
+
|
58
62
|
end
|
59
63
|
end
|
60
64
|
end
|
@@ -224,10 +224,6 @@ module AppManager
|
|
224
224
|
promotional_discounts_data = []
|
225
225
|
promotional_discounts.each do |promotional_discount|
|
226
226
|
|
227
|
-
Rails.logger.info " "
|
228
|
-
Rails.logger.info "=== promotional_discount===========#{promotional_discount.inspect}"
|
229
|
-
Rails.logger.info " "
|
230
|
-
|
231
227
|
promotional_discounts_data << AppManager::Discount.new(
|
232
228
|
discount_id: promotional_discount['id'],
|
233
229
|
name: promotional_discount['name'],
|
@@ -249,9 +245,6 @@ module AppManager
|
|
249
245
|
)
|
250
246
|
end
|
251
247
|
|
252
|
-
Rails.logger.info " "
|
253
|
-
Rails.logger.info "=== promotional_discounts_data===========#{promotional_discounts_data.inspect}"
|
254
|
-
Rails.logger.info " "
|
255
248
|
AppManager::Discount.bulk_import promotional_discounts_data
|
256
249
|
end
|
257
250
|
end
|
@@ -614,14 +607,12 @@ module AppManager
|
|
614
607
|
|
615
608
|
def get_local_discount(params, options)
|
616
609
|
code = [params['code']].pack('H*')
|
617
|
-
code_type = params['code_type']
|
618
|
-
reinstall = params['reinstall']
|
619
610
|
shop_domain = params['shop_domain']
|
620
611
|
now = Time.now
|
621
612
|
|
622
613
|
discount_data = AppManager::Discount.where(enabled: true)
|
623
614
|
.where('valid_from <= ?', now)
|
624
|
-
.where('valid_to >= ?', now)
|
615
|
+
.where('valid_to IS NULL OR valid_to >= ?', now)
|
625
616
|
.where(code: code)
|
626
617
|
.first
|
627
618
|
return [] if discount_data.nil?
|
@@ -674,6 +665,11 @@ module AppManager
|
|
674
665
|
|
675
666
|
end
|
676
667
|
|
668
|
+
def get_local_related_discounted_plans(params, options)
|
669
|
+
discounted_plans = DiscountLinkPlan.where(discount_id: params['discount_id']).pluck(:plan_id) rescue []
|
670
|
+
return discounted_plans
|
671
|
+
end
|
672
|
+
|
677
673
|
def store_local_charge(params, options)
|
678
674
|
message = {"message" => 'fail'}
|
679
675
|
if options
|
@@ -54,7 +54,7 @@ module AppManager
|
|
54
54
|
end
|
55
55
|
|
56
56
|
|
57
|
-
def recurring_charge_api_call(plan,return_url,shop,
|
57
|
+
def recurring_charge_api_call(plan,return_url,shop,discount_local_storage)
|
58
58
|
plan_test = nil
|
59
59
|
shop_plan_field = AppManager.configuration.field_names['shopify_plan'] rescue nil
|
60
60
|
if !plan['affiliate'].nil? && plan['affiliate'].any? && !shop_plan_field.nil? && plan['affiliate'].map{|e| e['value']}.include?(shop[shop_plan_field])
|
@@ -84,11 +84,9 @@ module AppManager
|
|
84
84
|
end
|
85
85
|
|
86
86
|
promotional_discount = []
|
87
|
-
if
|
88
|
-
created_at = shop[AppManager.configuration.field_names['created_at']]
|
89
|
-
reinstall = AppManager.check_if_reinstall(created_at)
|
87
|
+
if !discount_local_storage.nil? && shop
|
90
88
|
plan_obj = AppManager::Client.new
|
91
|
-
promotional_discount = plan_obj.get_promotional_discount(shop.shopify_domain,
|
89
|
+
promotional_discount = plan_obj.get_promotional_discount(shop.shopify_domain, discount_local_storage)
|
92
90
|
promotional_discount = [] if promotional_discount.class.to_s == "Hash" && promotional_discount.has_key?('status') && promotional_discount['status'] == 404
|
93
91
|
end
|
94
92
|
|
@@ -141,9 +139,8 @@ module AppManager
|
|
141
139
|
promotional_discount_applies = promotional_discount.present? && promotional_discount.any?
|
142
140
|
promotional_discount_id = discount_exists && promotional_discount_applies ? 0 : promotional_discount_applies ? promotional_discount['id'] : 0
|
143
141
|
|
144
|
-
|
145
|
-
|
146
|
-
return_url += "&promo_discount=#{promotional_discount_id}&discounted_plans=#{Rack::Utils.escape(plans_relation.to_json)}"
|
142
|
+
return_url += "&discount=#{promotional_discount_id}"
|
143
|
+
|
147
144
|
|
148
145
|
price_details = {
|
149
146
|
"price": { "amount": plan['price'], "currencyCode": 'USD' },
|
data/lib/app_manager/model.rb
CHANGED
@@ -148,7 +148,7 @@ module AppManager
|
|
148
148
|
plan_obj.cancel_charge(shop_domain, shop_plan_id)
|
149
149
|
end
|
150
150
|
rescue Exception => e
|
151
|
-
return "#{e.inspect}"
|
151
|
+
return "#{e.inspect}-#{e.backtrace}"
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
@@ -170,7 +170,7 @@ module AppManager
|
|
170
170
|
end
|
171
171
|
end
|
172
172
|
rescue Exception => e
|
173
|
-
return "#{e.inspect}"
|
173
|
+
return "#{e.inspect}-#{e.backtrace}"
|
174
174
|
end
|
175
175
|
end
|
176
176
|
|
@@ -182,7 +182,7 @@ module AppManager
|
|
182
182
|
return data["data"]["currentAppInstallation"]["activeSubscriptions"].first
|
183
183
|
end
|
184
184
|
rescue Exception => e
|
185
|
-
Rollbar.error("Warning in APP MANAGER, trying to get_current_shopify_charge >>>> #{e.inspect}")
|
185
|
+
Rollbar.error("Warning in APP MANAGER, trying to get_current_shopify_charge >>>> #{e.inspect}-#{e.backtrace}")
|
186
186
|
return nil
|
187
187
|
end
|
188
188
|
end
|
@@ -217,7 +217,28 @@ module AppManager
|
|
217
217
|
end
|
218
218
|
return charge_updated
|
219
219
|
rescue Exception => e
|
220
|
-
Rollbar.error("Warning in APP MANAGER, trying to get update_app_manager_charge >>>> #{e.inspect}")
|
220
|
+
Rollbar.error("Warning in APP MANAGER, trying to get update_app_manager_charge >>>> #{e.inspect}-#{e.backtrace}")
|
221
|
+
return nil
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def update_app_manager_charge_with_plan_id(current_shopify_charge_id=nil,shop_custom_plan_id=nil)
|
226
|
+
charge_updated = nil
|
227
|
+
begin
|
228
|
+
shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
|
229
|
+
shop_domain = self[AppManager.configuration.shopify_domain_field]
|
230
|
+
current_charge_id = current_shopify_charge_id.present? ? current_shopify_charge_id : active_shopify_charge_id
|
231
|
+
plan_id = shop_custom_plan_id.present? ? shop_custom_plan_id : shop_plan_id
|
232
|
+
if current_charge_id.present?
|
233
|
+
if plan_id.present?
|
234
|
+
if charge_update_call(self,plan_id,current_charge_id)
|
235
|
+
charge_updated = true
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
return charge_updated
|
240
|
+
rescue Exception => e
|
241
|
+
Rollbar.error("Warning in APP MANAGER, trying to get update_app_manager_charge_with_plan_id >>>> #{e.inspect}-#{e.backtrace}")
|
221
242
|
return nil
|
222
243
|
end
|
223
244
|
end
|
@@ -236,7 +257,7 @@ module AppManager
|
|
236
257
|
return nil
|
237
258
|
end
|
238
259
|
rescue Exception => e
|
239
|
-
Rollbar.error("Warning in APP MANAGER, trying to get active shopify charge id >>>> #{e.inspect}")
|
260
|
+
Rollbar.error("Warning in APP MANAGER, trying to get active shopify charge id >>>> #{e.inspect}-#{e.backtrace}")
|
240
261
|
return nil
|
241
262
|
end
|
242
263
|
end
|
@@ -300,15 +321,16 @@ module AppManager
|
|
300
321
|
"shopify_domain" => shop_domain
|
301
322
|
})
|
302
323
|
rescue Exception => e
|
303
|
-
Rollbar.error("Warning in APP MANAGER model Charge Created Callback Event Fire>>>> #{e.inspect}")
|
324
|
+
Rollbar.error("Warning in APP MANAGER model Charge Created Callback Event Fire>>>> #{e.inspect}-#{e.backtrace}")
|
304
325
|
end
|
326
|
+
Thread.exit # Terminate the thread once processing is done
|
305
327
|
end
|
306
328
|
end
|
307
329
|
end
|
308
330
|
end
|
309
331
|
return charge_callback_done
|
310
332
|
# rescue Exception => e
|
311
|
-
# Rollbar.error("Warning in APP MANAGER model charge_callback, trying to update active shopify charge in app manager>>>> #{e.inspect}")
|
333
|
+
# Rollbar.error("Warning in APP MANAGER model charge_callback, trying to update active shopify charge in app manager>>>> #{e.inspect}-#{e.backtrace}")
|
312
334
|
# return nil
|
313
335
|
# end
|
314
336
|
end
|
@@ -351,7 +373,7 @@ module AppManager
|
|
351
373
|
self.save
|
352
374
|
end
|
353
375
|
rescue Exception => e
|
354
|
-
return "#{e.inspect}"
|
376
|
+
return "#{e.inspect}-#{e.backtrace}"
|
355
377
|
end
|
356
378
|
end
|
357
379
|
|
@@ -365,10 +387,10 @@ module AppManager
|
|
365
387
|
plans = plan_obj.get_plans(shop_domain)
|
366
388
|
plans = plans.select { |x| x['interval'] == 'EVERY_30_DAYS' && x['public'] == true }
|
367
389
|
plans.each do |plan|
|
368
|
-
next if (params && !params.nil? && params == "exclude_current_plan" && !shop_plan_id.nil? && plan["id"] == shop_plan_id)
|
390
|
+
next if (params && !params.nil? && params == "exclude_current_plan" && !shop_plan_id.nil? && !plan["id"].nil? && plan["id"] == shop_plan_id)
|
369
391
|
if plan && (plan['features'] && plan['features'].any?) && (plan['features'].values && plan['features'].values.any?) && (plan['features'].values.collect { |c| c['slug'] } && plan['features'].values.collect { |c| c['slug'] }.any?)
|
370
392
|
plan_feature_slugs = plan['features'].values.collect { |c| c['slug'] }.sort
|
371
|
-
if (feature_slugs & plan_feature_slugs).any? && ((feature_slugs & plan_feature_slugs).sort == feature_slugs.sort)
|
393
|
+
if plan_feature_slugs && (feature_slugs & plan_feature_slugs).any? && ((feature_slugs & plan_feature_slugs).sort == feature_slugs.sort)
|
372
394
|
plan_data.push(plan)
|
373
395
|
end
|
374
396
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
# app/middleware/set_cookie.rb
|
4
|
+
module AppManager
|
5
|
+
class SetLocalStorage
|
6
|
+
def initialize(app, condition,destination_url)
|
7
|
+
@app = app
|
8
|
+
@condition = condition
|
9
|
+
@destination_url = destination_url
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
request = Rack::Request.new(env)
|
14
|
+
|
15
|
+
if @condition.call(request)
|
16
|
+
url = URI.parse(request.url)
|
17
|
+
host = url.host
|
18
|
+
discount_code = request.path.split('/')[2] rescue ''
|
19
|
+
AppManager.clear_cache #clearing cache
|
20
|
+
# Set a 302 response with an external URL and a cookie
|
21
|
+
return [
|
22
|
+
302,
|
23
|
+
{
|
24
|
+
'Location' => "#{@destination_url}?discount_code=#{discount_code}" ,
|
25
|
+
'Content-Type' => 'text/plain'
|
26
|
+
},
|
27
|
+
['Redirecting to external URL with cookie']
|
28
|
+
]
|
29
|
+
end
|
30
|
+
|
31
|
+
@app.call(env)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/app_manager/version.rb
CHANGED
data/lib/app_manager.rb
CHANGED
@@ -16,25 +16,8 @@ require "app_manager/model"
|
|
16
16
|
require "app_manager/fail_safe"
|
17
17
|
require 'app_manager/railtie' if defined?(Rails)
|
18
18
|
require 'app_manager/exceptions'
|
19
|
-
require 'action_dispatch/middleware/cookies' if defined?(Rails)
|
20
|
-
require "action_controller"
|
21
19
|
|
22
20
|
module AppManager
|
23
|
-
module CookiesHandler
|
24
|
-
include ActionController::Cookies
|
25
|
-
|
26
|
-
def self.resolve_from_cookies(request)
|
27
|
-
if request.cookies['ShopCircleDiscount'].present?
|
28
|
-
{
|
29
|
-
'codeType' => 'normal',
|
30
|
-
'code' => request.cookies['ShopCircleDiscount']
|
31
|
-
}
|
32
|
-
else
|
33
|
-
nil
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
21
|
def self.configure
|
39
22
|
yield configuration
|
40
23
|
end
|
@@ -51,14 +34,4 @@ module AppManager
|
|
51
34
|
end
|
52
35
|
end
|
53
36
|
|
54
|
-
def self.resolve_from_cookies(request)
|
55
|
-
CookiesHandler.resolve_from_cookies(request)
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.check_if_reinstall(created_at)
|
59
|
-
created_at < (Time.now - 5.minutes) ? 1 : 0
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
|
64
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rahul Tiwari @ Hulkapps
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -119,7 +119,7 @@ files:
|
|
119
119
|
- lib/app_manager/protection.rb
|
120
120
|
- lib/app_manager/railtie.rb
|
121
121
|
- lib/app_manager/response_cache.rb
|
122
|
-
- lib/app_manager/
|
122
|
+
- lib/app_manager/set_local_storage.rb
|
123
123
|
- lib/app_manager/tasks/sync/local_app_manager.rake
|
124
124
|
- lib/app_manager/version.rb
|
125
125
|
- lib/generators/app_manager/install/install_generator.rb
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# app/middleware/set_cookie_middleware.rb
|
2
|
-
require 'action_dispatch/middleware/cookies'
|
3
|
-
require 'uri'
|
4
|
-
|
5
|
-
# app/middleware/set_cookie.rb
|
6
|
-
module AppManager
|
7
|
-
class SetCookie
|
8
|
-
def initialize(app, condition)
|
9
|
-
@app = app
|
10
|
-
@condition = condition
|
11
|
-
end
|
12
|
-
|
13
|
-
def call(env)
|
14
|
-
request = Rack::Request.new(env)
|
15
|
-
|
16
|
-
if @condition.call(request)
|
17
|
-
url = URI.parse(request.url)
|
18
|
-
host = url.host
|
19
|
-
discount_code = request.path.split('/')[2]
|
20
|
-
|
21
|
-
# Set a cookie named 'ShopCircleDiscount' with the extracted values
|
22
|
-
lifetime = Time.now + 60 * 60 * 24 * 365
|
23
|
-
cookie_value = discount_code
|
24
|
-
|
25
|
-
AppManager.clear_cache #clearing cache
|
26
|
-
# Set a 302 response with an external URL and a cookie
|
27
|
-
return [
|
28
|
-
302,
|
29
|
-
{
|
30
|
-
'Location' => 'https://admin.shopify.com/admin/apps/'+ENV['SHOPIFY_APP_SLUG']+'/home/plan' ,
|
31
|
-
'Set-Cookie' => "ShopCircleDiscount=#{cookie_value}; expires=#{lifetime.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')}; path=/; domain=#{host}; secure; HttpOnly; SameSite=None",
|
32
|
-
'Content-Type' => 'text/plain'
|
33
|
-
},
|
34
|
-
['Redirecting to external URL with cookie']
|
35
|
-
]
|
36
|
-
end
|
37
|
-
|
38
|
-
@app.call(env)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|