localhost 1.1.10 → 1.3.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
- checksums.yaml.gz.sig +0 -0
- data/lib/localhost/authority.rb +39 -21
- data/lib/localhost/version.rb +2 -2
- data/license.md +2 -1
- data/readme.md +8 -0
- data.tar.gz.sig +0 -0
- metadata +9 -62
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42bb902395ea685a7f1d14530439871920afb46b852aa9f6c3bbb8b66d07176a
|
4
|
+
data.tar.gz: 2b63d1af2999cd2ebca0f706bb626654cf765953fbbe1a0a6d4c3b6985482b50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f27728bc1e1593af0db04c176bd99c878958aa662d6902649d6d5cb617034269e641a61d201255be7f8a859a08b3015980b56f28672dc301547f7aa3c6c96fa8
|
7
|
+
data.tar.gz: 66ad2882eef6927aaf6da87280931a81f5928d2cf72bb92a6a10451721465a08b9d51f52a01a1d97847a7019c634499c2cb068ed19401d1e8e713452ec633156
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/localhost/authority.rb
CHANGED
@@ -1,20 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
|
-
# Copyright, 2018-
|
4
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
5
5
|
# Copyright, 2019, by Richard S. Leung.
|
6
6
|
# Copyright, 2021, by Akshay Birajdar.
|
7
7
|
# Copyright, 2021, by Ye Lin Aung.
|
8
8
|
# Copyright, 2023, by Antonio Terceiro.
|
9
9
|
# Copyright, 2023, by Yuuji Yaginuma.
|
10
|
+
# Copyright, 2024, by Colin Shea.
|
10
11
|
|
12
|
+
require 'fileutils'
|
11
13
|
require 'openssl'
|
12
14
|
|
13
15
|
module Localhost
|
14
16
|
# Represents a single public/private key pair for a given hostname.
|
15
17
|
class Authority
|
18
|
+
# Where to store the key pair on the filesystem. This is a subdirectory
|
19
|
+
# of $XDG_STATE_HOME, or ~/.local/state/ when that's not defined.
|
16
20
|
def self.path
|
17
|
-
File.expand_path("
|
21
|
+
File.expand_path("localhost.rb", ENV.fetch("XDG_STATE_HOME", "~/.local/state"))
|
18
22
|
end
|
19
23
|
|
20
24
|
# List all certificate authorities in the given directory:
|
@@ -112,7 +116,7 @@ module Localhost
|
|
112
116
|
certificate.version = 2
|
113
117
|
|
114
118
|
certificate.not_before = Time.now
|
115
|
-
certificate.not_after = Time.now + (3600 * 24 * 365
|
119
|
+
certificate.not_after = Time.now + (3600 * 24 * 365)
|
116
120
|
|
117
121
|
extension_factory = OpenSSL::X509::ExtensionFactory.new
|
118
122
|
extension_factory.subject_certificate = certificate
|
@@ -176,27 +180,27 @@ module Localhost
|
|
176
180
|
end
|
177
181
|
|
178
182
|
def load(path = @root)
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
183
|
+
ensure_authority_path_exists(path)
|
184
|
+
|
185
|
+
certificate_path = File.join(path, "#{@hostname}.crt")
|
186
|
+
key_path = File.join(path, "#{@hostname}.key")
|
187
|
+
|
188
|
+
return false unless File.exist?(certificate_path) and File.exist?(key_path)
|
189
|
+
|
190
|
+
certificate = OpenSSL::X509::Certificate.new(File.read(certificate_path))
|
191
|
+
key = OpenSSL::PKey::RSA.new(File.read(key_path))
|
192
|
+
|
193
|
+
# Certificates with old version need to be regenerated.
|
194
|
+
return false if certificate.version < 2
|
195
|
+
|
196
|
+
@certificate = certificate
|
197
|
+
@key = key
|
198
|
+
|
199
|
+
return true
|
196
200
|
end
|
197
201
|
|
198
202
|
def save(path = @root)
|
199
|
-
|
203
|
+
ensure_authority_path_exists(path)
|
200
204
|
|
201
205
|
lockfile_path = File.join(path, "#{@hostname}.lock")
|
202
206
|
|
@@ -214,5 +218,19 @@ module Localhost
|
|
214
218
|
)
|
215
219
|
end
|
216
220
|
end
|
221
|
+
|
222
|
+
# Ensures that the directory to store the certificate exists. If the legacy
|
223
|
+
# directory (~/.localhost/) exists, it is moved into the new XDG Basedir
|
224
|
+
# compliant directory.
|
225
|
+
def ensure_authority_path_exists(path = @root)
|
226
|
+
old_root = File.expand_path("~/.localhost")
|
227
|
+
|
228
|
+
if File.directory?(old_root) and not File.directory?(path)
|
229
|
+
# Migrates the legacy dir ~/.localhost/ to the XDG compliant directory
|
230
|
+
File.rename(old_root, path)
|
231
|
+
elsif not File.directory?(path)
|
232
|
+
FileUtils.makedirs(path, mode: 0700)
|
233
|
+
end
|
234
|
+
end
|
217
235
|
end
|
218
236
|
end
|
data/lib/localhost/version.rb
CHANGED
data/license.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# MIT License
|
2
2
|
|
3
|
-
Copyright, 2018-
|
3
|
+
Copyright, 2018-2024, by Samuel Williams.
|
4
4
|
Copyright, 2018, by Gabriel Sobrinho.
|
5
5
|
Copyright, 2019, by Richard S. Leung.
|
6
6
|
Copyright, 2020-2021, by Olle Jonsson.
|
@@ -9,6 +9,7 @@ Copyright, 2021, by Ye Lin Aung.
|
|
9
9
|
Copyright, 2022, by Juri Hahn.
|
10
10
|
Copyright, 2023, by Antonio Terceiro.
|
11
11
|
Copyright, 2023, by Yuuji Yaginuma.
|
12
|
+
Copyright, 2024, by Colin Shea.
|
12
13
|
|
13
14
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
14
15
|
of this software and associated documentation files (the "Software"), to deal
|
data/readme.md
CHANGED
@@ -24,6 +24,14 @@ We welcome contributions to this project.
|
|
24
24
|
4. Push to the branch (`git push origin my-new-feature`).
|
25
25
|
5. Create new Pull Request.
|
26
26
|
|
27
|
+
### Developer Certificate of Origin
|
28
|
+
|
29
|
+
This project uses the [Developer Certificate of Origin](https://developercertificate.org/). All contributors to this project must agree to this document to have their contributions accepted.
|
30
|
+
|
31
|
+
### Contributor Covenant
|
32
|
+
|
33
|
+
This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
|
34
|
+
|
27
35
|
## See Also
|
28
36
|
|
29
37
|
- [Falcon](https://github.com/socketry/falcon) — Uses `Localhost::Authority` to provide HTTP/2 with minimal configuration.
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: localhost
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
@@ -9,6 +9,7 @@ authors:
|
|
9
9
|
- Ye Lin Aung
|
10
10
|
- Akshay Birajdar
|
11
11
|
- Antonio Terceiro
|
12
|
+
- Colin Shea
|
12
13
|
- Gabriel Sobrinho
|
13
14
|
- Juri Hahn
|
14
15
|
- Richard S. Leung
|
@@ -45,64 +46,8 @@ cert_chain:
|
|
45
46
|
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
46
47
|
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
47
48
|
-----END CERTIFICATE-----
|
48
|
-
date:
|
49
|
-
dependencies:
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: bundler
|
52
|
-
requirement: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '0'
|
57
|
-
type: :development
|
58
|
-
prerelease: false
|
59
|
-
version_requirements: !ruby/object:Gem::Requirement
|
60
|
-
requirements:
|
61
|
-
- - ">="
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '0'
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: covered
|
66
|
-
requirement: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - ">="
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '0'
|
71
|
-
type: :development
|
72
|
-
prerelease: false
|
73
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
requirements:
|
75
|
-
- - ">="
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: sus
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
requirements:
|
82
|
-
- - "~>"
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
version: '0.16'
|
85
|
-
type: :development
|
86
|
-
prerelease: false
|
87
|
-
version_requirements: !ruby/object:Gem::Requirement
|
88
|
-
requirements:
|
89
|
-
- - "~>"
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: '0.16'
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: sus-fixtures-async
|
94
|
-
requirement: !ruby/object:Gem::Requirement
|
95
|
-
requirements:
|
96
|
-
- - ">="
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: '0'
|
99
|
-
type: :development
|
100
|
-
prerelease: false
|
101
|
-
version_requirements: !ruby/object:Gem::Requirement
|
102
|
-
requirements:
|
103
|
-
- - ">="
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: '0'
|
49
|
+
date: 2024-04-12 00:00:00.000000000 Z
|
50
|
+
dependencies: []
|
106
51
|
description:
|
107
52
|
email:
|
108
53
|
executables: []
|
@@ -117,7 +62,9 @@ files:
|
|
117
62
|
homepage: https://github.com/socketry/localhost
|
118
63
|
licenses:
|
119
64
|
- MIT
|
120
|
-
metadata:
|
65
|
+
metadata:
|
66
|
+
documentation_uri: https://socketry.github.io/localhost/
|
67
|
+
source_code_uri: https://github.com/socketry/localhost.git
|
121
68
|
post_install_message:
|
122
69
|
rdoc_options: []
|
123
70
|
require_paths:
|
@@ -126,14 +73,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
73
|
requirements:
|
127
74
|
- - ">="
|
128
75
|
- !ruby/object:Gem::Version
|
129
|
-
version: '0'
|
76
|
+
version: '3.0'
|
130
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
78
|
requirements:
|
132
79
|
- - ">="
|
133
80
|
- !ruby/object:Gem::Version
|
134
81
|
version: '0'
|
135
82
|
requirements: []
|
136
|
-
rubygems_version: 3.
|
83
|
+
rubygems_version: 3.5.3
|
137
84
|
signing_key:
|
138
85
|
specification_version: 4
|
139
86
|
summary: Manage a local certificate authority for self-signed localhost development
|
metadata.gz.sig
CHANGED
Binary file
|