certgen 0.1.0 → 0.2.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 +4 -4
- data/exe/certgen +2 -2
- data/lib/certgen/cli.rb +47 -16
- data/lib/certgen/generator.rb +13 -5
- data/lib/certgen/version.rb +1 -1
- data/lib/certgen.rb +3 -3
- metadata +35 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a6d8a3b44989688785b7f2c2f079f0165e32737c18bc09f9f8d54075a607755
|
4
|
+
data.tar.gz: 627be1336a96f8900a81f2a3548f4e923a9b35090ac7de650ec294851f401ace
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c421a459113793501f907df8f39bc44231b063b3bc7458ed3cf25a47310413ea301d9184a89e17e5ee54d1b6210349d3e36af604ec10633e44c899ba6512af0b
|
7
|
+
data.tar.gz: f1f67240880ec804fb66b1a20e04d533ae6d5a684451a2e33fbe81c2f52a181624dbf31fc54d3c349a42ec581bfcfd87bf1b64e314283f7308b5c63e4f504e49
|
data/exe/certgen
CHANGED
data/lib/certgen/cli.rb
CHANGED
@@ -1,36 +1,67 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# lib/certgen/cli.rb
|
4
|
-
|
5
3
|
require "optparse"
|
4
|
+
require_relative "generator"
|
6
5
|
|
7
6
|
module Certgen
|
8
7
|
class CLI
|
9
|
-
def self.start
|
8
|
+
def self.start(argv)
|
10
9
|
options = {}
|
10
|
+
subcommand = argv.shift
|
11
|
+
|
12
|
+
parser = OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: certgen [command] [options]"
|
11
14
|
|
12
|
-
|
13
|
-
opts.
|
15
|
+
opts.separator ""
|
16
|
+
opts.separator "Commands:"
|
17
|
+
opts.separator " generate Generate a real SSL certificate using Let's Encrypt"
|
18
|
+
opts.separator " test Test certificate generation using the Let's Encrypt staging environment (no rate limits)"
|
19
|
+
opts.separator ""
|
20
|
+
opts.separator "Options:"
|
21
|
+
|
22
|
+
opts.on("--domain DOMAIN", "The domain to issue a certificate for (e.g., example.com)") do |v|
|
23
|
+
options[:domain] = v
|
24
|
+
end
|
14
25
|
|
15
|
-
opts.on("
|
16
|
-
|
17
|
-
|
18
|
-
|
26
|
+
opts.on("--email EMAIL", "Email address for Let's Encrypt registration") do |v|
|
27
|
+
options[:email] = v
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on("-h", "--help", "Print this help message") do
|
19
31
|
puts opts
|
20
32
|
exit
|
21
33
|
end
|
22
|
-
end
|
34
|
+
end
|
35
|
+
|
36
|
+
begin
|
37
|
+
parser.parse!(argv)
|
38
|
+
rescue OptionParser::InvalidOption => e
|
39
|
+
puts "❌ #{e.message}"
|
40
|
+
puts parser
|
41
|
+
exit 1
|
42
|
+
end
|
43
|
+
|
44
|
+
unless %w[generate test].include?(subcommand)
|
45
|
+
puts "❌ Unknown command: #{subcommand}"
|
46
|
+
puts parser
|
47
|
+
exit 1
|
48
|
+
end
|
23
49
|
|
24
50
|
unless options[:domain] && options[:email]
|
25
|
-
puts "
|
51
|
+
puts "❌ Both --domain and --email are required"
|
52
|
+
puts parser
|
26
53
|
exit 1
|
27
54
|
end
|
28
55
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
56
|
+
case subcommand
|
57
|
+
when "generate"
|
58
|
+
Certgen::Generator.new(domain: options[:domain], email: options[:email]).run
|
59
|
+
when "test"
|
60
|
+
Certgen::Generator.new(domain: options[:domain], email: options[:email], staging: true).run
|
61
|
+
else
|
62
|
+
puts "Unknown command. Available: generate, test"
|
63
|
+
exit 1
|
64
|
+
end
|
34
65
|
end
|
35
66
|
end
|
36
67
|
end
|
data/lib/certgen/generator.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "acme-client"
|
4
|
-
require "openssl"
|
5
4
|
require "fileutils"
|
5
|
+
require "openssl"
|
6
6
|
require "zip"
|
7
7
|
|
8
8
|
module Certgen
|
@@ -10,9 +10,13 @@ module Certgen
|
|
10
10
|
LETS_ENCRYPT_DIRECTORY = "https://acme-v02.api.letsencrypt.org/directory"
|
11
11
|
ACCOUNT_KEY_PATH = File.expand_path("~/.certgen/acme_account.key")
|
12
12
|
|
13
|
-
def initialize(domain:, email:)
|
13
|
+
def initialize(domain:, email:, staging: false)
|
14
14
|
@input_domain = domain
|
15
15
|
@email = email
|
16
|
+
@staging = staging
|
17
|
+
@directory_url = staging ?
|
18
|
+
"https://acme-staging-v02.api.letsencrypt.org/directory" :
|
19
|
+
"https://acme-v02.api.letsencrypt.org/directory"
|
16
20
|
@base_domain = domain.sub(/^www\./, "")
|
17
21
|
@domains = [@base_domain, "www.#{@base_domain}"].uniq
|
18
22
|
@output_dir = File.expand_path("~/.ssl_output/#{@base_domain}")
|
@@ -46,17 +50,21 @@ module Certgen
|
|
46
50
|
def setup_client
|
47
51
|
@client = Acme::Client.new(
|
48
52
|
private_key: @account_key,
|
49
|
-
directory:
|
53
|
+
directory: @directory_url
|
50
54
|
)
|
51
55
|
|
52
56
|
begin
|
53
57
|
@client.new_account(contact: "mailto:#{@email}", terms_of_service_agreed: true)
|
54
58
|
rescue Acme::Client::Error::Malformed
|
55
|
-
puts "
|
59
|
+
puts "❌ ACME account already registered."
|
56
60
|
end
|
57
61
|
end
|
58
62
|
|
59
63
|
def create_output_directory
|
64
|
+
if Dir.exist?(@output_dir)
|
65
|
+
puts "🧹 Cleaning existing output directory: #{@output_dir}"
|
66
|
+
FileUtils.rm_rf(@output_dir)
|
67
|
+
end
|
60
68
|
FileUtils.mkdir_p(@output_dir)
|
61
69
|
end
|
62
70
|
|
@@ -127,7 +135,7 @@ module Certgen
|
|
127
135
|
end
|
128
136
|
|
129
137
|
def create_zip(zip_path, files)
|
130
|
-
Zip::File.open(zip_path, Zip::File::CREATE) do |zipfile|
|
138
|
+
::Zip::File.open(zip_path, Zip::File::CREATE) do |zipfile|
|
131
139
|
files.each do |file|
|
132
140
|
zipfile.add(File.basename(file), file) if File.exist?(file)
|
133
141
|
end
|
data/lib/certgen/version.rb
CHANGED
data/lib/certgen.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "certgen/version"
|
4
3
|
require "certgen/cli"
|
5
4
|
require "certgen/generator"
|
5
|
+
require "certgen/version"
|
6
6
|
|
7
7
|
module Certgen
|
8
8
|
# Custom error class for all Certgen-specific errors
|
@@ -11,8 +11,8 @@ module Certgen
|
|
11
11
|
# Main entry point for generating certificates
|
12
12
|
def self.generate(domain:, email:)
|
13
13
|
Certgen::Generator.new(
|
14
|
-
domain
|
15
|
-
email:
|
14
|
+
domain: domain,
|
15
|
+
email: email
|
16
16
|
).run
|
17
17
|
end
|
18
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: certgen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rajan Bhattarai
|
8
|
+
autorequire:
|
8
9
|
bindir: exe
|
9
10
|
cert_chain: []
|
10
|
-
date: 2025-05-
|
11
|
-
dependencies:
|
11
|
+
date: 2025-05-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: acme-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.21
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.21
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubyzip
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.4.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.4.1
|
12
41
|
description: Certgen is a command-line Ruby gem that helps users generate free SSL
|
13
42
|
certificates from Let's Encrypt using DNS-01 verification. Ideal for users with
|
14
43
|
manual or cPanel-based hosting environments. Supports wildcard domains and reusable
|
@@ -41,6 +70,7 @@ metadata:
|
|
41
70
|
homepage_uri: https://github.com/cdrrazan/certgen
|
42
71
|
source_code_uri: https://github.com/cdrrazan/certgen
|
43
72
|
changelog_uri: https://github.com/cdrrazan/certgen/blob/main/CHANGELOG.md
|
73
|
+
post_install_message:
|
44
74
|
rdoc_options: []
|
45
75
|
require_paths:
|
46
76
|
- lib
|
@@ -55,7 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
85
|
- !ruby/object:Gem::Version
|
56
86
|
version: '0'
|
57
87
|
requirements: []
|
58
|
-
rubygems_version: 3.
|
88
|
+
rubygems_version: 3.4.17
|
89
|
+
signing_key:
|
59
90
|
specification_version: 4
|
60
91
|
summary: A Ruby CLI gem to generate free SSL certificates using Let's Encrypt with
|
61
92
|
DNS verification.
|