ssbx 0.1.1 → 0.1.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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +20 -0
- data/exe/ssbx +46 -16
- data/lib/ssbx/file.rb +3 -2
- data/lib/ssbx/util.rb +47 -0
- data/lib/ssbx/version.rb +1 -1
- data/lib/ssbx.rb +1 -0
- metadata +2 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8ac01c3e11dac6e4e8ef24b14e88dbb64164dd6fd81c34c7e0408c90b26838dd
         | 
| 4 | 
            +
              data.tar.gz: 5c0bf89484444b8b72c1e5a07df573364f75b315f8abe099ef81236a0b277055
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e28b74015ab982982ad09ab7c7e5f914acb249f8f61f3fa221d2e572ed2f52758d4622777c9000079f5e19a052ac45e1ae585f73feb4fe4e7559bf7d6d4cbdfb
         | 
| 7 | 
            +
              data.tar.gz: ced2414f90e641209126b2205f49eb10d8d3f0822f75198e963739d5d0d2c57e5093c61c043e02dd83edbf4bd92de9b3fc835adf3f2f3e8438fc121ce954e4b5
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -23,10 +23,30 @@ Edit `~/.ssbx.yaml` to contain... | |
| 23 23 | 
             
            ```yaml
         | 
| 24 24 | 
             
            user: You
         | 
| 25 25 | 
             
            pass: A secret password
         | 
| 26 | 
            +
            # This is optional if you want to override $EDITOR.
         | 
| 27 | 
            +
            editor: vi
         | 
| 26 28 | 
             
            ```
         | 
| 27 29 |  | 
| 28 30 | 
             
            Then use `ssbx` to view or edit a file.
         | 
| 29 31 |  | 
| 32 | 
            +
            ## Simple Recipes
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                # Add a user with a simple password.
         | 
| 35 | 
            +
                sbx -f f1.enc -a user1:userpass 
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                # ... or
         | 
| 38 | 
            +
                cat f1.enc | ssbx -f - -a user1:userpass > f2.enc
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                # Remove the user.
         | 
| 41 | 
            +
                ssbx -f f1.enc -d user1:userpass
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                # File data to standard out.
         | 
| 44 | 
            +
                ssbx -f f1.enc -o -
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                # Edit file data and re-encrypt the file.
         | 
| 47 | 
            +
                ssbx -f f1.enc -e
         | 
| 48 | 
            +
             | 
| 49 | 
            +
             | 
| 30 50 | 
             
            ## Development
         | 
| 31 51 |  | 
| 32 52 | 
             
            After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
         | 
    
        data/exe/ssbx
    CHANGED
    
    | @@ -4,6 +4,7 @@ require "ssbx" | |
| 4 4 | 
             
            require 'optparse'
         | 
| 5 5 | 
             
            require 'yaml'
         | 
| 6 6 | 
             
            require 'pp'
         | 
| 7 | 
            +
            require 'tempfile'
         | 
