fling 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
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