fling 0.0.6 → 0.0.7

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: 3cd2af30b79f618b70a08e473998df9dbc8f5207
4
- data.tar.gz: 27722cb52b941d51c56bac861870b4a2739f52c6
3
+ metadata.gz: 42a6f202d12d757770f9fef30de7a95cee9ba807
4
+ data.tar.gz: 227651d33e67bca3f0f92c153eb238d792fe1298
5
5
  SHA512:
6
- metadata.gz: 4c597cca8dc4e278b8d21dad6164a30455bb0752cbe5bdd3939d8378be561dc942eeedc0ef94cb73f434f093f5b52dc3bf978c221b07b616f8df26ca424ea538
7
- data.tar.gz: 3e0a04a8cc60a00f46aa512eb299bcd35e45ab1ec3d84441345661f6040b7bee1021af1b62966ab38bac3aa8d0ebe91e47680e88b122475a6c6cfa55a5301cfa
6
+ metadata.gz: 65076a7b134a4e458929d2bbda14a0ade327e40d33fcd1f63e0c32fee0f36df05101862492dba44be947b684edfdc707a69a8ce92530366db509fd98ee1b821a
7
+ data.tar.gz: 4590386fe7a699f37b1aff4a7c987ef234a238e8cd71019c1eb46a4aeeb6938a1cb995404822948552578ba18802cb282fe68ad9e6015190d7de1e2c15acada4
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ 0.0.7 (2015-06-23)
2
+ ------------------
3
+ * Rename 'fling setup' to 'fling install'
4
+ * Initial 'fling config' command
5
+
1
6
  0.0.6 (2015-06-16)
2
7
  ------------------
3
8
  * Update to Tahoe-LAFS 1.10.1
data/README.md CHANGED
@@ -38,12 +38,19 @@ Or install it yourself as:
38
38
  Once fling has been installed, you can use it to install a local Tahoe-LAFS
39
39
  client by running the following command:
40
40
 
41
- $ fling setup
41
+ $ fling install
42
42
 
43
43
  (NOTE: This command is presently only supported on OS X)
44
44
 
45
45
  This will download and install a local copy of Tahoe-LAFS.
46
46
 
47
+ After installing Tahoe-LAFS, you can configure your local instance from
48
+ an administrator-supplied config file with the following command:
49
+
50
+ $ fling config https://uri.to/your/orgs.fling
51
+
52
+ (NOTE: See below for first-time setup)
53
+
47
54
  ## Contributing
48
55
 
49
56
  * Fork this repository on github
data/lib/fling/cli.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  require "fling"
2
2
  require "thor"
3
+ require "uri"
4
+ require "net/http"
3
5
 
4
6
  module Fling
5
7
  # The Fling Command Line Interface
6
8
  class CLI < Thor
7
- desc :setup, "Install Tahoe-LAFS"
8
- def setup
9
- require "fling/setup"
10
- Setup.run
9
+ desc :install, "Install Tahoe-LAFS"
10
+ def install
11
+ require "fling/install"
12
+ Install.run
13
+ say "Now run 'fling config [file or url]' to configure Tahoe-LAFS"
11
14
  end
12
15
 
13
16
  desc "provision FILE", "Create encrypted Fling configuration"
@@ -31,5 +34,47 @@ module Fling
31
34
  File.open(config_file, "w") { |file| file << config }
32
35
  say "Created #{config_file}"
33
36
  end