| 7 8 |  | 
| 8 9 | 
             
            CONFIG = {
         | 
| 9 10 | 
             
                'file' => 'ssbx.enc',
         | 
| @@ -29,6 +30,10 @@ OptionParser.new do |opts| | |
| 29 30 | 
             
                    CONFIG['list'] = true
         | 
| 30 31 | 
             
                end
         | 
| 31 32 |  | 
| 33 | 
            +
                opts.on('-e', '--edit', "Edit the given file with EDITOR and exit.") do
         | 
| 34 | 
            +
                    CONFIG['edit'] = true
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 32 37 | 
             
                opts.on('-d', '--delete=user', String, "Delete user. May be used multiple times.") do |u|
         | 
| 33 38 | 
             
                    CONFIG['delete_users'] << u
         | 
| 34 39 | 
             
                end
         | 
| @@ -60,24 +65,23 @@ if CONFIG['verbose'] | |
| 60 65 | 
             
            end
         | 
| 61 66 |  | 
| 62 67 | 
             
            CONFIG['delete_users'].each do |u|
         | 
| 63 | 
            -
                f = Ssbx::File.new
         | 
| 64 | 
            -
                File.open(CONFIG['file'], 'r') { |io| f.read(io) }
         | 
| 68 | 
            +
                f = Ssbx::Util.read(CONFIG['file']) { |io| Ssbx::File.new(io) }
         | 
| 65 69 | 
             
                bx = Ssbx::Box.new(f)
         | 
| 66 70 | 
             
                bx.remove_user(u)
         | 
| 67 | 
            -
                 | 
| 71 | 
            +
                Ssbx::Util.write(CONFIG['file']) { |io| f.write(io) }
         | 
| 68 72 | 
             
            end
         | 
| 69 73 |  | 
| 70 | 
            -
            if CONFIG['add_users']
         | 
| 74 | 
            +
            if CONFIG['add_users'].length > 0
         | 
| 71 75 | 
             
                f = Ssbx::File.new
         | 
| 72 76 | 
             
                bx = Ssbx::Box.new(f)
         | 
| 73 | 
            -
                data =  | 
| 77 | 
            +
                data = Ssbx::Util.read(CONFIG['file']) do |io|
         | 
| 74 78 | 
             
                    bx.read(io, CONFIG['user'], CONFIG['pass'])
         | 
| 75 79 | 
             
                end
         | 
| 76 80 |  | 
| 77 81 | 
             
                CONFIG['add_users'].each do |u|
         | 
| 78 82 | 
             
                    u, p = u[0], u[1] || u[0]
         | 
| 79 83 |  | 
| 80 | 
            -
                     | 
| 84 | 
            +
                    Ssbx::Util.write(CONFIG['file']) do |io|
         | 
| 81 85 | 
             
                        bx.write(io, u, p, data)
         | 
| 82 86 | 
             
                    end 
         | 
| 83 87 | 
             
                end
         | 
| @@ -87,31 +91,57 @@ if CONFIG['set'] | |
| 87 91 | 
             
                f = Ssbx::File.new
         | 
| 88 92 | 
             
                bx = Ssbx::Box.new(f)
         | 
| 89 93 | 
             
                data = File.read(CONFIG['set'])
         | 
| 90 | 
            -
                 | 
| 91 | 
            -
                    bx.write(io,  | 
| 92 | 
            -
                end
         | 
| 94 | 
            +
                Ssbx::Util.write(CONFIG['file']) do |io|
         | 
| 95 | 
            +
                    bx.write(io, u, p, data)
         | 
| 96 | 
            +
                end 
         | 
| 93 97 | 
             
            end
         | 
| 94 98 |  | 
| 95 99 | 
             
            if CONFIG['out']
         | 
| 96 100 | 
             
                f = Ssbx::File.new
         | 
| 97 101 | 
             
                bx = Ssbx::Box.new(f)
         | 
| 98 | 
            -
                data =  | 
| 102 | 
            +
                data = Ssbx::Util.read(CONFIG['file']) do |io|
         | 
| 99 103 | 
             
                    bx.read(io, CONFIG['user'], CONFIG['pass'])
         | 
| 100 104 | 
             
                end
         | 
| 101 105 |  | 
| 102 | 
            -
                 | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 106 | 
            +
                Ssbx::Util.write(CONFIG['out']) { |io| io.write(data) }
         | 
| 107 | 
            +
            end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            if CONFIG['edit']
         | 
| 110 | 
            +
                f = Ssbx::File.new
         | 
| 111 | 
            +
                bx = Ssbx::Box.new(f)
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                data = if File.file? CONFIG['file']
         | 
| 114 | 
            +
                    Ssbx::Util.read(CONFIG['file']) do |io|
         | 
| 115 | 
            +
                        bx.read(io, CONFIG['user'], CONFIG['pass'])
         | 
| 116 | 
            +
                    end
         | 
| 117 | 
            +
                else
         | 
| 118 | 
            +
                    ''
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                tmpfile = Tempfile.new("ssbx")
         | 
| 122 | 
            +
                tmpfile.write(data)
         | 
| 123 | 
            +
                tmpfile.flush
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                begin
         | 
| 126 | 
            +
                    editor = CONFIG['editor'] || ENV['EDITOR']
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                    system("#{editor} #{tmpfile.path}")
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                    tmpfile.rewind
         | 
| 131 | 
            +
                    data = File.read(tmpfile)
         | 
| 132 | 
            +
                    File.open(CONFIG['file'], 'wb') do |io|
         | 
| 133 | 
            +
                        bx.write(io, CONFIG['user'], CONFIG['pass'], data)
         | 
| 107 134 | 
             
                    end
         | 
| 135 | 
            +
                ensure
         | 
| 136 | 
            +
                    tmpfile.unlink
         | 
| 108 137 | 
             
                end
         | 
| 109 138 | 
             
            end
         | 
| 110 139 |  | 
| 111 140 | 
             
            if CONFIG['list']
         | 
| 112 141 | 
             
                f = Ssbx::File.new
         | 
| 113 142 | 
             
                bx = Ssbx::Box.new(f)
         | 
| 114 | 
            -
             | 
| 143 | 
            +
             | 
| 144 | 
            +
                Ssbx::Util.read(CONFIG['file']) do |io|
         | 
| 115 145 | 
             
                    f.read(io)
         | 
| 116 146 | 
             
                end
         | 
| 117 147 |  | 
    
        data/lib/ssbx/file.rb
    CHANGED
    
    | @@ -16,9 +16,10 @@ module Ssbx | |
| 16 16 | 
             
                    # The file data.
         | 
| 17 17 | 
             
                    attr_accessor :data
         | 
| 18 18 |  | 
| 19 | 
            -
                    def initialize
         | 
| 19 | 
            +
                    def initialize(optional_stream = nil)
         | 
| 20 20 | 
             
                        @keys = []
         | 
| 21 21 | 
             
                        @data = ''
         | 
| 22 | 
            +
                        read(optional_stream) if optional_stream            
         | 
| 22 23 | 
             
                    end
         | 
| 23 24 |  | 
| 24 25 | 
             
                    def write(out)
         | 
| @@ -38,7 +39,7 @@ module Ssbx | |
| 38 39 | 
             
                        out.write(@data)
         | 
| 39 40 | 
             
                    end
         | 
| 40 41 |  | 
| 41 | 
            -
                    def read(istream) | 
| 42 | 
            +
                    def read(istream)
         | 
| 42 43 | 
             
                        @keys = []
         | 
| 43 44 | 
             
                        # Read the key record length...
         | 
| 44 45 | 
             
                        istream.read(4).unpack('N')[0].times do
         | 
    
        data/lib/ssbx/util.rb
    ADDED
    
    | @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            module Ssbx
         | 
| 2 | 
            +
                module Util
         | 
| 3 | 
            +
                    def self.read(istream)
         | 
| 4 | 
            +
                        if istream.is_a? String
         | 
| 5 | 
            +
                            stream = if istream == '-'
         | 
| 6 | 
            +
                                STDIN
         | 
| 7 | 
            +
                            else
         | 
| 8 | 
            +
                                ::File.open(istream, 'rb')
         | 
| 9 | 
            +
                            end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                            if block_given?
         | 
| 12 | 
            +
                                begin
         | 
| 13 | 
            +
                                    yield stream
         | 
| 14 | 
            +
                                ensure
         | 
| 15 | 
            +
                                    stream.close
         | 
| 16 | 
            +
                                end
         | 
| 17 | 
            +
                            else
         | 
| 18 | 
            +
                                stream
         | 
| 19 | 
            +
                            end
         | 
| 20 | 
            +
                        else
         | 
| 21 | 
            +
                            raise Exception.new("Unsupported type #{istream.class}.")
         | 
| 22 | 
            +
                        end
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def self.write(ostream)
         | 
| 26 | 
            +
                        if ostream.is_a? String
         | 
| 27 | 
            +
                            stream = if ostream == '-'
         | 
| 28 | 
            +
                                STDOUT
         | 
| 29 | 
            +
                            else
         | 
| 30 | 
            +
                                ::File.open(ostream, 'wb')
         | 
| 31 | 
            +
                            end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                            if block_given?
         | 
| 34 | 
            +
                                begin
         | 
| 35 | 
            +
                                    yield stream
         | 
| 36 | 
            +
                                ensure
         | 
| 37 | 
            +
                                    stream.close
         | 
| 38 | 
            +
                                end
         | 
| 39 | 
            +
                            else
         | 
| 40 | 
            +
                                stream
         | 
| 41 | 
            +
                            end
         | 
| 42 | 
            +
                        else
         | 
| 43 | 
            +
                            raise Exception.new("Unsupported type #{ostream.class}.")
         | 
| 44 | 
            +
                        end
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
            end
         | 
    
        data/lib/ssbx/version.rb
    CHANGED
    
    
    
        data/lib/ssbx.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ssbx
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Sam
         | 
| @@ -59,6 +59,7 @@ files: | |
| 59 59 | 
             
            - lib/ssbx.rb
         | 
| 60 60 | 
             
            - lib/ssbx/box.rb
         | 
| 61 61 | 
             
            - lib/ssbx/file.rb
         | 
| 62 | 
            +
            - lib/ssbx/util.rb
         | 
| 62 63 | 
             
            - lib/ssbx/version.rb
         | 
| 63 64 | 
             
            - ssbx.gemspec
         | 
| 64 65 | 
             
            homepage: https://gitlab.com/basking2/ssbx
         |