mrf 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5fc41767656e9989ea870601651285a29fe56fae
4
+ data.tar.gz: 309300c96ba06e96bd5f6cd3d4da521b946257ca
5
+ SHA512:
6
+ metadata.gz: f03cb839f4233d267a50cdbacaa703a9f99155f198e1e2d12edf389a83dd09677d61c9914827180e750c9e2235498ce02d32aa3a66180277efd655b2a1910699
7
+ data.tar.gz: df57b7057f34fa6afa6c916fe1e78b218597b390b964466c2d94ff48f5c27c504f7c58476b3b0430fd5bdbba1d529272f87652df1d51d4ff84c0510f57c34ef3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mrf.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,44 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ mrf (0.0.1)
5
+ capistrano
6
+ gpgme
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ capistrano (2.15.5)
12
+ highline
13
+ net-scp (>= 1.0.0)
14
+ net-sftp (>= 2.0.0)
15
+ net-ssh (>= 2.0.14)
16
+ net-ssh-gateway (>= 1.1.0)
17
+ diff-lcs (1.2.4)
18
+ gpgme (2.0.2)
19
+ highline (1.6.19)
20
+ net-scp (1.1.2)
21
+ net-ssh (>= 2.6.5)
22
+ net-sftp (2.1.2)
23
+ net-ssh (>= 2.6.5)
24
+ net-ssh (2.7.0)
25
+ net-ssh-gateway (1.2.0)
26
+ net-ssh (>= 2.6.5)
27
+ rake (10.1.0)
28
+ rspec (2.14.1)
29
+ rspec-core (~> 2.14.0)
30
+ rspec-expectations (~> 2.14.0)
31
+ rspec-mocks (~> 2.14.0)
32
+ rspec-core (2.14.5)
33
+ rspec-expectations (2.14.2)
34
+ diff-lcs (>= 1.1.3, < 2.0)
35
+ rspec-mocks (2.14.3)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ bundler
42
+ mrf!
43
+ rake
44
+ rspec
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # Mr F
2
+
3
+ ## For british eyes only
4
+
5
+ A libary for uploading gpg secrets with capistrano.
6
+
7
+ put your secrets in a gpg encrypted file.
8
+ In rails the default is `config/secrets.{{Rails.env}}.yml.gpg`
9
+
10
+ Then add mrf to you deploy script like this
11
+
12
+ ```ruby
13
+ require 'mrf/capistrano'
14
+
15
+ after "deploy", "mrf:upload_secrets"
16
+ ```
17
+
18
+ This will upload the files listed in secrets to the same folder as your secrets
19
+ file but on the server.
20
+
21
+ ## A Example secrets file
22
+
23
+ ```yaml
24
+ database.yml:
25
+ production:
26
+ adapter: mysql
27
+ database: my_db
28
+ username: 0a1cd3bc-96fa-71d1-4338-27092ca4cfa5
29
+ password: 070f1f0b-2454-3ffa-4aa2-d6e0652d03fe
30
+
31
+ other_service.yml:
32
+ production:
33
+ password: 115024d2-7c74-326e-c9ec-064f42d08b31
34
+ username: 1e27a053-60a4-af61-f38d-9f1f123740d6
35
+ ```
36
+
37
+ ## Configuration
38
+
39
+ The above example is the default behavior but you can configure it with `MrF::Project.configure`
40
+
41
+ ```ruby
42
+ MrF::Project.configure do |project|
43
+ project.project_root = Rails.root
44
+ project.gpg_passphrase = '1234' # default is to ask you for it with the console
45
+ project.env = 'sandbox' # default is to use MRF_ENV or RAILS_ENV
46
+ end
47
+ ```
48
+
49
+ ## Running the specs
50
+
51
+ ```shell
52
+ bundle install # install deps
53
+ ./scripts/import_test_keys
54
+ rake # runs the tests
55
+ ```
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'MrF'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ Bundler::GemHelper.install_tasks
18
+
19
+ require 'rake/testtask'
20
+
21
+ require 'rspec/core'
22
+ require 'rspec/core/rake_task'
23
+
24
+ RSpec::Core::RakeTask.new do |t|
25
+ # t.warning = true # We would like to run with warning true, but capybara gives to many warnings.
26
+ end
27
+
28
+ desc "Run all specs in spec directory (excluding plugin specs)"
29
+ task :default => :spec
@@ -0,0 +1,18 @@
1
+ require 'mrf'
2
+
3
+ Capistrano::Configuration.instance(:must_exist).load do
4
+ namespace :mrf do
5
+
6
+ desc("Uppload Secrets")
7
+ task :upload_secrets do
8
+ secret_path = fetch(:mrf_secrets_path)
9
+ config_dir = fetch(:mrf_remote_config_dir, File.join(release_path, "config"))
10
+
11
+ MrF::Project.new(
12
+ secrets_path: secret_path
13
+ ).unpack_secrets.each do |filepath, content|
14
+ upload(content, File.join(config_dir, filepath))
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,68 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'gpgme'
4
+ require 'yaml'
5
+ require 'io/console'
6
+
7
+ module MrF
8
+ class Keyring
9
+ attr_accessor :path, :recipients
10
+ attr_reader :gpg_passphrase
11
+
12
+ def initialize (opts = {})
13
+ @path = opts.fetch(:path)
14
+ @gpg_passphrase = opts[:gpg_passphrase]
15
+ end
16
+
17
+ def data
18
+ return @data if @data
19
+ if File.exists?(path)
20
+ raw_text = crypto.decrypt(File.open(path), passphrase_callback: method(:passfunc))
21
+ @data = YAML.load(raw_text.to_s)
22
+ else
23
+ @data = {}
24
+ end
25
+ end
26
+
27
+ def passfunc (obj, uid_hint, passphrase_info, prev_was_bad, fd)
28
+ # Use known passphrase when given
29
+ if @gpg_passphrase
30
+ io = IO.for_fd(fd, 'w')
31
+ io.puts(@gpg_passphrase)
32
+ io.flush
33
+ return
34
+ end
35
+
36
+ # Try from keychain
37
+ key_id = passphrase_info.split(' ').first
38
+ key_id = uid_hint[/<[^<>]*>$/].tr("<>", "")
39
+ dump = `security -q find-generic-password -s "gpg-#{key_id}" -g 2>&1`
40
+ password = dump[/password: "(.*)"/, 1]
41
+
42
+ if password
43
+ io = IO.for_fd(fd, 'w')
44
+ io.puts(password)
45
+ io.flush
46
+ return
47
+ end
48
+
49
+ # Prompt user
50
+ begin
51
+ console = IO.console
52
+ console.write("Passphrase for #{uid_hint}: ")
53
+ console.noecho do |noecho|
54
+ io = IO.for_fd(fd, 'w')
55
+ io.puts(noecho.gets)
56
+ io.flush
57
+ end
58
+ console.puts
59
+ ensure
60
+ (0 ... $_.length).each do |i| $_[i] = ?0 end if $_
61
+ end
62
+ end
63
+
64
+ def crypto
65
+ @crypto ||= GPGME::Crypto.new
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,25 @@
1
+ require 'yaml'
2
+ module MrF
3
+ class Project
4
+ attr_accessor :gpg_passphrase
5
+ attr_accessor :secrets_path
6
+
7
+ def initialize (opts={})
8
+ @secrets_path = opts.fetch(:secrets_path)
9
+ @gpg_passphrase = opts.fetch(:gpg_passphrase, nil)
10
+ end
11
+
12
+ def unpack_secrets
13
+ raise "File not found: #{secrets_path}" unless File.exists?(secrets_path)
14
+ keyring = Keyring.new(
15
+ path: secrets_path,
16
+ gpg_passphrase: gpg_passphrase
17
+ )
18
+
19
+ keyring.data.reduce({}) do |acc, (filename, data)|
20
+ content = StringIO.new(YAML.dump(data))
21
+ acc.merge(filename => content)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module MrF
2
+ VERSION = "0.0.2"
3
+ end
data/lib/mrf.rb ADDED
@@ -0,0 +1,4 @@
1
+ module MrF
2
+ require_relative 'mrf/keyring'
3
+ require_relative 'mrf/project'
4
+ end
data/mrf.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mrf/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mrf"
8
+ spec.author = 'PugglePay Dev'
9
+ spec.version = MrF::VERSION
10
+ spec.summary = "Rails Application Secrets With GPG"
11
+ spec.description = "Rails Application Secrets With GPG"
12
+ spec.homepage = "https://github.com/pugglepay/mrf"
13
+ spec.license = "MIT"
14
+ spec.authors = ["Patrik Kårlin", "Jean-Louis Giordano", "Magnus Rex"]
15
+ spec.email = ["dev@pugglepay.com"]
16
+
17
+ spec.files = `git ls-files`.split($/)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.required_ruby_version = '>= 1.9.3'
23
+
24
+ spec.add_dependency "gpgme"
25
+ spec.add_dependency "capistrano"
26
+
27
+ spec.add_development_dependency "bundler"
28
+ spec.add_development_dependency "rake"
29
+ spec.add_development_dependency 'rspec'
30
+ end
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ echo "Importing tests keys"
4
+ gpg --import spec/fixtures/tobias.public.key
5
+ gpg --import spec/fixtures/tobias.secret.key
Binary file
@@ -0,0 +1,20 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mI0EUjhKkQEEALty6UZG8oUDqahv3TaLy7iKuDWNg/ha0kO00ygxsKOEuuMTeSBn
5
+ wj1/TGloEVnaQe4Pk6btcfXDU5D0bkQWIMFF4JOh77HPsYu0W4n+UPAtgtUcmJnI
6
+ 9Ao6/riRnwX7Trd2vyPY2vIGEqIm9xMgXaXQtawjg6R9ugsBNU5S7VOrABEBAAG0
7
+ LVRvYmlhcyBGdW5rZSAoTXIgRikgPHRvYmlhc0BibHVlbWFuZ3JvdXAub3JnPoi4
8
+ BBMBAgAiBQJSOEqRAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBxhAM8
9
+ CRq3AUuzA/sEhWJXT73oS8pVQsZG0c87a9mKXsBH5YvwESTbZsaUWYaNHEFiZ+zh
10
+ NObMk874pKmVKCwDP+F5eXIpiUcvcKAzTUZSLTSCqmpn6mkyG+CzmXmBiZOj2zaK
11
+ 4i42LUQXI0t/6hzAyAG0RCbbLOOFGpI6rhpMhuP68buxgZE3JESxlriNBFI4SpEB
12
+ BAC/vA4rhjxY/oKZi6niddzPSofRxvnSCt731sOG1uPVBQeMa9oboAbjKoeb5Rry
13
+ b6anotzGTYhFnoBw9OXa+3vygOql9D5U4JeIaL4VNhv9gyp98FwJgRY/GPfMtRgo
14
+ jxt3uvj3mZM73k5jW8lihS7pyUoG6LrxKUURFNyWmze3dQARAQABiJ8EGAECAAkF
15
+ AlI4SpECGwwACgkQcYQDPAkatwF6uQP9HlGTIqLwrin7Nfh1Jg/+L0+Etl5U/S2M
16
+ JiPjx5MmDXt+fIVt4rpXBnfRswrtVgEnM8IJ7NrnFOJmUEAL8EHJFmJIZZMSJ5zp
17
+ TjLoZKmR2Lx9atanwqQWEeb3K+ImTRSnyD1AujdrVbZ6DMPkJ5RU9JjEQiPsWAQw
18
+ Df1TFjBUAG8=
19
+ =i+s/
20
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,35 @@
1
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ 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
33
+ a1W2egzD5CeUVPSYxEIj7FgEMA39UxYwVABv
34
+ =NGkh
35
+ -----END PGP PRIVATE KEY BLOCK-----
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'io/console'
3
+
4
+
5
+ module MrF
6
+ describe Keyring do
7
+ it "can get retrive data from keyring" do
8
+ keyring = Keyring.new(
9
+ path: fixture_path('app.yml.gpg'),
10
+ gpg_passphrase: '1234'
11
+ )
12
+
13
+ expect(keyring.data).to eq('production' => { 'secret' => 'hello' })
14
+ end
15
+
16
+ it "can retrive passphrase from console if no passphrase is given" do
17
+ console = double("IO::Console")
18
+ expect(console).to receive(:write).with(
19
+ "Passphrase for EEF971D578000737 Tobias Funke (Mr F) <tobias@bluemangroup.org>: "
20
+ )
21
+ expect(console).to receive(:noecho).and_yield(double("FD", gets: "1234"))
22
+ expect(console).to receive(:puts)
23
+ expect(IO).to receive("console").and_return(console)
24
+
25
+ keyring = Keyring.new(path: fixture_path('app.yml.gpg'))
26
+ expect(keyring.data).to eq('production' => { 'secret' => 'hello' })
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module MrF
4
+ describe Project do
5
+ before do
6
+ @project = Project.new(
7
+ secrets_path: fixture_path("config/secrets.production.yml.gpg"),
8
+ gpg_passphrase: '1234'
9
+ )
10
+ end
11
+
12
+ it "can unpack secrets" do
13
+ files = @project.unpack_secrets
14
+
15
+ expect(YAML.load(files["database.yml"].string)).
16
+ to eq("production" => {"host" => "some_host"})
17
+
18
+ expect(YAML.load(files["app.yml"].string)).
19
+ to eq("production" => {"password" => "some_password"})
20
+ end
21
+
22
+ it "raises error if file does not exist" do
23
+ @project.secrets_path = "not_found"
24
+ expect { @project.unpack_secrets }.to raise_error
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ require 'rspec/autorun'
2
+
3
+ require_relative '../lib/mrf'
4
+
5
+ # Load support files
6
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
7
+
8
+ RSpec.configure do |config|
9
+ config.mock_with :rspec
10
+ config.order = "random"
11
+ end
12
+
13
+ def fixture_path (path)
14
+ File.join(File.dirname(__FILE__), "fixtures/#{path}")
15
+ end
16
+
17
+ def fixture (path)
18
+ File.read(fixture_path(path))
19
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mrf
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Patrik Kårlin
8
+ - Jean-Louis Giordano
9
+ - Magnus Rex
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-09-23 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: gpgme
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: capistrano
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: bundler
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rake
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: rspec
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ description: Rails Application Secrets With GPG
86
+ email:
87
+ - dev@pugglepay.com
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - Gemfile
93
+ - Gemfile.lock
94
+ - README.md
95
+ - Rakefile
96
+ - lib/mrf.rb
97
+ - lib/mrf/capistrano.rb
98
+ - lib/mrf/keyring.rb
99
+ - lib/mrf/project.rb
100
+ - lib/mrf/version.rb
101
+ - mrf.gemspec
102
+ - scripts/import_test_keys
103
+ - spec/fixtures/app.yml.gpg
104
+ - spec/fixtures/config/secrets.production.yml.gpg
105
+ - spec/fixtures/config/secrets.sandbox.yml.gpg
106
+ - spec/fixtures/tobias.public.key
107
+ - spec/fixtures/tobias.secret.key
108
+ - spec/mrf/keyring_spec.rb
109
+ - spec/mrf/project_spec.rb
110
+ - spec/spec_helper.rb
111
+ homepage: https://github.com/pugglepay/mrf
112
+ licenses:
113
+ - MIT
114
+ metadata: {}
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - '>='
122
+ - !ruby/object:Gem::Version
123
+ version: 1.9.3
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubyforge_project:
131
+ rubygems_version: 2.1.3
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: Rails Application Secrets With GPG
135
+ test_files:
136
+ - spec/fixtures/app.yml.gpg
137
+ - spec/fixtures/config/secrets.production.yml.gpg
138
+ - spec/fixtures/config/secrets.sandbox.yml.gpg
139
+ - spec/fixtures/tobias.public.key
140
+ - spec/fixtures/tobias.secret.key
141
+ - spec/mrf/keyring_spec.rb
142
+ - spec/mrf/project_spec.rb
143
+ - spec/spec_helper.rb