37
+
38
+ desc "config FILE_OR_URL", "Configure Fling from an encrypted configuration file"
39
+ def config(file_or_uri)
40
+ require "fling/install"
41
+
42
+ if file_or_uri[/\Ahttps:\/\//]
43
+ uri = URI(file_or_uri)
44
+ ciphertext = Net::HTTP.get(uri)
45
+ elsif file_or_uri[/\Ahttp:\/\//] # ಠ_ಠ
46
+ say "Friends don't let friends use http://"
47
+ exit 1
48
+ else # Perhaps it's a file?
49
+ unless File.exist?(file_or_uri)
50
+ say "No such file: #{file_or_uri}"
51
+ exit 1
52
+ end
53
+
54
+ ciphertext = File.read(file_or_uri)
55
+ end
56
+
57
+ say "Loaded #{file_or_uri}"
58
+ password = ask "Please enter the password to decrypt the config:", echo: false
59
+ say # newline
60
+
61
+ begin
62
+ config = Config.decrypt(password, ciphertext)
63
+ rescue Fling::ConfigError => ex
64
+ say "Error: Couldn't decrypt config: #{ex}"
65
+ exit 1
66
+ end
67
+
68
+ config_dir = File.expand_path("~/.tahoe")
69
+ if File.exist?(config_dir)
70
+ say "Error: #{config_dir} already exists"
71
+ exit 1
72
+ end
73
+
74
+ config.render(config_dir)
75
+
76
+ say "Created #{config_dir}!"
77
+ say "Start Tahoe by running 'tahoe start'"
78
+ end
34
79
  end
35
80
  end
data/lib/fling/config.rb CHANGED
@@ -2,12 +2,14 @@ require "json"
2
2
  require "uri"
3
3
  require "base64"
4
4
  require "rbnacl"
5
+ require "fileutils"
6
+ require "erb"
5
7
 
6
8
  module Fling
7
9
  # Configuration for the local Tahoe cluster
8
10
  class Config
9
11
  BEGIN_MARKER = "-----BEGIN ENCRYPTED FLING CONFIGURATION-----\n"
10
- END_MARKER = "------END ENCRYPTED FLING CONFIGURATION------\n"
12
+ END_MARKER = "------END ENCRYPTED FLING CONFIGURATION------"
11
13
 
12
14
  CONFIG_KEYS = %w(introducer convergence salt dropcap)
13
15
  attr_reader(*CONFIG_KEYS)
@@ -31,9 +33,11 @@ module Fling
31
33
  # Decrypt an encrypted configuration
32
34
  def self.decrypt(password, ciphertext)
33
35
  matches = ciphertext.match(/#{BEGIN_MARKER}(.*)#{END_MARKER}/m)
34
- fail ConfigError, "couldn't find fling configuration" unless matches
36
+ fail ConfigError, "couldn't find fling configuration (corrupted file?)" unless matches
35
37
 
36
38
  new(Box.decrypt(password, Base64.decode64(matches[1])))
39
+ rescue RbNaCl::CryptoError # bad password
40
+ fail ConfigError, "couldn't decrypt configuration (corrupted file or bad password?)"
37
41
  end
38
42
 
39
43
  # Generate a JSON configuration
@@ -63,6 +67,24 @@ module Fling
63
67
  end
64
68
  end
65
69
 
70
+ # Render the configuration to the given path
71
+ def render(path)
72
+ tahoe_bin = File.expand_path("~/#{Fling::Install::TAHOE_DIR}/bin/tahoe")
73
+ system "#{tahoe_bin} create-node > /dev/null"
74
+
75
+ @nickname = `whoami`
76
+ @introducer_furl = introducer
77
+
78
+ config_template = File.expand_path("../../../templates/tahoe.cfg.erb", __FILE__)
79
+ tahoe_config = ERB.new(File.read(config_template)).result(binding)
80
+
81
+ File.open(File.join(path, "tahoe.cfg"), "w", 0600) { |file| file << tahoe_config }
82
+
83
+ secrets = File.join(path, "private")
84
+ File.open(File.join(secrets, "convergence"), "w", 0600) { |file| file << convergence }
85
+ File.open(File.join(secrets, "aliases"), "w", 0600) { |file| file << "dropcap: #{dropcap}" }
86
+ end
87
+
66
88
  def as_json
67
89
  {
68
90
  introducer: introducer,
@@ -3,7 +3,7 @@ require "fileutils"
3
3
 
4
4
  module Fling
5
5
  # Central utilities for Tahoe-LAFS setup
6
- module Setup
6
+ module Install
7
7
  module_function
8
8
 
9
9
  TAHOE_VERSION = "1.10.1"
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.6"
3
+ VERSION = "0.0.7"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fling
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-16 00:00:00.000000000 Z
11
+ date: 2015-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -137,7 +137,7 @@ files:
137
137
  - lib/fling/cli.rb
138
138
  - lib/fling/config.rb
139
139
  - lib/fling/encoding.rb
140
- - lib/fling/setup.rb
140
+ - lib/fling/install.rb
141
141
  - lib/fling/version.rb
142
142
  - spec/fixtures/fling.json
143
143
  - spec/fling/box_spec.rb