fling 0.0.2 → 0.0.3

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
  SHA1:
3
- metadata.gz: 733a75553cd0b08a377ca2d6d8381686b3464537
4
- data.tar.gz: 7201c7c5658fcb5c3ffce91b41ac33c1634ee497
3
+ metadata.gz: 3b8b667ebbd60b71dd973163d999dd0ce6044097
4
+ data.tar.gz: 76becf99d58883de950d921ec384e3f5ab6045dd
5
5
  SHA512:
6
- metadata.gz: 9caeb93a50c385d5b428376a2caecaec58f24ea23a21a33993a0f76fbfa5e3fb3aafa3b13bee49616f1728d3473893739cb0bd391c06deba8bbc2d9c20329276
7
- data.tar.gz: b4ce71b08bb647771daad9069ee38c9b1053f10539b3e941c49719ae2976fcc806e6d332a744fc216ec28a126a0f3bc4ac53f58053e55375c6dd0383856ed3cf
6
+ metadata.gz: 91dc59256194ef07e8aca6caf8473f204025a86a48d422a8155f3860855817ec6cdd1d8f32980401cac3407bb87db481c47c55e20ead9990b44c0dcd9d1db406
7
+ data.tar.gz: 0ec72f48d23bd74b2cb5f98df7a178bdc7c62b8397df4b6ac9d8a03ecf3cf52a8b6ce6dc25e036fbe368105e5108a9006dea256249742c8894e01a9659a88707
data/.rubocop.yml CHANGED
@@ -3,3 +3,10 @@ LineLength:
3
3
 
4
4
  Style/StringLiterals:
5
5
  EnforcedStyle: double_quotes
6
+
7
+ Metrics/MethodLength:
8
+ CountComments: false
9
+ Max: 20
10
+
11
+ Metrics/AbcSize:
12
+ Enabled: false
data/CHANGES.md CHANGED
@@ -1,7 +1,12 @@
1
- 0.0.2 (2014-04-22)
1
+ 0.0.3 (2015-05-31)
2
+ ------------------
3
+ * Update to Tahoe-LAFS 1.10.1a1
4
+ * Initial config parser
5
+
6
+ 0.0.2 (2015-04-22)
2
7
  ------------------
3
8
  * Try to actually publish the fling CLI executable
4
9
 
5
- 0.0.1 (2014-04-22)
10
+ 0.0.1 (2015-04-22)
6
11
  ------------------
7
12
  * Initial release with support for "fling setup"
data/fling.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency "thor"
22
22
  spec.add_runtime_dependency "colorize"
23
+ spec.add_runtime_dependency "base32"
23
24
 
24
25
  spec.add_development_dependency "bundler", "~> 1.9"
25
26
  spec.add_development_dependency "rake", "~> 10.0"
@@ -0,0 +1,42 @@
1
+ require "json"
2
+ require "uri"
3
+
4
+ module Fling
5
+ # Configuration for the local Tahoe cluster
6
+ class Config
7
+ CONFIG_KEYS = %w(introducer convergence salt dropcap)
8
+ attr_reader(*CONFIG_KEYS)
9
+
10
+ # Load configuration from a JSON file
11
+ def self.load_json(file)
12
+ from_json File.read(file)
13
+ end
14
+
15
+ # Parse configuration from JSON
16
+ def self.from_json(json)
17
+ new(JSON.parse(json))
18
+ end
19
+
20
+ def initialize(options = {})
21
+ CONFIG_KEYS.each do |key|
22
+ fail ArgumentError, "missing key: #{key}" unless options[key]
23
+ instance_variable_set("@#{key}", options[key])
24
+ end
25
+
26
+ fail ConfigError, "bad introducer: #{@introducer}" if URI(@introducer).scheme != "pb"
27
+ fail ConfigError, "bad dropcap: #{@dropcap}" unless @dropcap.start_with?("URI:DIR2:")
28
+
29
+ %w(convergence salt).each do |key|
30
+ b32_value = options[key]
31
+
32
+ begin
33
+ value = Encoding.decode(b32_value)
34
+ rescue
35
+ raise ConfigError, "bad #{key} (base32 error): #{b32_value}"
36
+ end
37
+
38
+ fail ConfigError, "bad #{key} (wrong size): #{b32_value}" if value.size != 32
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,24 @@
1
+ require "base32"
2
+
3
+ module Fling
4
+ # Encoder/decoder for z-base-32 used by Tahoe-LAFS
5
+ module Encoding
6
+ module_function
7
+
8
+ # Encode a string in z-base-32
9
+ #
10
+ # @param string [String] arbitrary string to be encoded
11
+ # @return [String] lovely, elegant z-base-32
12
+ def encode(string)
13
+ Base32.encode(string).downcase.sub(/=+$/, "")
14
+ end
15
+
16
+ # Decode a z-base-32 string
17
+ #
18
+ # @param string [String] z-base-32 string to be decoded
19
+ # @return [String] decoded string
20
+ def decode(string)
21
+ Base32.decode(string.upcase)
22
+ end
23
+ end
24
+ end
data/lib/fling/setup.rb CHANGED
@@ -6,10 +6,10 @@ module Fling
6
6
  module Setup
