ocsprf 0.0.1 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b574da141094b8dbcbdc3f6a5d50d7c9a378f17432e9391e857b83e5e522f320
4
- data.tar.gz: e5b3ee60a8164a1788afc2c74120a7e256445d8eeb84df9c718a18f21fa047e6
3
+ metadata.gz: 5e349ecd9345bf80d7a5308bd322bc2278fce43e01a71e4ec52e30eee97b3484
4
+ data.tar.gz: fc9bcc0f02177740fcd7c6523a3748c4a4791478dab22df0493dd91e85988aa2
5
5
  SHA512:
6
- metadata.gz: e722fab4df04282da7f3a72aa6e19dccb5b32fcbb54fc42aaa1d7176aee31e6090fdbdfd9aaddf3169f5dc9e95b29cddeee73fdde5bc4ad93b7ebfedaa6ce8d8
7
- data.tar.gz: 3a8e2c864d036f5b83ed0a4443947cf117bf673c007e7385911e6da0ed15b96f60d3e1ea6ed945ba46679ef6ad09874d80cb351bbb46907d3102b2c97ee3db09
6
+ metadata.gz: 5ba747599accef080af0058fe2a7df871a015a2867956d3db5a7b82f5dfee77d127d74b3478c8d6c6a7369058bd96c63d373d2c03422e4056b72bb3878cdb866
7
+ data.tar.gz: 479527df9f08fdad7c81c8cca6d248edde034e1400e33b361b5530cefe6991d81b016940530e508bf2cd257fa4a90c56b84fa9efa877eb63a23043f871af8b01
data/Gemfile CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
+ gem 'fileutils'
5
6
  gem 'openssl'
6
7
  gem 'rake'
7
8
 
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Actions Status](https://github.com/thekuwayama/ocsprf/workflows/CI/badge.svg)](https://github.com/thekuwayama/ocsprf/actions?workflow=CI)
5
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/4d5bb71e2dca46f5a239/maintainability)](https://codeclimate.com/github/thekuwayama/ocsprf/maintainability)
6
6
 
7
- OCSP Response Fetch
7
+ `ocsprf` is OCSP Response Fetch CLI.
8
8
 
9
9
 
10
10
  ## Installation
@@ -22,6 +22,7 @@ $ gem install ocsprf
22
22
  $ ocsprf --help
23
23
  Usage: ocsprf [options] PATH
24
24
  -i, --issuer PATH issuer certificate path
25
+ -o, --output PATH output file path
25
26
  -s, --strict strict mode (default false)
26
27
  -v, --verbose verbose mode (default false)
27
28
  ```
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'fileutils'
3
4
  require 'net/http'
4
5
  require 'openssl'
5
6
  require 'optparse'
@@ -9,10 +9,10 @@ module OCSPResponseFetch
9
9
  def run
10
10
  subject, opts = parse_options
11
11
  issuer = opts[:issuer]
12
- subject_cert, issuer_cert = read_certs(subject, issuer)
13
-
14
- fetcher = Fetcher.new(subject_cert, issuer_cert)
12
+ ocsp_response = nil
15
13
  begin
14
+ subject_cert, issuer_cert = read_certs(subject, issuer)
15
+ fetcher = Fetcher.new(subject_cert, issuer_cert)
16
16
  ocsp_response = fetcher.run
17
17
  rescue OCSPResponseFetch::Error::RevokedError
18
18
  warn 'error: end entity certificate is revoked'
@@ -24,19 +24,26 @@ module OCSPResponseFetch
24
24
  end
25
25
 
26
26
  warn ocsp_response.to_text if opts[:verbose]
27
- puts ocsp_response.to_der
27
+ if opts[:output].nil?
28
+ puts ocsp_response.to_der
29
+ else
30
+ File.write(opts[:output], ocsp_response.to_der)
31
+ end
28
32
  end
29
33
 
30
34
  private
31
35
 
32
36
  # rubocop: disable Metrics/AbcSize
37
+ # rubocop: disable Metrics/CyclomaticComplexity
33
38
  # rubocop: disable Metrics/MethodLength
39
+ # rubocop: disable Metrics/PerceivedComplexity
34
40
  def parse_options(argv = ARGV)
35
41
  op = OptionParser.new
36
42
 
37
43
  # default value
38
44
  opts = {
39
45
  issuer: nil,
46
+ output: nil,
40
47
  strict: false,
41
48
  verbose: false
42
49
  }
@@ -49,6 +56,14 @@ module OCSPResponseFetch
49
56
  opts[:issuer] = v
50
57
  end
51
58
 
59
+ op.on(
60
+ '-o PATH',
61
+ '--output PATH',
62
+ 'output file path'
63
+ ) do |v|
64
+ opts[:output] = v
65
+ end
66
+
52
67
  op.on(
53
68
  '-s',
54
69
  '--strict',
@@ -90,10 +105,21 @@ module OCSPResponseFetch
90
105
  exit 1
91
106
  end
92
107
 
108
+ unless opts[:output].nil?
109
+ begin
110
+ FileUtils.touch(opts[:output])
111
+ rescue Errno::EACCES
112
+ warn "error file #{opts[:output]} is not writable"
113
+ exit 1
114
+ end
115
+ end
116
+
93
117
  [args[0], opts]
94
118
  end
95
119
  # rubocop: enable Metrics/AbcSize
120
+ # rubocop: enable Metrics/CyclomaticComplexity
96
121
  # rubocop: enable Metrics/MethodLength
122
+ # rubocop: enable Metrics/PerceivedComplexity
97
123
 
98
124
  # @param subject [String]
99
125
  # @param issuer [String]
@@ -114,15 +140,16 @@ module OCSPResponseFetch
114
140
 
115
141
  begin
116
142
  issuer_cert = get_issuer_cert(ca_issuer)
117
- rescue OpenSSL::X509::CertificateError, Net::OpenTimeout
118
- raise OCSPResponseFetch::Error::FetchFailedEreror,
143
+ rescue OpenSSL::X509::CertificateError,
144
+ Net::OpenTimeout, SystemCallError
145
+ raise OCSPResponseFetch::Error::FetchFailedError,
119
146
  'Failed to get the issuser Certificate'
120
147
  end
121
148
  else
122
149
  begin
123
150
  issuer_cert = OpenSSL::X509::Certificate.new(File.read(issuer))
124
151
  rescue OpenSSL::X509::CertificateError
125
- raise OCSPResponseFetch::Error::FetchFailedEreror,
152
+ raise OCSPResponseFetch::Error::FetchFailedError,
126
153
  'Failed to get the issuser Certificate'
127
154
  end
128
155
  end
@@ -44,7 +44,7 @@ module OCSPResponseFetch
44
44
  Timeout.timeout(2) do
45
45
  ocsp_response = send_ocsp_request(ocsp_request, ocsp_uri)
46
46
  end
47
- rescue Timeout::Error
47
+ rescue Timeout::Error, SystemCallError
48
48
  raise OCSPResponseFetch::Error::FetchFailedError,
49
49
  'Timeout to access OCSP Responder'
50
50
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OCSPResponseFetch
4
- VERSION = '0.0.1'
4
+ VERSION = '0.0.2'
5
5
  end
data/ocsprf.gemspec CHANGED
@@ -22,5 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = ['ocsprf']
23
23
 
24
24
  spec.add_development_dependency 'bundler'
25
+ spec.add_dependency 'fileutils'
25
26
  spec.add_dependency 'openssl'
26
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocsprf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekuwayama
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-18 00:00:00.000000000 Z
11
+ date: 2020-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fileutils
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: openssl
29
43
  requirement: !ruby/object:Gem::Requirement