mekari_sso 0.0.1.2

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 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: []