mekari_sso 0.0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f33247db096802659c274da652372c7497ad5f2d37a909e0809438d829ff92e1
4
+ data.tar.gz: 16c05aeda1d56fbe59e810ec95751553ee21bdb12ee9d3aee2e29623b477da88
5
+ SHA512:
6
+ metadata.gz: d284d8c15d544eeb522f149ed7e2546d1284b17939f766b86f73c2625a94bf3085663cb27409b7f08a43a86c15352019785922524f34756055d6269517c33490
7
+ data.tar.gz: 6d5c1839006f0d06c0437662e201712983a938640043d73236edaabc797e9abe236ba184e4eb2f855faaba9718dc2ee23b94dab396d87f2848af6dff190b84b5
data/lib/config.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MekariSso
4
+ class Config
5
+ attr_accessor :client_id, :client_secret, :base_url, :access_token
6
+
7
+ # AVAILABLE_KEYS = %i[client_id client_secret base_url access_token].freeze
8
+
9
+ def initialize(options = nil)
10
+ apply(options) if options
11
+ end
12
+
13
+ def available_keys
14
+ %i[client_id client_secret base_url access_token]
15
+ end
16
+
17
+ def apply(hash)
18
+ hash.each do |key, value|
19
+ unless available_keys.include?(key.to_s.to_sym)
20
+ raise ArgumentError,
21
+ "Unknown option #{key.inspect},
22
+ available keys: #{available_keys.map(&:inspect).join(', ')}"
23
+ end
24
+
25
+ send(:"#{key}=", value)
26
+ end
27
+ end
28
+
29
+ def validate_required!
30
+ unless @client_id.present?
31
+ raise ArgumentError, "Params client_id is required options"
32
+ end
33
+
34
+ unless @client_secret.present?
35
+ raise ArgumentError, "Params client_secret is required options"
36
+ end
37
+
38
+ unless @base_url.present?
39
+ raise ArgumentError, "Params base_url is required options"
40
+ end
41
+ end
42
+ end
43
+ end
data/lib/mekari_sso.rb ADDED
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'config'
4
+ require 'requests/current_user'
5
+ require 'requests/generate_credential_client'
6
+ require 'requests/generate_credential_code'
7
+ require 'requests/industries'
8
+ require 'requests/refresh'
9
+ require 'requests/revoke'
10
+ require 'requests/sender'
11
+ require 'requests/register_company'
12
+ require 'requests/register_user'
13
+ require 'requests/remove_company'
14
+ require 'params/user_register'
15
+ require 'params/company_register'
16
+ require 'params/company_remove'
17
+
18
+ require 'active_support'
19
+ require 'active_support/core_ext'
20
+
21
+ module MekariSso
22
+ class Client
23
+ attr_accessor :options
24
+
25
+ def initialize(options = nil)
26
+ @options = MekariSso::Config.new(options)
27
+ @options.validate_required!
28
+ end
29
+
30
+ def generate_client
31
+ sender = MekariSso::Sender.new
32
+ sender >> MekariSso::GenerateCredentialClient.new(@options)
33
+ end
34
+
35
+ def generate_code(code)
36
+ sender = MekariSso::Sender.new
37
+ sender >> MekariSso::GenerateCredentialCode.new(@options, code)
38
+ end
39
+
40
+ def refresh_token(token)
41
+ sender = MekariSso::Sender.new
42
+ sender >> MekariSso::Refresh.new(@options, token)
43
+ end
44
+
45
+ def revoke_token(token)
46
+ sender = MekariSso::Sender.new
47
+ sender >> MekariSso::Revoke.new(@options, token)
48
+ end
49
+
50
+ def current_user(token)
51
+ sender = MekariSso::Sender.new
52
+ sender >> MekariSso::CurrentUser.new(@options, token)
53
+ end
54
+
55
+ def industries(token)
56
+ sender = MekariSso::Sender.new
57
+ sender >> MekariSso::Industries.new(@options, token)
58
+ end
59
+
60
+ def register(params = {})
61
+ user = MekariSso::UserRegister.new(params)
62
+ user.validate_required!
63
+
64
+ sender = MekariSso::Sender.new
65
+ sender >> MekariSso::RegisterUser.new(@options, user)
66
+ end
67
+
68
+ def register_company(params = {})
69
+ company = MekariSso::CompanyRegister.new(params)
70
+ company.validate_required!
71
+
72
+ sender = MekariSso::Sender.new
73
+ sender >> MekariSso::RegisterCompany.new(@options, company)
74
+ end
75
+
76
+ def remove_company(params)
77
+ company = MekariSso::CompanyRemove.new(params)
78
+ company.validate_required!
79
+
80
+ sender = MekariSso::Sender.new
81
+ sender >> MekariSso::RemoveCompany.new(@options, company)
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'config'
4
+
5
+ module MekariSso
6
+ class CompanyRegister < MekariSso::Config
7
+ attr_accessor :name, :email, :industry_id, :industry_name, :user_id, :brand_name, :main_address, :access_token,
8
+ :secondary_address, :phone, :tax_name, :tax_number, :billing_name, :billing_email, :billing_phone
9
+
10
+ def initialize(options = nil)
11
+ apply(options) if options
12
+ end
13
+
14
+ def available_keys
15
+ %i[
16
+ access_token
17
+ name
18
+ email
19
+ industry_id
20
+ industry_name
21
+ user_id
22
+ brand_name
23
+ main_address
24
+ secondary_address
25
+ phone
26
+ tax_name
27
+ tax_number
28
+ billing_name
29
+ billing_email
30
+ billing_phone
31
+ ]
32
+ end
33
+
34
+ def validate_required!
35
+ unless @name.present?
36
+ raise ArgumentError, "Params name is required options"
37
+ end
38
+
39
+ unless @email.present?
40
+ raise ArgumentError, "Params email is required options"
41
+ end
42
+
43
+ unless @user_id.present?
44
+ raise ArgumentError, "Params user_id is required options"
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'config'
4
+
5
+ module MekariSso
6
+ class CompanyRemove < MekariSso::Config
7
+ attr_accessor :access_token, :company_id, :user_id
8
+
9
+ def initialize(options = nil)
10
+ apply(options) if options
11
+ end
12
+
13
+ def available_keys
14
+ %i[company_id user_id access_token]
15
+ end
16
+
17
+ def validate_required!
18
+ unless @access_token.present?
19
+ raise ArgumentError, "Params access_token is required options"
20
+ end
21
+
22
+ unless @company_id.present?
23
+ raise ArgumentError, "Params company_id is required options"
24
+ end
25
+
26
+ unless @user_id.present?
27
+ raise ArgumentError, "Params user_id is required options"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'config'
4
+
5
+ module MekariSso
6
+ class UserRegister < MekariSso::Config
7
+ attr_accessor :email, :first_name, :last_name, :password, :phone, :access_token
8
+
9
+ def initialize(options = nil)
10
+ apply(options) if options
11
+ end
12
+
13
+ def available_keys
14
+ %i[email first_name last_name password phone access_token]
15
+ end
16
+
17
+ def validate_required!
18
+ unless @email.present?
19
+ raise ArgumentError, "Params email is required options"
20
+ end
21
+
22
+ unless @first_name.present?
23
+ raise ArgumentError, "Params first_name is required options"
24
+ end
25
+
26
+ unless @last_name.present?
27
+ raise ArgumentError, "Params last_name is required options"
28
+ end
29
+
30
+ unless @password.present?
31
+ raise ArgumentError, "Params password is required options"
32
+ end
33
+
34
+ unless @phone.present?
35
+ raise ArgumentError, "Params phone is required options"
36
+ end
37
+
38
+ unless @access_token.present?
39
+ raise ArgumentError, "Params access_token is required options"
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class CurrentUser < MekariSso::HttpRequest
8
+
9
+ attr_reader :config, :token
10
+
11
+ def initialize(config, token)
12
+ @config = config
13
+ @token = token
14
+ end
15
+
16
+ def headers_request
17
+ headers.merge({
18
+ authorization: "Bearer #{@token}"
19
+ })
20
+ end
21
+
22
+ def send
23
+ RestClient.get "#{@config.base_url}/v1/users/me", headers_request
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class GenerateCredentialClient < MekariSso::HttpRequest
8
+
9
+ attr_reader :config
10
+
11
+ def initialize(config)
12
+ @config = config
13
+ end
14
+
15
+ def params
16
+ {
17
+ client_id: @config.client_id,
18
+ client_secret: @config.client_secret,
19
+ grant_type: 'client_credentials',
20
+ scope: 'sso:profile'
21
+ }
22
+ end
23
+
24
+ def send
25
+ RestClient.post "#{@config.base_url}/auth/oauth2/token", params
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class GenerateCredentialCode < MekariSso::HttpRequest
8
+
9
+ attr_reader :config, :code
10
+
11
+ def initialize(config, code)
12
+ @config = config
13
+ @code = code
14
+ end
15
+
16
+ def params
17
+ {
18
+ client_id: @config.client_id,
19
+ client_secret: @config.client_secret,
20
+ grant_type: 'authorization_code',
21
+ code: @code
22
+ }
23
+ end
24
+
25
+ def send
26
+ RestClient.post "#{@config.base_url}/auth/oauth2/token", params
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module MekariSso
6
+ class HttpRequest
7
+ def send; end
8
+
9
+ def params; end
10
+
11
+ def headers
12
+ {
13
+ accept: :json,
14
+ content_type: :json
15
+ }
16
+ end
17
+
18
+ def after_success(data)
19
+ {
20
+ response: data
21
+ }
22
+ end
23
+
24
+ def after_error(data, error)
25
+ {
26
+ response: data,
27
+ error: error
28
+ }
29
+ end
30
+
31
+ def original_response
32
+ @with_original_response = true
33
+ self
34
+ end
35
+
36
+ def handle_response(response)
37
+ if @with_original_response
38
+ begin
39
+ result = Struct.new
40
+ return result.new(JSON.parse(response.body))
41
+ rescue StandardError
42
+ return response.body
43
+ end
44
+ end
45
+
46
+ result = JSON.parse(response)
47
+
48
+ after_success(result)
49
+ end
50
+
51
+ def handle_error(response, error)
52
+ result = JSON.parse(response)
53
+
54
+ after_error(result, error.to_s)
55
+ rescue
56
+ after_error(result, error.to_s)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class Industries < MekariSso::HttpRequest
8
+
9
+ attr_reader :config, :token
10
+
11
+ def initialize(config, token)
12
+ @config = config
13
+ @token = token
14
+ end
15
+
16
+ def headers_request
17
+ headers.merge({
18
+ authorization: "Bearer #{@token}"
19
+ })
20
+ end
21
+
22
+ def send
23
+ RestClient.get "#{@config.base_url}/v1/industries", headers_request
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class Refresh < MekariSso::HttpRequest
8
+
9
+ attr_reader :config, :code
10
+
11
+ def initialize(config, refresh_token)
12
+ @config = config
13
+ @refresh_token = refresh_token
14
+ end
15
+
16
+ def params
17
+ {
18
+ client_id: @config.client_id,
19
+ client_secret: @config.client_secret,
20
+ grant_type: 'refresh_token',
21
+ refresh_token: @refresh_token
22
+ }
23
+ end
24
+
25
+ def send
26
+ RestClient.post "#{@config.base_url}/auth/oauth2/token", params
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class RegisterCompany < MekariSso::HttpRequest
8
+
9
+ attr_reader :config, :params
10
+
11
+ def initialize(config, params)
12
+ @config = config
13
+ @params = params
14
+ end
15
+
16
+ def params
17
+ {
18
+ name: @params.name,
19
+ email: @params.email,
20
+ industry_id: @params.industry_id,
21
+ industry_name: @params.industry_name,
22
+ user_id: @params.user_id,
23
+ brand_name: @params.brand_name,
24
+ main_address: @params.main_address,
25
+ secondary_address: @params.secondary_address,
26
+ phone: @params.phone,
27
+ tax_name: @params.tax_name,
28
+ tax_number: @params.tax_number,
29
+ billing_name: @params.billing_name,
30
+ billing_email: @params.billing_email,
31
+ billing_phone: @params.billing_phone
32
+ }
33
+ end
34
+
35
+ def headers_request
36
+ headers.merge({
37
+ authorization: "Bearer #{@params.access_token}"
38
+ })
39
+ end
40
+
41
+ def send
42
+ RestClient.post "#{@config.base_url}/v1/companies", params, headers_request
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class RegisterUser < MekariSso::HttpRequest
8
+
9
+ attr_reader :config, :params
10
+
11
+ def initialize(config, params)
12
+ @config = config
13
+ @params = params
14
+ end
15
+
16
+ def params
17
+ {
18
+ email: @params.email,
19
+ first_name: @params.first_name,
20
+ last_name: @params.last_name,
21
+ password: @params.password,
22
+ phone: @params.phone
23
+ }
24
+ end
25
+
26
+ def headers_request
27
+ headers.merge({
28
+ authorization: "Bearer #{@params.access_token}"
29
+ })
30
+ end
31
+
32
+ def send
33
+ RestClient.post "#{@config.base_url}/v1/users/", params, headers_request
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class RemoveCompany < MekariSso::HttpRequest
8
+
9
+ attr_reader :config, :params
10
+
11
+ def initialize(config, params)
12
+ @config = config
13
+ @params = params
14
+ end
15
+
16
+ def headers_request
17
+ headers.merge({
18
+ authorization: "Bearer #{@params.access_token}"
19
+ })
20
+ end
21
+
22
+ def send
23
+ RestClient.delete "#{@config.base_url}/v1/companies/#{@params.company_id}/users/#{@params.user_id}", headers_request
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require_relative 'http_request'
5
+
6
+ module MekariSso
7
+ class Revoke < MekariSso::HttpRequest
8
+
9
+ attr_reader :config, :token
10
+
11
+ def initialize(config, token)
12
+ @config = config
13
+ @token = token
14
+ end
15
+
16
+ def headers_request
17
+ headers.merge({
18
+ authorization: "Bearer #{@token}"
19
+ })
20
+ end
21
+
22
+ def send
23
+ RestClient.delete "#{@config.base_url}/auth/oauth2/token", headers_request
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ require 'rest-client'
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+
6
+ module MekariSso
7
+ class Sender
8
+ def initialize(request = [])
9
+ @request = request
10
+ end
11
+
12
+ def <<(request)
13
+ @request << request
14
+ end
15
+
16
+ def >>(other)
17
+ send(other)
18
+ end
19
+
20
+ def send(request)
21
+ return unless request.present?
22
+
23
+ request.handle_response(request.send)
24
+ rescue RestClient::ExceptionWithResponse => e
25
+ response = e.response.present? ? e.response : e.message
26
+ request.handle_error(response, e)
27
+ rescue StandardError => e
28
+ request.handle_error(e.message, e)
29
+ rescue RestClient::NotFound => e
30
+ request.handle_error(e.message, e)
31
+ end
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mekari_sso
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - WSPDV
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-02-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.6'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.6.1
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '2.6'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.6.1
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.0'
61
+ description:
62
+ email: dwi.heru@mekari.com
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - lib/config.rb
68
+ - lib/mekari_sso.rb
69
+ - lib/params/company_register.rb
70
+ - lib/params/company_remove.rb
71
+ - lib/params/user_register.rb
72
+ - lib/requests/current_user.rb
73
+ - lib/requests/generate_credential_client.rb
74
+ - lib/requests/generate_credential_code.rb
75
+ - lib/requests/http_request.rb
76
+ - lib/requests/industries.rb
77
+ - lib/requests/refresh.rb
78
+ - lib/requests/register_company.rb
79
+ - lib/requests/register_user.rb
80
+ - lib/requests/remove_company.rb
81
+ - lib/requests/revoke.rb
82
+ - lib/requests/sender.rb
83
+ homepage: https://gitlab.com/dwiheruwaspodo/mekari_sso
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubygems_version: 3.3.6
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: support mekari sso
106
+ test_files: []