sticapi_client 3.5.6 → 4.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d01f4c0f09a2fe358590af1e3bec375dc57e23bfeb3d052149bb659129ad3af
4
- data.tar.gz: 7912158fdde1c57cedeb64fe7c71c73b12628f34f362d498bd3beea841316d3d
3
+ metadata.gz: c39976d2a163a0362a78fa8edd6c9e04d6bf5d7ea2d9a70406f0c29469ea4150
4
+ data.tar.gz: eb1eaad17f4e1a7c380e38d316c7c30dce8c7eb299987c463fc91c3c1942587c
5
5
  SHA512:
6
- metadata.gz: 48c7000ae94121aeae196d1358ce4144130b20c032251df7ffa72625e43c07b43910870fb96ed4acdb7860016a872352e153b6dbf9e584e70af8cf0934a2c32b
7
- data.tar.gz: 8b226be5e34d41f0fca102cc38d4fcb1e014731fb440b6fe5231c2919a371569600c298e7097759d387de65cda8826e4922c46ad551585aa21b70875fdddc597
6
+ metadata.gz: a8b344661c0c85a642940958a6376a9dc2a882c6e7d7444c9d9b67c9d7653c568ca17cca82ee512a84c46dbda86a49d13491978d7ba9e0a26216ad94acbab7d7
7
+ data.tar.gz: 716f21b6ff4ed3985d80c8a9acb7b29f452bd382debe3f1d2db81f0a7b14df84aa004754ace7b286aa963b6c8f3243ee9932484182089eecddbefa28543d7956
@@ -5,71 +5,66 @@ require 'net/http'
5
5
  module Devise
6
6
  module Strategies
7
7
  class SticapiAuthenticatable < Authenticatable
8
- def valid?
9
- params[:user].present? && (
10
- params[:user][:username].present? ||
11
- params[:user][:email].present? ||
12
- params[:user][:login].present?
13
- )
14
- end
15
-
16
8
  def authenticate!
17
- return pass unless valid?
18
-
19
- if params[:user].has_key?(:username) || params[:user].has_key?(:login) || params[:user].has_key?(:email)
20
- field = params[:user][:username]
21
- field ||= params[:user][:email]
22
- field ||= params[:user][:login]
23
- if field.include?('@') || /^[0-9]*$/.match(field)
24
- resource = password.present? && mapping.to.find_for_database_authentication(authentication_hash)
25
- hashed = false
9
+ if params[:user]
10
+ if params[:user].has_key?(:username) || params[:user].has_key?(:login) || params[:user].has_key?(:email)
11
+ field = params[:user][:username]
12
+ field ||= params[:user][:email]
13
+ field ||= params[:user][:login]
14
+ if field.include?('@') || /^[0-9]*$/.match(field)
15
+ resource = password.present? && mapping.to.find_for_database_authentication(authentication_hash)
16
+ hashed = false
26
17
 
27
- if validate(resource){ hashed = true; resource.valid_password?(password) }
28
- remember_me(resource)
29
- resource.after_database_authentication
30
- success!(resource)
31
- return
32
- end
18
+ if validate(resource){ hashed = true; resource.valid_password?(password) }
19
+ remember_me(resource)
20
+ resource.after_database_authentication
21
+ success!(resource)
22
+ return
23
+ end
33
24
 
34
- mapping.to.new.password = password if !hashed && Devise.paranoid
35
- unless resource
36
- Devise.paranoid ? fail(:invalid) : fail(:not_found_in_database)
37
- end
38
- else
39
- Sticapi::SticapiClient.instance.get_token
40
- secret = Sticapi::SticapiClient.instance.access_token
41
- payload = {
42
- user: field,
43
- password: params[:user][:password]
44
- }
45
- token = JWT.encode payload, secret, 'HS256'
25
+ mapping.to.new.password = password if !hashed && Devise.paranoid
26
+ unless resource
27
+ Devise.paranoid ? fail(:invalid) : fail(:not_found_in_database)
28
+ end
29
+ else
30
+ Sticapi::SticapiClient.instance.get_token
31
+ secret = Sticapi::SticapiClient.instance.access_token
32
+ payload = {
33
+ user: field,
34
+ password: params[:user][:password]
35
+ }
36
+ token = JWT.encode payload, secret, 'HS256'
46
37
 