7
7
  module_function
8
8
 
9
- TAHOE_VERSION = "1.10.0"
9
+ TAHOE_VERSION = "1.10.1a1"
10
10
  TAHOE_DIR = "allmydata-tahoe-#{TAHOE_VERSION}"
11
11
  TAHOE_ZIP = "#{TAHOE_DIR}.zip"
12
- TAHOE_SRC = "https://tahoe-lafs.org/source/tahoe-lafs/releases/#{TAHOE_ZIP}"
12
+ TAHOE_SRC = "https://tahoe-lafs.org/source/tahoe-lafs/tarballs/#{TAHOE_ZIP}"
13
13
 
14
14
  # Note something important just happened
15
15
  def ohai(msg)
data/lib/fling/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # Simple secret sharing over Tahoe-LAFS
2
2
  module Fling
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
data/lib/fling.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  require "fling/version"
2
2
 
3
+ require "fling/config"
4
+ require "fling/encoding"
5
+
3
6
  # Simple secret sharing over Tahoe-LAFS
4
7
  module Fling
8
+ ConfigError = Class.new(StandardError)
5
9
  end
@@ -0,0 +1,6 @@
1
+ {
2
+ "introducer": "pb://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@127.0.0.1:34567/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
3
+ "convergence": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
4
+ "salt": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
5
+ "dropcap": "URI:DIR2:xxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
6
+ }
@@ -0,0 +1,48 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fling::Config do
4
+ let(:introducer) { "pb://#{'x' * 32}@127.0.0.1:34567/#{'x' * 32}" }
5
+ let(:convergence) { "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
6
+ let(:salt) { "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
7
+ let(:dropcap) { "URI:DIR2:#{'x' * 26}:#{'x' * 52}" }
8
+
9
+ it "parses JSON" do
10
+ config = described_class.from_json fixture("fling.json")
11
+
12
+ expect(config.introducer).to eq introducer
13
+ expect(config.convergence).to eq convergence
14
+ expect(config.salt).to eq salt
15
+ expect(config.dropcap).to eq dropcap
16
+ end
17
+
18
+ it "raises ArgumentError if a required key is missing" do
19
+ expect { described_class.new("bogus" => "true") }.to raise_error(ArgumentError)
20
+ end
21
+
22
+ context "ConfigError" do
23
+ let(:config_json) { JSON.parse(fixture("fling.json")) }
24
+ it "raises for malformed introducer URL" do
25
+ expect do
26
+ described_class.new(config_json.merge("introducer" => "pbandj"))
27
+ end.to raise_error(Fling::ConfigError)
28
+ end
29
+
30
+ it "raises for malformed dropcap URI" do
31
+ expect do
32
+ described_class.new(config_json.merge("dropcap" => "URI:DIR1"))
33
+ end.to raise_error(Fling::ConfigError)
34
+ end
35
+
36
+ it "raises for malformed convergence secret" do
37
+ expect do
38
+ described_class.new(config_json.merge("convergence" => "_not_valid_base32_"))
39
+ end.to raise_error(Fling::ConfigError)
40
+ end
41
+
42
+ it "raises for malformed salt" do
43
+ expect do
44
+ described_class.new(config_json.merge("salt" => "nacl"))
45
+ end.to raise_error(Fling::ConfigError)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,14 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fling::Encoding do
4
+ let(:source) { "XXXXXXXXXXXXXXXX" }
5
+ let(:base32) { "lbmfqwcylbmfqwcylbmfqwcyla" }
6
+
7
+ it "encodes to base32" do
8
+ expect(subject.encode(source)).to eq base32
9
+ end
10
+
11
+ it "decodes from base32" do
12
+ expect(subject.decode(base32)).to eq source
13
+ end
14
+ end
data/spec/fling_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Fling do
3
+ RSpec.describe Fling do
4
4
  it "has a version number" do
5
5
  expect(Fling::VERSION).not_to be nil
6
6
  end
data/spec/spec_helper.rb CHANGED
@@ -3,3 +3,9 @@ Coveralls.wear!
3
3
 
4
4
  $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
5
5
  require "fling"
6
+
7
+ RSpec.configure(&:disable_monkey_patching!)
8
+
9
+ def fixture(name)
10
+ File.read File.expand_path("../fixtures/#{name}", __FILE__)
11
+ end
metadata CHANGED
@@ -1,86 +1,101 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fling
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-23 00:00:00.000000000 Z
11
+ date: 2015-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
15
22
  version_requirements: !ruby/object:Gem::Requirement
16
23
  requirements:
17
- - - '>='
24
+ - - ">="
18
25
  - !ruby/object:Gem::Version
19
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
20
29
  requirement: !ruby/object:Gem::Requirement
21
30
  requirements:
22
- - - '>='
31
+ - - ">="
23
32
  - !ruby/object:Gem::Version
24
33
  version: '0'
25
- prerelease: false
26
34
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: colorize
35
+ prerelease: false
29
36
  version_requirements: !ruby/object:Gem::Requirement
30
37
  requirements:
31
- - - '>='
38
+ - - ">="
32
39
  - !ruby/object:Gem::Version
33
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: base32
34
43
  requirement: !ruby/object:Gem::Requirement
35
44
  requirements:
36
- - - '>='
45
+ - - ">="
37
46
  - !ruby/object:Gem::Version
38
47
  version: '0'
39
- prerelease: false
40
48
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
49
+ prerelease: false
43
50
  version_requirements: !ruby/object:Gem::Requirement
44
51
  requirements:
45
- - - ~>
52
+ - - ">="
46
53
  - !ruby/object:Gem::Version
47
- version: '1.9'
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
48
57
  requirement: !ruby/object:Gem::Requirement
49
58
  requirements:
50
- - - ~>
59
+ - - "~>"
51
60
  - !ruby/object:Gem::Version
52
61
  version: '1.9'
53
- prerelease: false
54
62
  type: :development
55
- - !ruby/object:Gem::Dependency
56
- name: rake
63
+ prerelease: false
57
64
  version_requirements: !ruby/object:Gem::Requirement
58
65
  requirements:
59
- - - ~>
66
+ - - "~>"
60
67
  - !ruby/object:Gem::Version
61
- version: '10.0'
68
+ version: '1.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
62
71
  requirement: !ruby/object:Gem::Requirement
63
72
  requirements:
64
- - - ~>
73
+ - - "~>"
65
74
  - !ruby/object:Gem::Version
66
75
  version: '10.0'
67
- prerelease: false
68
76
  type: :development
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
77
+ prerelease: false
71
78
  version_requirements: !ruby/object:Gem::Requirement
72
79
  requirements:
73
- - - ~>
80
+ - - "~>"
74
81
  - !ruby/object:Gem::Version
75
- version: '3.2'
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
76
85
  requirement: !ruby/object:Gem::Requirement
77
86
  requirements:
78
- - - ~>
87
+ - - "~>"
79
88
  - !ruby/object:Gem::Version
80
89
  version: '3.2'
81
- prerelease: false
82
90
  type: :development
83
- description: Fling is a system for automating the exchange of files and directoriesover Tahoe-LAFS, a distributed encrypted filesystem.
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.2'
97
+ description: Fling is a system for automating the exchange of files and directoriesover
98
+ Tahoe-LAFS, a distributed encrypted filesystem.
84
99
  email:
85
100
  - bascule@gmail.com
86
101
  executables:
@@ -90,10 +105,10 @@ executables:
90
105
  extensions: []
91
106
  extra_rdoc_files: []
92
107
  files:
93
- - .gitignore
94
- - .rspec
95
- - .rubocop.yml
96
- - .travis.yml
108
+ - ".gitignore"
109
+ - ".rspec"
110
+ - ".rubocop.yml"
111
+ - ".travis.yml"
97
112
  - CHANGES.md
98
113
  - Gemfile
99
114
  - Guardfile
@@ -105,8 +120,13 @@ files:
105
120
  - fling.gemspec
106
121
  - lib/fling.rb
107
122
  - lib/fling/cli.rb
123
+ - lib/fling/config.rb
124
+ - lib/fling/encoding.rb
108
125
  - lib/fling/setup.rb
109
126
  - lib/fling/version.rb
127
+ - spec/fixtures/fling.json
128
+ - spec/fling/config_spec.rb
129
+ - spec/fling/encoding_spec.rb
110
130
  - spec/fling_spec.rb
111
131
  - spec/spec_helper.rb
112
132
  - tasks/rspec.rake
@@ -114,24 +134,24 @@ files:
114
134
  homepage: https://github.com/tarcieri/fling
115
135
  licenses: []
116
136
  metadata: {}
117
- post_install_message:
137
+ post_install_message:
118
138
  rdoc_options: []
119
139
  require_paths:
120
140
  - lib
121
141
  required_ruby_version: !ruby/object:Gem::Requirement
122
142
  requirements:
123
- - - '>='
143
+ - - ">="
124
144
  - !ruby/object:Gem::Version
125
145
  version: '0'
126
146
  required_rubygems_version: !ruby/object:Gem::Requirement
127
147
  requirements:
128
- - - '>='
148
+ - - ">="
129
149
  - !ruby/object:Gem::Version
130
150
  version: '0'
131
151
  requirements: []
132
- rubyforge_project:
133
- rubygems_version: 2.4.5
134
- signing_key:
152
+ rubyforge_project:
153
+ rubygems_version: 2.4.6
154
+ signing_key:
135
155
  specification_version: 4
136
156
  summary: Simple secret sharing over Tahoe-LAFS
137
157
  test_files: []