|
- class CheckWorker
- include Sidekiq::Worker
- sidekiq_options retry: false
-
- def key_to_json(key)
- key.nil? ? nil : { type: key.type, size: key.size, rsa_size: key.rsa_equivalent_size }
- end
-
- def perform(host, port=nil)
- host = SimpleIDN.to_ascii host.downcase
- result = begin
- grade = self.analyze *(port ? [host, port] : [host])
- server = grade.server
- result = {
- key: key_to_json(server.key),
- dh: server.dh.collect { |k| key_to_json k },
- protocols: server.supported_protocols,
- ciphers: server.supported_ciphers.collect { |c| { protocol: c.protocol, name: c.name, size: c.size, dh: key_to_json(c.dh) } },
- score: {
- rank: grade.grade,
- details: {
- score: grade.score,
- protocol: grade.protocol_score,
- key_exchange: grade.key_exchange_score,
- cipher_strengths: grade.cipher_strengths_score
- },
- error: grade.error,
- danger: grade.danger,
- warning: grade.warning,
- success: grade.success
- }
- }
-
- self.result server, grade, result
- rescue CryptCheck::Tls::Server::TLSNotAvailableException
- { no_tls: true }
- end
- Datastore.post self.type, host, port, result
- end
-
- protected
- def result(_, _, result)
- result
- end
- end
|