shopqi-app 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -2
- data/app/controllers/shopqi_app/omniauth_callbacks_controller.rb +25 -0
- data/app/controllers/shopqi_app/sessions_controller.rb +3 -18
- data/app/helpers/shopqi_app/application_helper.rb +3 -3
- data/app/views/shopqi_app/sessions/new.html.haml +1 -1
- data/lib/generators/shopqi_app/USAGE +1 -0
- data/lib/generators/shopqi_app/shopqi_app_generator.rb +12 -1
- data/lib/generators/shopqi_app/templates/README +0 -4
- data/lib/generators/shopqi_app/templates/app/controllers/home_controller.rb +1 -1
- data/lib/generators/shopqi_app/templates/app/models/shop.rb +9 -0
- data/lib/generators/shopqi_app/templates/app/views/layouts/application.html.haml +1 -1
- data/lib/generators/shopqi_app/templates/config/app_secret_config.yml.erb +2 -2
- data/lib/generators/shopqi_app/templates/db/migrate/create_shops.rb +11 -0
- data/lib/shopqi-app.rb +4 -0
- data/lib/shopqi_app/engine.rb +22 -1
- data/lib/shopqi_app/rails/routes.rb +19 -0
- data/lib/shopqi_app/version.rb +1 -1
- metadata +8 -6
- data/config/initializers/omniauth.rb +0 -16
- data/config/routes.rb +0 -6
data/README.md
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
$ rails g shopqi_app client_id client_secret
|
13
13
|
|
14
|
-
`client_id`, `client_secret` 在注册 Application 后显示,注册时 `REDIRECT URI` 填写 localhost:3000/
|
14
|
+
`client_id`, `client_secret` 在注册 Application 后显示,注册时 `REDIRECT URI` 填写 localhost:3000/callback
|
15
15
|
|
16
16
|
## 配置
|
17
17
|
|
@@ -22,7 +22,7 @@
|
|
22
22
|
client_id: 'dffd069fa92096022628a1f7eb174bc85d90278b8c90ec7ebadfbd94924bd2b8'
|
23
23
|
secret: 'e1805141c81c496e4779371f41263c9f74ac2ffd3728302296b8af10b64d9c9b'
|
24
24
|
scope: 'read_products read_orders'
|
25
|
-
redirect_uri: 'http://localhost:3000/
|
25
|
+
redirect_uri: 'http://localhost:3000/callback'
|
26
26
|
|
27
27
|
## 最后
|
28
28
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ShopQiApp
|
2
|
+
class OmniauthCallbacksController < ApplicationController
|
3
|
+
skip_before_filter :authenticate_shop!, only: :shopqi
|
4
|
+
before_filter :assert_omniauth_auth
|
5
|
+
|
6
|
+
def shopqi
|
7
|
+
shop = Shop.find_for_shopqi_oauth(request.env["omniauth.auth"])
|
8
|
+
sign_in_and_redirect shop
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
def assert_omniauth_auth
|
13
|
+
unless request.env['omniauth.auth']
|
14
|
+
flash[:error] = "Could not log in to store."
|
15
|
+
redirect_to main_app.login_path
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def sign_in_and_redirect(shop)
|
20
|
+
cookies.permanent.signed[:shop_id] = shop.id
|
21
|
+
redirect_to main_app.root_path
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ShopQiApp
|
2
2
|
class SessionsController < ApplicationController
|
3
|
-
skip_before_filter :authenticate_shop!, only: [:new, :
|
3
|
+
skip_before_filter :authenticate_shop!, only: [:new, :shopqi_login]
|
4
4
|
|
5
5
|
def new
|
6
6
|
if params[:shop].present?
|
@@ -8,32 +8,17 @@ module ShopQiApp
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def create
|
12
|
-
if data = request.env['omniauth.auth']
|
13
|
-
session[:shopqi] = {
|
14
|
-
url: params[:shop],
|
15
|
-
access_token: data['credentials']['token'],
|
16
|
-
shop: data['extra']['raw_info']['shop']
|
17
|
-
}
|
18
|
-
redirect_to main_app.root_path
|
19
|
-
else
|
20
|
-
flash[:error] = "Could not log in to store."
|
21
|
-
redirect_to login_path
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
11
|
def shopqi_login
|
26
12
|
if signed_in?
|
27
13
|
redirect_to main_app.root_path
|
28
14
|
else
|
29
|
-
redirect_to login_path(shop: params[:shop])
|
15
|
+
redirect_to main_app.login_path(shop: params[:shop])
|
30
16
|
end
|
31
17
|
end
|
32
18
|
|
33
19
|
def destroy
|
34
|
-
|
20
|
+
cookies.delete(:shop_id)
|
35
21
|
redirect_to main_app.root_path
|
36
22
|
end
|
37
|
-
|
38
23
|
end
|
39
24
|
end
|
@@ -5,15 +5,15 @@ module ShopQiApp
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def signed_in?
|
8
|
-
|
8
|
+
!cookies.signed[:shop_id].blank?
|
9
9
|
end
|
10
10
|
|
11
11
|
def current_shop
|
12
|
-
|
12
|
+
@current_shop ||= (signed_in? && Shop.find(cookies.signed[:shop_id]))
|
13
13
|
end
|
14
14
|
|
15
15
|
def shop_url
|
16
|
-
"http://#{current_shop
|
16
|
+
"http://#{current_shop.shopqi_domain}"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -3,6 +3,6 @@
|
|
3
3
|
%h1
|
4
4
|
安装应用
|
5
5
|
%small 请输入商店 URL 地址
|
6
|
-
= form_tag login_path, :class => 'form-search' do
|
6
|
+
= form_tag main_app.login_path, :class => 'form-search' do
|
7
7
|
= text_field_tag 'shop', nil, :placeholder => '商店 URL 地址', :class => 'btn-large', :id => 'shop'
|
8
8
|
= submit_tag '安装', :class => 'btn btn-primary btn-large'
|
@@ -1,4 +1,7 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
|
1
3
|
class ShopQiAppGenerator < Rails::Generators::Base
|
4
|
+
include Rails::Generators::Migration
|
2
5
|
namespace 'shopqi_app'
|
3
6
|
source_root File.expand_path('../templates', __FILE__)
|
4
7
|
|
@@ -10,6 +13,10 @@ class ShopQiAppGenerator < Rails::Generators::Base
|
|
10
13
|
template 'config/app_secret_config.yml.erb', 'config/app_secret_config.yml'
|
11
14
|
end
|
12
15
|
|
16
|
+
def install_migration
|
17
|
+
migration_template 'db/migrate/create_shops.rb', 'db/migrate/create_shops.rb'
|
18
|
+
end
|
19
|
+
|
13
20
|
def remove_files
|
14
21
|
remove_file 'public/index.html'
|
15
22
|
remove_file 'app/assets/javascripts/application.js'
|
@@ -18,11 +25,15 @@ class ShopQiAppGenerator < Rails::Generators::Base
|
|
18
25
|
end
|
19
26
|
|
20
27
|
def add_routes
|
21
|
-
route "
|
28
|
+
route "use_shopqi"
|
22
29
|
route "root :to => 'home#index'"
|
23
30
|
end
|
24
31
|
|
25
32
|
def show
|
26
33
|
readme "README"
|
27
34
|
end
|
35
|
+
|
36
|
+
def self.next_migration_number(dirname)
|
37
|
+
ActiveRecord::Generators::Base.next_migration_number(dirname)
|
38
|
+
end
|
28
39
|
end
|
@@ -2,10 +2,6 @@
|
|
2
2
|
|
3
3
|
There is something that you need to do before you use shopqi-app.
|
4
4
|
|
5
|
-
Step 0.
|
6
|
-
If you DO NOT use database, you MUST comment the line below in config/application.rb
|
7
|
-
# require "active_record/railtie"
|
8
|
-
|
9
5
|
Step 1.
|
10
6
|
UNCOMMENT the line below in Gemfile
|
11
7
|
gem 'therubyracer', :platforms => :ruby
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Shop < ActiveRecord::Base
|
2
|
+
attr_accessible :shop_id, :name, :shopqi_domain, :access_token
|
3
|
+
|
4
|
+
def self.find_for_shopqi_oauth(data)
|
5
|
+
shop = data.extra.raw_info.shop
|
6
|
+
where(shop_id: shop.id).first_or_create! name: shop.name, shopqi_domain: shop.shopqi_domain, access_token: data.credentials.token
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
@@ -3,7 +3,7 @@ defaults: &defaults
|
|
3
3
|
client_id: <%= client_id %>
|
4
4
|
secret: <%= client_secret %>
|
5
5
|
scope: 'read_products read_orders'
|
6
|
-
|
6
|
+
callback_path: '/callback'
|
7
7
|
|
8
8
|
development:
|
9
9
|
<<: *defaults
|
@@ -17,4 +17,4 @@ production:
|
|
17
17
|
client_id: <%= client_id %>
|
18
18
|
client_secret: <%= client_secret %>
|
19
19
|
scope: 'read_products read_orders'
|
20
|
-
|
20
|
+
callback_path: '/callback'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateShops < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :shops do |t|
|
4
|
+
t.integer :shop_id , unique: true, null: false
|
5
|
+
t.string :name , limit: 32 , null: false
|
6
|
+
t.string :shopqi_domain, limit: 64 , null: false
|
7
|
+
t.string :access_token , limit: 64
|
8
|
+
end
|
9
|
+
add_index :shops, :shop_id, :unique => true
|
10
|
+
end
|
11
|
+
end
|
data/lib/shopqi-app.rb
CHANGED
data/lib/shopqi_app/engine.rb
CHANGED
@@ -9,6 +9,10 @@ module ShopQiApp
|
|
9
9
|
g.integration_tool :rspec
|
10
10
|
end
|
11
11
|
|
12
|
+
initializer "shopqi_app.routes" do
|
13
|
+
ShopQiApp::Rails::Routes.install
|
14
|
+
end
|
15
|
+
|
12
16
|
initializer "shopqi_app.acronym" do
|
13
17
|
ActiveSupport::Inflector.inflections do |inflect|
|
14
18
|
inflect.acronym 'ShopQi'
|
@@ -20,6 +24,23 @@ module ShopQiApp
|
|
20
24
|
include ShopQiApp::Helpers
|
21
25
|
end
|
22
26
|
end
|
23
|
-
end
|
24
27
|
|
28
|
+
initializer "shopqi_app.omniauth" do |app|
|
29
|
+
app.middleware.use OmniAuth::Builder do
|
30
|
+
provider :shopqi,
|
31
|
+
(SecretSetting.oauth.client_id rescue nil), # 调用 generator 时还没有 app_secret_config.yml 文件
|
32
|
+
(SecretSetting.oauth.secret rescue nil),
|
33
|
+
:scope => (SecretSetting.oauth.scope rescue nil),
|
34
|
+
:callback_path => (SecretSetting.oauth.callback_path rescue nil),
|
35
|
+
:setup => lambda {|env|
|
36
|
+
params = Rack::Utils.parse_query(env['QUERY_STRING'])
|
37
|
+
#site_url = "https://#{params['shop']}"
|
38
|
+
site_url = "http://#{params['shop']}"
|
39
|
+
env['omniauth.strategy'].options[:client_options][:site] = site_url
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
OmniAuth.config.on_failure{|env| raise env['omniauth.error']}
|
44
|
+
end
|
45
|
+
end
|
25
46
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ShopQiApp
|
2
|
+
module Rails
|
3
|
+
class Routes
|
4
|
+
module Helper
|
5
|
+
def use_shopqi(options = {}, &block)
|
6
|
+
options.reverse_merge! callbacks: 'shopqi_app/omniauth_callbacks'
|
7
|
+
self.match 'login' => "shopqi_app/sessions#new"
|
8
|
+
self.get 'callback_login' => "shopqi_app/sessions#shopqi_login" # 从 ShopQi 后台管理点击应用直接登录
|
9
|
+
self.get 'callback' => "#{options[:callbacks]}#shopqi"
|
10
|
+
self.get 'sign_out' => "shopqi_app/sessions#destroy"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.install
|
15
|
+
ActionDispatch::Routing::Mapper.send :include, ShopQiApp::Rails::Routes::Helper
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/shopqi_app/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopqi-app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -148,14 +148,15 @@ extra_rdoc_files: []
|
|
148
148
|
files:
|
149
149
|
- app/helpers/shopqi_app/application_helper.rb
|
150
150
|
- app/controllers/shopqi_app/application_controller.rb
|
151
|
+
- app/controllers/shopqi_app/omniauth_callbacks_controller.rb
|
151
152
|
- app/controllers/shopqi_app/sessions_controller.rb
|
152
153
|
- app/models/secret_setting.rb
|
153
154
|
- app/views/shopqi_app/sessions/new.html.haml
|
154
|
-
-
|
155
|
-
- config/routes.rb
|
155
|
+
- lib/generators/shopqi_app/templates/db/migrate/create_shops.rb
|
156
156
|
- lib/generators/shopqi_app/templates/app/helpers/home_helper.rb
|
157
157
|
- lib/generators/shopqi_app/templates/app/controllers/application_controller.rb
|
158
158
|
- lib/generators/shopqi_app/templates/app/controllers/home_controller.rb
|
159
|
+
- lib/generators/shopqi_app/templates/app/models/shop.rb
|
159
160
|
- lib/generators/shopqi_app/templates/app/assets/javascripts/application.js.coffee
|
160
161
|
- lib/generators/shopqi_app/templates/app/assets/stylesheets/application.css.less.erb
|
161
162
|
- lib/generators/shopqi_app/templates/app/views/layouts/application.html.haml
|
@@ -166,6 +167,7 @@ files:
|
|
166
167
|
- lib/generators/shopqi_app/shopqi_app_generator.rb
|
167
168
|
- lib/shopqi-app.rb
|
168
169
|
- lib/shopqi_app/version.rb
|
170
|
+
- lib/shopqi_app/rails/routes.rb
|
169
171
|
- lib/shopqi_app/engine.rb
|
170
172
|
- lib/shopqi_app/helpers.rb
|
171
173
|
- lib/tasks/shopqi_app_tasks.rake
|
@@ -186,7 +188,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
186
188
|
version: '0'
|
187
189
|
segments:
|
188
190
|
- 0
|
189
|
-
hash:
|
191
|
+
hash: 557789341
|
190
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
193
|
none: false
|
192
194
|
requirements:
|
@@ -195,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
197
|
version: '0'
|
196
198
|
segments:
|
197
199
|
- 0
|
198
|
-
hash:
|
200
|
+
hash: 557789341
|
199
201
|
requirements: []
|
200
202
|
rubyforge_project:
|
201
203
|
rubygems_version: 1.8.24
|
@@ -1,16 +0,0 @@
|
|
1
|
-
Rails.application.config.middleware.use OmniAuth::Builder do
|
2
|
-
provider :shopqi,
|
3
|
-
(SecretSetting.oauth.client_id rescue nil), # 调用 generator 时还没有 app_secret_config.yml 文件
|
4
|
-
(SecretSetting.oauth.secret rescue nil),
|
5
|
-
:scope => (SecretSetting.oauth.scope rescue nil),
|
6
|
-
:callback_path => '/app/callback',
|
7
|
-
:setup => lambda {|env|
|
8
|
-
params = Rack::Utils.parse_query(env['QUERY_STRING'])
|
9
|
-
#site_url = "https://#{params['shop']}"
|
10
|
-
site_url = "http://#{params['shop']}"
|
11
|
-
Rails.logger.info(env['omniauth.strategy'])
|
12
|
-
env['omniauth.strategy'].options[:client_options][:site] = site_url
|
13
|
-
}
|
14
|
-
end
|
15
|
-
|
16
|
-
OmniAuth.config.on_failure{|env| raise env['omniauth.error']}
|