47
- data = Sticapi::SticapiClient.instance.sticapi_request("/users/log_in", data: token)
38
+ data = Sticapi::SticapiClient.instance.sticapi_request("/users/log_in", data: token)
48
39
 
49
- if data && data['user']
50
- unless user = User.find_by(username: data['user']['username'])
51
- user = User.new
52
- user.name = data['user']['name'] if user.respond_to? :name
53
- user.username = data['user']['username'] if user.respond_to? :username
54
- user.email = data['user']['email']
55
- user.cpf = data['user']['cpf'] if user.respond_to? :cpf
40
+ if data && data['user']
41
+ unless user = User.find_by(username: data['user']['username'])
42
+ user = User.new
43
+ user.name = data['user']['name'] if user.respond_to? :name
44
+ user.username = data['user']['username'] if user.respond_to? :username
45
+ user.email = data['user']['email']
46
+ user.cpf = data['user']['cpf'] if user.respond_to? :cpf
47
+ end
48
+ user.password = params[:user][:password] if user.respond_to? :password
49
+ user.password_confirmation = params[:user][:password] if user.respond_to? :password_confirmation
50
+ user.unities = data['user']['unities'] if user.respond_to? :unities
51
+ user.skip_confirmation! if user.respond_to? 'skip_confirmation!'
52
+ if user.save
53
+ remember_me(user)
54
+ success!(user)
55
+ return
56
+ end
56
57
  end
57
- user.password = params[:user][:password] if user.respond_to? :password
58
- user.password_confirmation = params[:user][:password] if user.respond_to? :password_confirmation
59
- user.unities = data['user']['unities'] if user.respond_to? :unities
60
- user.skip_confirmation! if user.respond_to? 'skip_confirmation!'
61
- user.save
62
- success!(user)
63
- return
64
- else
65
58
  Sticapi::SticapiClient.instance.expiry_now
66
59
  return fail(:invalid)
67
60
  end
61
+ else
62
+ Sticapi::SticapiClient.instance.expiry_now
63
+ return fail(:invalid)
68
64
  end
69
- else
70
- Sticapi::SticapiClient.instance.expiry_now
71
- return fail(:invalid)
72
65
  end
66
+ Sticapi::SticapiClient.instance.expiry_now
67
+ return fail(:invalid)
73
68
  end
74
69
  end
75
70
  end
@@ -1,3 +1,3 @@
1
1
  module SticapiClient
2
- VERSION = "3.5.6"
2
+ VERSION = "4.0.0"
3
3
  end
@@ -3,7 +3,6 @@ require "singleton"
3
3
  require "devise"
4
4
  require "rails"
5
5
  require "sticapi_client/sticapi_devise_strategy"
6
- require "sticapi_client/sticapi_controller"
7
6
  require "sticapi_client/diario"
8
7
  require "sticapi_client/etjpi"
9
8
  require "sticapi_client/intranet"
@@ -19,38 +18,22 @@ require "sticapi_client/user"
19
18
  require "sticapi_client/group"
20
19
  require "sticapi_client/ou"
21
20
  require "net/http"
21
+ require "erb"
22
+ require "yaml"
23
+ require "fileutils"
22
24
 
23
25
  module Sticapi
24
26
  class SticapiClient
25
27
  include Singleton
26
28
 
27
- attr_accessor :host
28
- attr_accessor :urn
29
- attr_accessor :port
30
- attr_accessor :ssl
31
- attr_accessor :user
32
- attr_accessor :password
33
- attr_accessor :access_token
34
- attr_accessor :client
35
- attr_accessor :uid
36
- attr_accessor :expiry
29
+ attr_accessor :host, :urn, :port, :ssl, :user, :password
30
+ attr_accessor :access_token, :client, :uid, :expiry
31
+
32
+ TOKEN_CACHE_PATH = "tmp/sticapi_token.yml"
37
33
 
38
34
  def initialize
