omniauth-yoyow 0.1.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b73dc35a0c92976a77405764c899008245214aac
4
+ data.tar.gz: b59e04416549020f2485150abc8a4aa7e05d28f2
5
+ SHA512:
6
+ metadata.gz: f629c323627c61fa51687e5c0a7948da2a5be83c44acacc0bfd65f657de514dd845fe7be1d26da7401860b19e3f37eb4859b69634b9e24818cacd2f1f1433359
7
+ data.tar.gz: f958242347355307df26ca269febc008658552ff525f986044dbceedfbc5b305dac867c142c16d942f6a83e2615a70f99900b425b049df53b4780bf3e25778f3
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in omniauth-yoyow.gemspec
6
+ gemspec
@@ -0,0 +1,85 @@
1
+ # OmniAuth YOYOW
2
+
3
+ [中文](./README.cn.md) [En](./README.md)
4
+
5
+ 这是官方的OmniAuth YOYOW认证策略, 借助YOYOW的平台授权机制以实现账户授权认证. 在使用之前, 你需要一个平台账户[(如何成为平台)](https://github.com/yoyow-org/yoyow-node-sdk/tree/master/middleware#2-%E5%88%9B%E5%BB%BA%E5%B9%B3%E5%8F%B0), 并架设[YOYOW中间件服务](#架设中间件服务).
6
+
7
+ ## 安装
8
+
9
+ 在应用的Gemfile中添加:
10
+
11
+ ```ruby
12
+ gem 'omniauth-yoyow'
13
+ ```
14
+
15
+ 然后执行:
16
+
17
+ $ bundle
18
+
19
+ 或者手动安装:
20
+
21
+ $ gem install omniauth-yoyow
22
+
23
+ ## 用法
24
+
25
+ 将下方URL修改为YOYOW中间件的服务地址:
26
+
27
+ ```ruby
28
+ use OmniAuth::Builder do
29
+ provider :yoyow, 'http://localhost:3000'
30
+ end
31
+ ```
32
+
33
+ ## 架设中间件服务
34
+
35
+ 将中间件代码clone到本地:
36
+
37
+ ```bash
38
+ git clone https://github.com/yoyow-org/yoyow-node-sdk/tree/master/middleware
39
+ cd middleware
40
+ vim conf/config.js
41
+ ```
42
+
43
+ 在项目开发阶段, 可以借助YOYOW测试网进行测试, 待测试完成后再切换到正式网络.
44
+
45
+ 测试网的配置示例如下:
46
+
47
+ ```javascript
48
+ module.exports = {
49
+ // yoyow全节点api服务器地址(测试网)
50
+ apiServer: "ws://47.52.155.181:10011",
51
+ // 请求有效时间,单位s
52
+ secure_ageing: 120,
53
+ // 平台安全请求验证key 由平台自定义
54
+ secure_key: "",
55
+ // 平台所有者active私钥(可选)
56
+ active_key: "",
57
+ // 平台所有者零钱私钥(必需)
58
+ secondary_key: "",
59
+ // 平台所有者备注私钥(可选)
60
+ memo_key: "",
61
+ // 平台id(yoyow id)
62
+ platform_id: "",
63
+ // 转账是否使用积分
64
+ use_csaf: true,
65
+ // 转账是否转到余额 否则转到零钱
66
+ to_balance: false,
67
+ // 钱包授权页URL
68
+ wallet_url: "http://demo.yoyow.org:8000/#/authorize-service",
69
+ // 允许接入的IP列表
70
+ allow_ip: ["localhost", "127.0.0.1"]
71
+ };
72
+ ```
73
+
74
+ 正式网配置示例:
75
+ ```javascript
76
+ module.exports = {
77
+ // yoyow全节点api服务器地址(正式网)
78
+ apiServer: "wss://wallet.yoyow.org/ws",
79
+ ...
80
+ // 钱包授权页URL
81
+ wallet_url: "http://wallet.yoyow.org/#/authorize-service",
82
+ // 允许接入的IP列表
83
+ allow_ip: ["localhost", "127.0.0.1"]
84
+ };
85
+ ```
@@ -0,0 +1,87 @@
1
+ # Omniauth YOYOW
2
+
3
+ [中文](./README.cn.md) [En](./README.md)
4
+
5
+ This is the official OmniAuth strategy for authenticating to YOYOW. To use it, a **platform** account is needed([what's platform](https://github.com/yoyow-org/yoyow-node-sdk/blob/master/middleware/README-EN.md#25-update-platform)), addtionally, you'll need to setup [yoyow-middleware](#setup-yoyow-middleware).
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'omniauth-yoyow'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install omniauth-yoyow
22
+
23
+ ## Usage
24
+
25
+ Change the url to yoyow-middleware server address in following code.
26
+
27
+ ```ruby
28
+ use OmniAuth::Builder do
29
+ provider :yoyow, 'http://localhost:3000'
30
+ end
31
+ ```
32
+
33
+
34
+ ## Setup YOYOW Middleware
35
+
36
+ Clone the middleware code:
37
+
38
+ ```bash
39
+ git clone https://github.com/yoyow-org/yoyow-node-sdk/tree/master/middleware
40
+ cd middleware
41
+ vim conf/config.js
42
+ ```
43
+
44
+ YOYOW test-net configuration is recommended while developing your applaction, you can switch it to main-net when production ready.
45
+
46
+ Sample config for test-net:
47
+
48
+ ```javascript
49
+ module.exports = {
50
+ // yoyow full node api(test-net)
51
+ apiServer: "ws://47.52.155.181:10011",
52
+ // seconds before requests invaild
53
+ secure_ageing: 120,
54
+ // platform specified secure key
55
+ secure_key: "",
56
+ // active key of platform(optional)
57
+ active_key: "",
58
+ // secondary key of platform(required)
59
+ secondary_key: "",
60
+ // memo key of platform(optional)
61
+ memo_key: "",
62
+ // platform id(yoyow id)
63
+ platform_id: "",
64
+ // choose to use csaf when transfer token
65
+ use_csaf: true,
66
+ // transfer token to balance, otherwise to Tipping
67
+ to_balance: false,
68
+ // authorization URL
69
+ wallet_url: "http://demo.yoyow.org:8000/#/authorize-service",
70
+ // IP list allowed to access
71
+ allow_ip: ["localhost", "127.0.0.1"]
72
+ };
73
+ ```
74
+
75
+ Sample config for main-net:
76
+
77
+ ```javascript
78
+ module.exports = {
79
+ // yoyow full node api(main-net)
80
+ apiServer: "wss://wallet.yoyow.org/ws",
81
+ ...
82
+ // authorization URL
83
+ wallet_url: "http://wallet.yoyow.org/#/authorize-service",
84
+ // IP list allowed to access
85
+ allow_ip: ["localhost", "127.0.0.1"]
86
+ };
87
+ ```
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "omniauth/yoyow"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,3 @@
1
+ require "omniauth-yoyow/version"
2
+ require "omniauth/yoyow-middleware"
3
+ require "omniauth/strategies/yoyow"
@@ -0,0 +1,5 @@
1
+ module Omniauth
2
+ module Yoyow
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,53 @@
1
+ module OmniAuth
2
+ module Strategies
3
+ class Yoyow
4
+ include OmniAuth::Strategy
5
+ class CallbackError < StandardError; end
6
+ args %i[auth_server]
7
+
8
+ option :auth_server, "http://localhost:3000"
9
+
10
+ # yoyow middleware
11
+ def middleware
12
+ @middleware ||= OmniAuth::YoyowMiddleware.new(options.auth_server)
13
+ end
14
+
15
+ def request_phase
16
+ redirect auth_url
17
+ end
18
+
19
+ def auth_url
20
+ middleware.get_auth_url(callback_url)
21
+ end
22
+
23
+ def callback_url
24
+ full_host + script_name + callback_path
25
+ end
26
+
27
+ def callback_phase
28
+ yyw_id = request.params["yoyow"]
29
+ time = request.params["time"]
30
+ sign = request.params["sign"]
31
+ if ! middleware.verify_auth(yyw_id, time, sign)
32
+ raise CallbackError.new("invalid credential found.")
33
+ end
34
+
35
+ super
36
+ rescue CallbackError => e
37
+ fail!(:invalid_credential, e)
38
+ end
39
+
40
+ uid do
41
+ request.params["yoyow"]
42
+ end
43
+
44
+ info do
45
+ account = middleware.get_account(uid)
46
+ {
47
+ name: account[:name],
48
+ nickname: account[:name],
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,56 @@
1
+ require 'uri'
2
+ require 'multi_json'
3
+ require 'faraday'
4
+
5
+ module OmniAuth
6
+ class YoyowMiddleware
7
+ attr_reader :resource
8
+
9
+ class MiddlewareRequestError < StandardError; end
10
+
11
+ def initialize(url)
12
+ unless url.start_with?('http')
13
+ url = 'http://' + url
14
+ end
15
+ @resource = Faraday.new(url)
16
+ end
17
+
18
+ def get_auth_url(callback_url)
19
+ resp = get_platform_sign
20
+ auth_data = resp.slice(:sign, :time, :platform).merge({state: callback_url})
21
+ auth_url = [resp[:url], '?', URI.encode_www_form(auth_data)].join('')
22
+ end
23
+
24
+ def get_account(uid)
25
+ _get '/api/v1/getAccount', uid: uid
26
+ end
27
+
28
+ def get_platform_sign
29
+ _get '/auth/sign'
30
+ end
31
+
32
+ def verify_auth(yyw_id, time, sign)
33
+ return false if yyw_id.nil? or time.nil? or sign.nil?
34
+
35
+ data = _get('/auth/verify', {
36
+ yoyow: yyw_id,
37
+ time: time,
38
+ sign: sign
39
+ })
40
+ data[:verify]
41
+ end
42
+
43
+ def _get(url, params={})
44
+ begin
45
+ resp = resource.get url, params
46
+ json = MultiJson.load resp.body, :symbolize_keys => true
47
+ raise MiddlewareRequestError.new(json[:message]) if json[:code] != 0
48
+ json[:data]
49
+ rescue MiddlewareRequestError => e
50
+ puts "Error occurs while accessing yoyow middleware: "
51
+ puts e.message
52
+ raise e
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,30 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "omniauth-yoyow/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "omniauth-yoyow"
8
+ spec.version = Omniauth::Yoyow::VERSION
9
+ spec.licenses = ['MIT']
10
+ spec.authors = ["Bin Chen"]
11
+ spec.email = ["fengzhishuiwo@163.com"]
12
+
13
+ spec.summary = %q{Official OmniAuth strategy for yoyow.}
14
+ spec.description = %q{Official OmniAuth strategy for yoyow.}
15
+ spec.homepage = "https://coding.net/u/vianull/p/omniauth-yoyow/git"
16
+
17
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
18
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ end
20
+ spec.bindir = "exe"
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.16"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+
27
+ spec.add_dependency 'omniauth', '~> 1.5'
28
+ spec.add_dependency "multi_json"
29
+ spec.add_dependency "faraday"
30
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omniauth-yoyow
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Bin Chen
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-10-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: omniauth
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: multi_json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faraday
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Official OmniAuth strategy for yoyow.
84
+ email:
85
+ - fengzhishuiwo@163.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - Gemfile
92
+ - README.cn.md
93
+ - README.md
94
+ - Rakefile
95
+ - bin/console
96
+ - bin/setup
97
+ - lib/omniauth-yoyow.rb
98
+ - lib/omniauth-yoyow/version.rb
99
+ - lib/omniauth/strategies/yoyow.rb
100
+ - lib/omniauth/yoyow-middleware.rb
101
+ - omniauth-yoyow.gemspec
102
+ homepage: https://coding.net/u/vianull/p/omniauth-yoyow/git
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.6.11
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Official OmniAuth strategy for yoyow.
126
+ test_files: []