forcast 0.0.110

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.
Files changed (149) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/COPYRIGHTS +11 -0
  4. data/Gemfile +22 -0
  5. data/Gemfile.lock +166 -0
  6. data/PENDIENTES +39 -0
  7. data/README.md +35 -0
  8. data/Rakefile +7 -0
  9. data/VERSION +1 -0
  10. data/bin/console +14 -0
  11. data/bin/rake +28 -0
  12. data/bin/setup +8 -0
  13. data/forcast.gemspec +73 -0
  14. data/lib/forcast.rb +5 -0
  15. data/lib/forcast/controllers/all.rb +2 -0
  16. data/lib/forcast/controllers/application/all.rb +12 -0
  17. data/lib/forcast/controllers/application/crud.rb +91 -0
  18. data/lib/forcast/controllers/application/database.rb +34 -0
  19. data/lib/forcast/controllers/application/error.rb +18 -0
  20. data/lib/forcast/controllers/application/exception_handler.rb +25 -0
  21. data/lib/forcast/controllers/application/json.rb +83 -0
  22. data/lib/forcast/controllers/application/locale.rb +30 -0
  23. data/lib/forcast/controllers/application/log.rb +22 -0
  24. data/lib/forcast/controllers/application/login.rb +41 -0
  25. data/lib/forcast/controllers/application/meta.rb +61 -0
  26. data/lib/forcast/controllers/application/model.rb +17 -0
  27. data/lib/forcast/controllers/application/permitirtodo.rb +27 -0
  28. data/lib/forcast/controllers/application/utils.rb +28 -0
  29. data/lib/forcast/controllers/controller/all.rb +8 -0
  30. data/lib/forcast/controllers/controller/asociar.rb +121 -0
  31. data/lib/forcast/controllers/controller/busqueda.rb +151 -0
  32. data/lib/forcast/controllers/controller/definitor/definitor.rb +322 -0
  33. data/lib/forcast/controllers/controller/definitor/definitor_page.rb +40 -0
  34. data/lib/forcast/controllers/controller/definitor_all.rb +2 -0
  35. data/lib/forcast/controllers/controller/filtro.rb +48 -0
  36. data/lib/forcast/controllers/controller/login/controllers/base_controller.rb +135 -0
  37. data/lib/forcast/controllers/controller/login/controllers/login_controller.rb +38 -0
  38. data/lib/forcast/controllers/controller/login/login.rb +71 -0
  39. data/lib/forcast/controllers/controller/login_all.rb +1 -0
  40. data/lib/forcast/controllers/controller/paper_trail/paper_trail.rb +21 -0
  41. data/lib/forcast/controllers/controller/paper_trail_all.rb +1 -0
  42. data/lib/forcast/controllers/controller/relacion.rb +157 -0
  43. data/lib/forcast/controllers/controller/rule_engine/action_engine.rb +92 -0
  44. data/lib/forcast/controllers/controller/rule_engine/controllers/action_logs_controller.rb +12 -0
  45. data/lib/forcast/controllers/controller/rule_engine/controllers/actions_controller.rb +10 -0
  46. data/lib/forcast/controllers/controller/rule_engine/controllers/pollings_controller.rb +13 -0
  47. data/lib/forcast/controllers/controller/rule_engine/controllers/rule_logs_controller.rb +12 -0
  48. data/lib/forcast/controllers/controller/rule_engine/controllers/rules_controller.rb +19 -0
  49. data/lib/forcast/controllers/controller/rule_engine/controllers/webhooks_controller.rb +27 -0
  50. data/lib/forcast/controllers/controller/rule_engine/polling_engine.rb +76 -0
  51. data/lib/forcast/controllers/controller/rule_engine/rule_controller.rb +27 -0
  52. data/lib/forcast/controllers/controller/rule_engine/rule_engine.rb +88 -0
  53. data/lib/forcast/controllers/controller/rule_engine/webhook_engine.rb +38 -0
  54. data/lib/forcast/controllers/controller/rule_engine_all.rb +5 -0
  55. data/lib/forcast/jobs/all.rb +2 -0
  56. data/lib/forcast/jobs/jobs_assets.rb +25 -0
  57. data/lib/forcast/jobs/jobs_wrapper.rb +25 -0
  58. data/lib/forcast/jobs/rule_engine/jobs_actions.rb +73 -0
  59. data/lib/forcast/jobs/rule_engine/jobs_pollings.rb +77 -0
  60. data/lib/forcast/jobs/rule_engine/jobs_webhooks.rb +54 -0
  61. data/lib/forcast/migrations/0_migracion_general.rb +44 -0
  62. data/lib/forcast/migrations/paper_trail/versions.rb +61 -0
  63. data/lib/forcast/migrations/rule_engine/action_logs.rb +15 -0
  64. data/lib/forcast/migrations/rule_engine/actions.rb +15 -0
  65. data/lib/forcast/migrations/rule_engine/pollings.rb +26 -0
  66. data/lib/forcast/migrations/rule_engine/rule_logs.rb +22 -0
  67. data/lib/forcast/migrations/rule_engine/rules.rb +27 -0
  68. data/lib/forcast/migrations/rule_engine/webhooks.rb +25 -0
  69. data/lib/forcast/models/all.rb +8 -0
  70. data/lib/forcast/models/asociar.rb +74 -0
  71. data/lib/forcast/models/busqueda.rb +17 -0
  72. data/lib/forcast/models/login/authorization.rb +37 -0
  73. data/lib/forcast/models/login/json_web_token.rb +15 -0
  74. data/lib/forcast/models/login/login.rb +26 -0
  75. data/lib/forcast/models/login_all.rb +2 -0
  76. data/lib/forcast/models/meta.rb +19 -0
  77. data/lib/forcast/models/modelo.rb +125 -0
  78. data/lib/forcast/models/models/meta.rb +6 -0
  79. data/lib/forcast/models/paper_trail/paper_trail.rb +13 -0
  80. data/lib/forcast/models/paper_trail_all.rb +1 -0
  81. data/lib/forcast/models/permitirtodo.rb +57 -0
  82. data/lib/forcast/models/rule_engine/action_engine.rb +19 -0
  83. data/lib/forcast/models/rule_engine/models/action.rb +41 -0
  84. data/lib/forcast/models/rule_engine/models/action_log.rb +40 -0
  85. data/lib/forcast/models/rule_engine/models/polling.rb +43 -0
  86. data/lib/forcast/models/rule_engine/models/rule.rb +44 -0
  87. data/lib/forcast/models/rule_engine/models/rule_log.rb +39 -0
  88. data/lib/forcast/models/rule_engine/models/webhook.rb +43 -0
  89. data/lib/forcast/models/rule_engine/polling_engine.rb +113 -0
  90. data/lib/forcast/models/rule_engine/rule.rb +62 -0
  91. data/lib/forcast/models/rule_engine/rule_engine.rb +137 -0
  92. data/lib/forcast/models/rule_engine/rule_scope.rb +35 -0
  93. data/lib/forcast/models/rule_engine/webhook_engine.rb +55 -0
  94. data/lib/forcast/models/rule_engine_all.rb +6 -0
  95. data/lib/forcast/routes/concerns/asociar.rb +15 -0
  96. data/lib/forcast/routes/concerns/buscar.rb +6 -0
  97. data/lib/forcast/routes/concerns/definitor.rb +3 -0
  98. data/lib/forcast/routes/concerns/modelo.rb +6 -0
  99. data/lib/forcast/routes/database.rb +4 -0
  100. data/lib/forcast/routes/login.rb +4 -0
  101. data/lib/forcast/routes/paper_trail/paper_trail.rb +3 -0
  102. data/lib/forcast/routes/rule_engine/rule.rb +5 -0
  103. data/lib/forcast/tasks/.giosaveZr0hbs +21 -0
  104. data/lib/forcast/tasks/.keep +0 -0
  105. data/lib/forcast/tasks/all.rb +16 -0
  106. data/lib/forcast/tasks/diagramas.rake +32 -0
  107. data/lib/forcast/tasks/documentation/documentation.rb +100 -0
  108. data/lib/forcast/tasks/env.rake +10 -0
  109. data/lib/forcast/tasks/git.rake +22 -0
  110. data/lib/forcast/tasks/indy/indy.rb +28 -0
  111. data/lib/forcast/tasks/logs.rake +13 -0
  112. data/lib/forcast/tasks/process.rake +18 -0
  113. data/lib/forcast/tasks/schema.rake +17 -0
  114. data/lib/forcast/tasks/schema/recips/action.rb +18 -0
  115. data/lib/forcast/tasks/schema/recips/controller.rb +29 -0
  116. data/lib/forcast/tasks/schema/recips/definitor.rb +38 -0
  117. data/lib/forcast/tasks/schema/recips/model.rb +43 -0
  118. data/lib/forcast/tasks/schema/recips/project.rb +19 -0
  119. data/lib/forcast/tasks/schema/recips/route.rb +9 -0
  120. data/lib/forcast/tasks/schema/recips/tmp/controller.rb +0 -0
  121. data/lib/forcast/tasks/schema/recips/tmp/model.rb +0 -0
  122. data/lib/forcast/tasks/schema/recips/tmp/model/.keep +0 -0
  123. data/lib/forcast/tasks/schema/rule_engine/rule_engine.rb +98 -0
  124. data/lib/forcast/tasks/schema/schema.rb +346 -0
  125. data/lib/forcast/tasks/test.rake +129 -0
  126. data/lib/forcast/tasks/utils.rake +68 -0
  127. data/lib/forcast/tasks/yard.rake +18 -0
  128. data/lib/forcast/utils/all.rb +4 -0
  129. data/lib/forcast/utils/email.rb +49 -0
  130. data/lib/forcast/utils/email/forcast/utils/email/layout/default.html.erb +3 -0
  131. data/lib/forcast/utils/email/forcast/utils/email/layout/default.text.erb +5 -0
  132. data/lib/forcast/utils/firebase.rb +60 -0
  133. data/lib/forcast/utils/firebase_database.rb +117 -0
  134. data/lib/forcast/utils/measure.rb +44 -0
  135. data/lib/forcast/utils/qvo.rb +141 -0
  136. data/lib/forcast/utils/server.rb +296 -0
  137. data/lib/forcast/utils/telegram.rb +82 -0
  138. data/lib/forcast/utils/thing.rb +180 -0
  139. data/lib/forcast/version.rb +15 -0
  140. data/lib/lib/backup.rb +42 -0
  141. data/lib/lib/deploy.sh +40 -0
  142. data/lib/lib/forcast_servidor_rails.sh +11 -0
  143. data/lib/lib/pg_generator.sh +10 -0
  144. data/lib/lib/production.rb +66 -0
  145. data/lib/lib/production/production.rb +30 -0
  146. data/lib/lib/systemctl_maker.rb +88 -0
  147. data/lib/lib/update.rb +100 -0
  148. data/production.rb +31 -0
  149. metadata +301 -0