39
- configs = YAML.safe_load(
40
- ERB.new(File.read("#{Rails.root}/config/sticapi.yml")).result,
41
- aliases: true
42
- )[Rails.env]
43
- @host = configs["host"]
44
- @port = configs["port"] || 80
45
- @user = configs["user"]
46
- @urn = configs["urn"]
47
- @ssl = configs["ssl"] || false
48
- @password = configs["password"]
49
- @access_token = ""
50
- @client = ""
51
- @uid = ""
52
- @expiry = ""
53
- get_token
35
+ load_config
36
+ load_token
54
37
  end
55
38
 
56
39
  def uri
@@ -58,63 +41,145 @@ module Sticapi
58
41
  end
59
42
 
60
43
  def get_token
61
- if @access_token.blank? || (DateTime.now > Time.at(@expiry.to_i))
62
- uri = URI.parse("#{self.uri}/auth/sign_in")
63
- http = Net::HTTP.new(uri.host, uri.port)
64
- http.use_ssl = @ssl
65
- request = Net::HTTP::Post.new(uri.request_uri)
66
- request["Content-Type"] = "application/json"
67
- request["email"] = @user
68
- request["password"] = @password
69
- response = http.request(request)
70
- update_token(response)
44
+ return unless @access_token.blank? || (DateTime.now > Time.at(@expiry.to_i))
45
+
46
+ if @access_token.present?
47
+ sign_out
71
48
  end
49
+
50
+ uri = URI.parse("#{self.uri}/auth/sign_in")
51
+ http = Net::HTTP.new(uri.host, uri.port)
52
+ http.use_ssl = @ssl
53
+ request = Net::HTTP::Post.new(uri.request_uri)
54
+ request["Content-Type"] = "application/json"
55
+ request.body = { email: @user, password: @password }.to_json
56
+ response = http.request(request)
57
+ @access_token = response["access-token"] if response["access-token"]
58
+ @client = response["client"] if response["client"]
59
+ @uid = response["uid"] if response["uid"]
60
+ @expiry = response["expiry"] if response["expiry"]
61
+ save_token
72
62
  end
73
63
 
74
64
  def expiry_now
75
65
  @expiry = 0
76
66
  end
77
67
 
78
- def update_token(response)
68
+ def sticapi_request(route, options = {})
69
+ get_token
70
+ response = http_request(route, options)
71
+
72
+ if response.code.to_i == 401
73
+ expiry_now
74
+ get_token
75
+ response = http_request(route, options)
76
+ end
77
+
79
78
  @access_token = response["access-token"] if response["access-token"]
80
79
  @client = response["client"] if response["client"]
81
80
  @uid = response["uid"] if response["uid"]
82
81
  @expiry = response["expiry"] if response["expiry"]
82
+ JSON.parse(response.body)
83
83
  end
84
84
 
85
- def sticapi_request(route, options = {})
86
- get_token
85
+ def sign_out
86
+ if @access_token.present?
87
+ uri = URI.parse("#{self.uri}/auth/sign_out")
88
+ http = Net::HTTP.new(uri.host, uri.port)
89
+ http.use_ssl = @ssl
90
+ request = Net::HTTP::Delete.new(uri.request_uri)
91
+ request["Content-Type"] = "application/json"
92
+ request["access-token"] = @access_token
93
+ request["client"] = @client
94
+ request["uid"] = @uid
95
+ request["expiry"] = @expiry
96
+ http.request(request)
97
+ end
98
+ @access_token = ""
99
+ @client = ""
100
+ @uid = ""
101
+ @expiry = ""
102
+ File.delete(token_cache_path) if File.exist?(token_cache_path)
103
+ end
104
+
105
+ private
106
+
107
+ def load_config
108
+ if ENV["STICAPI_HOST"].present?
109
+ @host = ENV["STICAPI_HOST"]
110
+ @port = ENV.fetch("STICAPI_PORT", 80).to_i
111
+ @user = ENV["STICAPI_USER"]
112
+ @password = ENV["STICAPI_PASSWORD"]
113
+ @urn = ENV["STICAPI_URN"]
114
+ @ssl = ENV.fetch("STICAPI_SSL", "false") == "true"
115
+ else
116
+ configs = YAML.safe_load(
117
+ ERB.new(File.read("#{Rails.root}/config/sticapi.yml")).result,
118
+ aliases: true
119
+ )[Rails.env]
120
+ @host = configs["host"]
121
+ @port = configs["port"] || 80
122
+ @user = configs["user"]
123
+ @urn = configs["urn"]
124
+ @ssl = configs["ssl"] || false
125
+ @password = configs["password"]
126
+ end
127
+ end
128
+
129
+ def http_request(route, options = {})
87
130
  kind = options[:kind] || "post"
