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 |