@@ -0,0 +1,44 @@
1
+ require 'benchmark'
2
+
3
+ module Forcast
4
+ module Utils
5
+ module Measure
6
+ #
7
+ # Measure execution of block and display result
8
+ #
9
+ # Time is measured by Benchmark module, displayed time is total
10
+ # (user cpu time + system cpu time + user and system cpu time of children)
11
+ # This is not wallclock time.
12
+ def self.bench(title)
13
+ puts "#{title}... "
14
+ result = Benchmark.bm do |x|
15
+ yield(x)
16
+ end
17
+ puts "Salida Bench"
18
+ end
19
+ def self.measure(title)
20
+ puts "#{title}... "
21
+ result = Benchmark.measure do
22
+ yield
23
+ end
24
+ $stderr.printf "%.03fs\n", result.total
25
+ end
26
+
27
+ # n = 50000
28
+ # FORCAST::Benchmark.bench("pagar_servicio") do |x|
29
+
30
+ # x.report { for i in 1..n; a = "1"; end }
31
+ # x.report { n.times do ; a = "1"; end }
32
+ # x.report { 1.upto(n) do ; a = "1"; end }
33
+
34
+ # end
35
+
36
+ # FORCAST::Benchmark.measure("pagar_servicio") do
37
+
38
+ # "a"*1_000_000
39
+
40
+ # end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,141 @@
1
+ module FORCAST
2
+ module Qvo
3
+ class Pago
4
+ attr_accessor :headers
5
+ attr_accessor :url
6
+ attr_accessor :json_send
7
+ attr_accessor :metodo
8
+
9
+ def initialize
10
+ self.headers = {}
11
+ end
12
+
13
+ #Mostrar usuarios
14
+ def allUsers()
15
+ json_recived = constructor do
16
+ self.metodo = :get
17
+ self.url = "/customers"
18
+ self.json_send = {}
19
+ end
20
+ #userId = parser(servidor.conexion(:get, {},'/customers')[1], "id")
21
+ #puts userId[0].to_s #Ultimo usuario creado
22
+ end
23
+
24
+ def oneUser(userId)
25
+ json_recived = constructor do
26
+ self.metodo = :get
27
+ self.url = "/customers/"+userId
28
+ self.json_send = {}
29
+ end
30
+ #userId = parser(servidor.conexion(:get, {},'/customers')[1], "id")
31
+ #puts userId[0].to_s #Ultimo usuario creado
32
+ end
33
+ #Crear usuarios
34
+ def createUser(email, nombre, address, phone)
35
+ json_recived = constructor do
36
+ self.metodo = :post
37
+ self.url = "/customers"
38
+ self.json_send = {email: email, name: nombre, address: address, phone: phone}
39
+ end
40
+ end
41
+
42
+ #Update usuario
43
+ def updateUser(userId,variable,dato)
44
+ json_recived = constructor do
45
+ self.metodo = :put
46
+ self.url = "/customers/"+userId
47
+ self.json_send = {"#{variable}" => dato}
48
+ end
49
+ end
50
+
51
+ #Eliminar usuario
52
+ def deleteUser(userId)
53
+ json_recived = constructor do
54
+ self.metodo = :delete
55
+ self.url = "/customers/"+userId
56
+ self.json_send = {}
57
+ end
58
+ end
59
+ #Mostrar Tarjetas de los usuarios
60
+ def cardsUser(userId)
61
+ json_recived = constructor do
62
+ self.metodo = :get
63
+ self.url = "/customers/"+userId+"/cards"
64
+ self.json_send = {}
65
+ end
66
+ end
67
+
68
+ #Cobrar a la tarjeta de un usuario
69
+ def cobroUser(userId, cardId, amount, description)
70
+ json_recived = constructor do
71
+ self.metodo = :post
72
+ self.url = "/customers/"+userId+"/cards/"+cardId+"/charge"
73
+ self.json_send = {amount: amount, description: description}
74
+ end
75
+ end
76
+
77
+ #Inscribir/Ingresar tarjeta
78
+ def cardInscription(userId, return_url)
79
+ ruta = '/customers/'+userId+'/cards/inscriptions'
80
+ #return_url redirije al usuario post inscripcion de tarjeta
81
+ puts parser(servidor.conexion(:post, {},ruta,{return_url: return_url})[1])
82
+ end
83
+
84
+ #Eliminar tarjeta
85
+ def deleteCard(userId, cardId)
86
+ ruta = "/customers/"+userId+"/cards/"+cardId
87
+ puts parser(servidor.conexion(:delete, {},ruta)[1])
88
+ end
89
+
90
+ # Todas las transacciones realizadas
91
+ def allTransactions()
92
+ user = parser(servidor.conexion(:get, {},'/transactions')[1], "customer")
93
+ puts user[0]#ultimo usuario
94
+ end
95
+
96
+ #Reembolso de pago efectuado(transaccion)
97
+ def refundCard(transactionId)
98
+ ruta = "/transactions/"+transactionId+"/refund"
99
+ puts parser(servidor.conexion(:post, {},ruta)[1])
100
+ end
101
+
102
+ def constructor
103
+ yield
104
+ resp = SERVIDORPAGOS.conexion(self.metodo, self.headers, self.url, self.json_send)
105
+ return true if resp[1].blank?
106
+ json_recived = {}
107
+ puts resp
108
+ if resp[0] && self.valid_json?(resp[1])
109
+ json_recived = JSON.parse(resp[1])
110
+ unless json_recived.is_a?(Array)
111
+ unless json_recived["error"].nil?
112
+ logger.info "[QVO] "+json_recived["error"].to_s
113
+ return false
114
+ end
115
+ end
116
+ return json_recived
117
+ else
118
+ return false
119
+ end
120
+ end
121
+
122
+ def valid_json?(json)
123
+ begin
124
+ JSON.parse(json)
125
+ return true
126
+ rescue JSON::ParserError => e
127
+ puts e
128
+ return false
129
+ end
130
+ end
131
+
132
+ def parser(varible, key1 = '')
133
+ if key1 == ''
134
+ return JSON.pretty_generate(FORCAST::Server.response_to_json(varible))
135
+ else
136
+ return FORCAST::Server.response_to_json(varible).map {|i| i[key1]}
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,296 @@
1
+ require 'openssl'
2
+ require 'base64'
3
+ require 'securerandom'
4
+ require 'http'
5
+ require 'uri'
6
+ require 'net/http'
7
+ require 'net/http/digest_auth'
8
+
9
+ module Forcast
10
+ module Utils
11
+ module Server
12
+ class Server
13
+
14
+ attr_accessor :username
15
+ attr_accessor :password
16
+ attr_accessor :ip
17
+ attr_accessor :port
18
+ attr_accessor :ssl
19
+ attr_accessor :dns
20
+ attr_accessor :url
21
+ attr_accessor :before_ping
22
+ attr_accessor :data
23
+ attr_accessor :read
24
+ attr_accessor :write
25
+ attr_accessor :connect
26
+ attr_accessor :headers
27
+
28
+ def initialize
29
+
30
+ self.read = 200
31
+ self.write = 200
32
+ self.connect = 10
33
+ self.headers = Hash.new
34
+ http = ''
35
+ yield(self)
36
+ self.ssl == true ? http = 'https://' : http = 'http://'
37
+ if self.dns.nil?
38
+ self.url = http + self.ip.to_s + ':' + self.port.to_s
39
+ else
40
+ self.port.nil? ? self.url = self.dns : self.url = self.dns.to_s + ':' + self.port.to_s
41
+ end
42
+ # self.freeze
43
+ end
44
+
45
+ def set_uri_req(uri_req = '')
46
+ self.url += uri_req.to_s
47
+ end
48
+
49
+ def add_params_to_url(json = {})
50
+ return if json.empty?
51
+ keys = json.keys
52
+ str = '?'
53
+ keys.each do |key|
54
+ str += key.to_s + '=' + json[key].to_s + '&'
55
+ end
56
+ str = str[0...-1]
57
+ self.url += str
58
+ end
59
+
60
+ #Ver lo que se le envia al servidor
61
+ def request (metodo = :get, headers = {}, ruta = '', json_send = '')
62
+
63
+ url = self.url + ruta.to_s
64
+ http = HTTP.build_request(metodo,
65
+ url,
66
+ {:json => json_send,
67
+ :headers => self.headers.merge!(headers)})
68
+ end
69
+
70
+ def request_raw (metodo = :get, ruta = '', raw = {})
71
+
72
+ url = self.url + ruta.to_s
73
+ http = HTTP.build_request(metodo,
74
+ url,
75
+ raw)
76
+ end
77
+
78
+
79
+ #Comprueba conexion con el servidor, devuelve True or False
80
+
81
+ def ping (ruta='')
82
+
83
+ url = self.url + ruta.to_s
84
+ begin
85
+ peticion = HTTP.timeout(:write => self.write, :connect => self.connect, :read => self.read)
86
+ .headers(self.headers)
87
+ .send(:get, url)
88
+ return [true,peticion]
89
+
90
+ rescue HTTP::TimeoutError => e
91
+
92
+ return [false,e]
93
+
94
+ rescue Exception => e
95
+
96
+ return [false,e]
97
+
98
+ ensure
99
+
100
+ #p "Ensure Ping"
101
+
102
+ end
103
+
104
+ end
105
+ #Intenta conectarse con el servidor un número x de veces en intervalos t. devuelve True or False
106
+ def iterate (metodo = :get, headers = '', ruta = '', json_send = '', iterate = 1, interval = 1)
107
+ arr = []
108
+ iterate.times do
109
+ arr.push(conexion(metodo,headers,ruta,json_send))
110
+ sleep interval
111
+ end
112
+ return arr
113
+ end
114
+
115
+ def abstract_connection
116
+
117
+ pp = ping if self.before_ping == true
118
+ return pp unless pp[0] if self.before_ping == true
119
+
120
+ begin
121
+
122
+ peticion = yield
123
+
124
+ return [true,peticion]
125
+
126
+ rescue HTTP::TimeoutError => e
127
+
128
+ return [false,e]
129
+
130
+ rescue Exception => e
131
+
132
+ return [false,e]
133
+
134
+ ensure
135
+
136
+ #p "Ensure Conexion"
137
+
138
+ end
139
+
140
+ end
141
+
142
+ def conexion (metodo = :get, headers = '', ruta = '', json_send = '')
143
+
144
+ abstract_connection do
145
+
146
+ url = self.url + ruta.to_s
147
+ HTTP.timeout(:write => self.write.to_i, :connect => self.connect.to_i, :read => self.read.to_i)
148
+ .headers(self.headers.merge!(headers))
149
+ .send(metodo, url, :json => json_send)
150
+ end
151
+
152
+ end
153
+
154
+
155
+ def conexion_basic_auth (metodo = :get,
156
+ headers = '',
157
+ ruta = '',
158
+ json_send = '',
159
+ user= '',
160
+ pass='')
161
+
162
+ abstract_connection do
163
+
164
+ url = self.url + ruta.to_s
165
+ HTTP.timeout(:write => self.write.to_i, :connect => self.connect.to_i, :read => self.read.to_i)
166
+ .headers(self.headers.merge!(headers))
167
+ .send(:basic_auth, :user => user, :pass => pass)
168
+ .send(metodo, url)
169
+ end
170
+
171
+ end
172
+
173
+ def conexion_auth (metodo = :get,
174
+ headers = '',
175
+ ruta = '',
176
+ json_send = '',
177
+ auth = '')
178
+
179
+ abstract_connection do
180
+
181
+ url = self.url + ruta.to_s
182
+ HTTP.timeout(:write => self.write.to_i, :connect => self.connect.to_i, :read => self.read.to_i)
183
+ .headers(self.headers.merge!(headers))
184
+ .send(:auth, auth)
185
+ .send(metodo, url, :json => json_send)
186
+ end
187
+
188
+ end
189
+
190
+ def conexion_raw (metodo = :get,
191
+ headers = '',
192
+ ruta = '',
193
+ raw = ''
194
+ )
195
+
196
+ abstract_connection do
197
+
198
+ url = self.url + ruta.to_s
199
+ HTTP.timeout(:write => self.write.to_i, :connect => self.connect.to_i, :read => self.read.to_i)
200
+ .headers(headers)
201
+ .send(metodo, url, raw)
202
+ end
203
+
204
+ end
205
+
206
+ def conexion_digest(metodo = :get,
207
+ headers = '',
208
+ ruta = '',
209
+ json_send = '',
210
+ user= '',
211
+ pass='')
212
+ abstract_connection do
213
+ digest_auth = Net::HTTP::DigestAuth.new
214
+ uri = URI.parse(self.url + ruta.to_s)
215
+ uri.user = user
216
+ uri.password = pass
217
+ h = Net::HTTP.new(uri.host, uri.port)
218
+ req = Net::HTTP::Get.new(uri.request_uri)
219
+ res = h.request(req)
220
+ # res is a 401 response with a WWW-Authenticate header
221
+ auth = digest_auth.auth_header(uri, res['www-authenticate'], 'GET')
222
+ # create a new request with the Authorization header
223
+ req = Net::HTTP::Get.new(uri.request_uri)
224
+ req.add_field('Authorization', auth)
225
+ # re-issue request with Authorization
226
+ res = h.request(req)
227
+ res
228
+ end
229
+ end
230
+
231
+ end
232
+
233
+ def self.response_to_json (response)
234
+
235
+ begin
236
+ JSON.parse(response.body.readpartial)
237
+ rescue Exception => e
238
+ return e
239
+ rescue JSON::ParserError => e
240
+ return e
241
+ end
242
+
243
+ end
244
+ end
245
+ end
246
+ end
247
+
248
+
249
+
250
+
251
+ # def build_header_auth(uri, version, httpmethod)
252
+ # response = get_auth_response(uri)
253
+ # @cnonce = Digest::MD5.hexdigest("%x" % (Time.now.to_i + rand(65535)))
254
+ # @@nonce_count += 1 response['www-authenticate'] =~ /^(\w+) (.*)/
255
+ # challenge = $2
256
+ # params = {}
257
+ # challenge.gsub(/(\w+)="(.*?)"/) { params[$1] = $2 }
258
+
259
+ # a_1 = "#{@username}:#{params['realm']}:#{@password}" #username, realm and password
260
+ # a_2 = "#{httpmethod}:#{uri}" #method and path
261
+ # request_digest = '' request_digest << Digest::MD5.hexdigest(a_1)
262
+ # request_digest << ':' << params['nonce']
263
+ # request_digest << ':' << ('%08x' % @@nonce_count)
264
+ # request_digest << ':' << @cnonce
265
+ # request_digest << ':' << params['qop']
266
+ # request_digest << ':' << Digest::MD5.hexdigest(a_2)
267
+
268
+ # header = []
269
+ # header << "Digest username=\"#{@username}\""
270
+ # header << "realm=\"#{params['realm']}\""
271
+ # header << "qop=#{params['qop']}"
272
+ # header << "algorithm=MD5"
273
+ # header << "uri=\"#{uri}\""
274
+ # header << "nonce=\"#{params['nonce']}\""
275
+ # header << "nc=#{'%08x' % @@nonce_count}"
276
+ # header << "cnonce=\"#{@cnonce}\""
277
+ # header << "response=\"#{Digest::MD5.hexdigest(request_digest)}\""
278
+ # header << "opaque=\"#{params['opaque']}\""
279
+ # header_auth_str = header.join(', ')
280
+
281
+ # # Build request (allows reuse)
282
+ # def build_request()
283
+ # @http = Net::HTTP.new(@uri.host, @uri.port)
284
+ # @http.use_ssl = true
285
+ # @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
286
+ # end
287
+
288
+ # # We need to get a response with a WWW-Authenticate request header
289
+ # def get_auth_response(uri)
290
+ # url = BASE_URL + uri
291
+ # @uri = URI.parse(url)
292
+ # build_request()
293
+ # req = Net::HTTP::Get.new(@uri.request_uri)
294
+ # response = @http.request(req)
295
+ # return response
296
+ # end