88
131
  uri = URI.parse("#{self.uri}#{route}")
89
132
  http = Net::HTTP.new(uri.host, uri.port)
90
133
  http.use_ssl = @ssl
91
- request = nil
92
- request = Net::HTTP::Post.new(uri.request_uri) if kind == "post"
93
- request = Net::HTTP::Get.new(uri.request_uri) if kind == "get"
134
+
135
+ request = if kind == "get"
136
+ params = options.except(:kind)
137
+ uri.query = URI.encode_www_form(params) if params.any?
138
+ Net::HTTP::Get.new(uri.request_uri)
139
+ else
140
+ req = Net::HTTP::Post.new(uri.request_uri)
141
+ req.body = options.except(:kind).to_json
142
+ req
143
+ end
144
+
94
145
  request["Content-Type"] = "application/json"
95
146
  request["access-token"] = @access_token
96
147
  request["client"] = @client
97
148
  request["uid"] = @uid
98
149
  request["expiry"] = @expiry
99
- request.body = options.except(:kind).to_json
100
- response = http.request(request)
101
- update_token(response)
102
- sign_out
103
- JSON.parse(response.body)
150
+
151
+ http.request(request)
104
152
  end
105
153
 
106
- def sign_out
107
- uri = URI.parse("#{self.uri}/auth/sign_out")
108
- http = Net::HTTP.new(uri.host, uri.port)
109
- http.use_ssl = @ssl
110
- request = Net::HTTP::Delete.new(uri.request_uri)
111
- request["Content-Type"] = "application/json"
112
- request["access-token"] = @access_token
113
- request["client"] = @client
114
- request["uid"] = @uid
115
- request["expiry"] = @expiry
154
+ def token_cache_path
155
+ "#{Rails.root}/#{TOKEN_CACHE_PATH}"
156
+ end
157
+
158
+ def load_token
159
+ if File.exist?(token_cache_path)
160
+ cached = YAML.safe_load(File.read(token_cache_path), permitted_classes: [Symbol])
161
+ if cached
162
+ @access_token = cached[:access_token] || ""
163
+ @client = cached[:client] || ""
164
+ @uid = cached[:uid] || ""
165
+ @expiry = cached[:expiry] || ""
166
+ return
167
+ end
168
+ end
116
169
  @access_token = ""
117
- response = http.request(request)
170
+ @client = ""
171
+ @uid = ""
172
+ @expiry = ""
173
+ end
174
+
175
+ def save_token
176
+ FileUtils.mkdir_p(File.dirname(token_cache_path))
177
+ File.write(token_cache_path, {
178
+ access_token: @access_token,
179
+ client: @client,
180
+ uid: @uid,
181
+ expiry: @expiry
182
+ }.to_yaml)
118
183
  end
119
184
  end
120
185
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sticapi_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.6
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ricardo Viana
@@ -27,70 +27,70 @@ dependencies:
27
27
  name: devise
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - "~>"
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: '4.3'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '4.3'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: jwt
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '2.0'
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '2.0'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: bundler
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '1.15'
61
61
  type: :development
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: '1.15'
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: rake
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '10.0'
75
75
  type: :development
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '10.0'
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: rspec
84
84
  requirement: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '3.0'
89
89
  type: :development
90
90
  prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - "~>"
93
+ - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '3.0'
96
96
  description: A gem who encapsulate api calls of TJPI sticapi
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  requirements: []
141
- rubygems_version: 3.6.9
141
+ rubygems_version: 3.6.7
142
142
  specification_version: 4
143
143
  summary: Client to use TJPI sticapi services
144
144
  test_files: []