ccs 0.2.0 → 1.0.0.rc1

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
- SHA1:
3
- metadata.gz: 3f41c587aec81ba6914fde371c7645779d220d63
4
- data.tar.gz: 01c7949ac8d27300b681841b13b9a51cb9104de3
2
+ SHA256:
3
+ metadata.gz: 0efddd17f5cf6cc4dda4edc407ec58993d82d34d508132228a4af0f3a2ff216a
4
+ data.tar.gz: 654cd5f1e367d4c6c7a251666015d2896051e6bc84734a483f90b2af04f713e6
5
5
  SHA512:
6
- metadata.gz: 7b49503f5dd0556a88568bad93e9755e47d7bbc851d7855647d291f9771d69492af08f7a51eff302b096fa1ed2ea9f149eb4b5d777aae56659b5b6c7e80d9b3c
7
- data.tar.gz: a993d334971f5a8989eff75fad704a6f45d2b8e1ec35b7c07073cd01d05291ec0a64bb2a351d4ba5d07ae1b50497ef6691e7c125a3bba87b94a42e1a71b6597b
6
+ metadata.gz: 19d2e3f9349f122a9fa05a6fd41ee24cc37bc08f06448236313e6236e82020bdfc1b1eefaa4160f0d30b5287420509f337880794484d89a7dc59b6ab446a6923
7
+ data.tar.gz: 60e209b81064b9813907722cc81c53574ac9ac493a7c6c0dcdca162cc59c9fc5b0ddd277415cd931f7d735ba22084a65aa16c9d76705107fe05e9f14cae45e81
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
55
55
  ## Enforcement
56
56
 
57
57
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at hello@pipello.io. All
58
+ reported by contacting the project team at me@tkowalewski.pl. All
59
59
  complaints will be reviewed and investigated and will result in a response that
60
60
  is deemed necessary and appropriate to the circumstances. The project team is
61
61
  obligated to maintain confidentiality with regard to the reporter of an incident.
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 pipello.io
3
+ Copyright (c) 2017 me@tkowalewski.pl
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -23,13 +23,13 @@ Or install it yourself as:
23
23
 
24
24
  ## Development
25
25
 
26
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
26
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
27
27
 
28
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
28
+ To install this gem onto your local machine, run `bin/rake install`. To release a new version, update the version number in `version.rb`, and then run `bin/rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
29
29
 
30
30
  ## Contributing
31
31
 
32
- Bug reports and pull requests are welcome on GitHub at https://github.com/pipello/ccs. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
32
+ Bug reports and pull requests are welcome on GitHub at https://github.com/tkowalewski/ccs. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
33
33
 
34
34
 
35
35
  ## License
data/exe/ccs ADDED
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'ccs'
6
+ require 'yaml'
7
+ require 'optparse'
8
+ require 'io/console'
9
+
10
+ options = {
11
+ 'access_token' => ENV['CCS_ACCESS_TOKEN'],
12
+ 'secret_token' => ENV['CCS_SECRET_TOKEN']
13
+ }
14
+
15
+ option_parser = OptionParser.new
16
+ option_parser.banner = 'Usage: ccs [OPTIONS] <(LocalPath|STDIN)|(CCSUri|Uri)> <(CCSUri|Uri)|(LocalPath|STDOUT)>'
17
+ option_parser.separator ''
18
+ option_parser.separator 'Configuration Control System (CCS)'
19
+ option_parser.separator ''
20
+ option_parser.separator 'Options:'
21
+
22
+ option_parser.on('-c CONFIGURATION', '--configuration CONFIGURATION', String, 'Path to configuration file') do |v|
23
+ options['configuration'] = v
24
+ end
25
+
26
+ option_parser.on('-a CCS_ACCESS_TOKEN', '--access-token CCS_ACCESS_TOKEN', String, 'CCS Access Token') do |v|
27
+ options['access_token'] = v
28
+ end
29
+
30
+ option_parser.on('-s CCS_SECRET_TOKEN', '--secret-token CCS_SECRET_TOKEN', String, 'CCS Secret Token') do |v|
31
+ options['secret_token'] = v
32
+ end
33
+
34
+ option_parser.separator ''
35
+ option_parser.separator 'Configure via environment variables'
36
+ option_parser.separator ' CCS_ACCESS_TOKEN'
37
+ option_parser.separator ' CCS_SECRET_TOKEN'
38
+
39
+ option_parser.separator ''
40
+ option_parser.separator 'Examples:'
41
+ option_parser.separator ' Download to STDOUT'
42
+ option_parser.separator ' ccs ccs://workspace-name/0.1.0/path/to/file.yml -'
43
+ option_parser.separator ' ccs http://host.tld:9292/workspace-name/0.1.0/path/to/file.yml -'
44
+ option_parser.separator ' ccs https://host.tld/workspace-name/0.1.0/path/to/file.yml -'
45
+ option_parser.separator ' Download to local file'
46
+ option_parser.separator ' ccs ccs://workspace-name/0.1.0/path/to/file.yml /local/path/to/file.yml'
47
+ option_parser.separator ' Upload local file'
48
+ option_parser.separator ' ccs /local/path/to/file.yml ccs://workspace-name/0.1.0/path/to/file.yml'
49
+ option_parser.separator ' Upload content from STDIN'
50
+ option_parser.separator ' echo "{ a: 1 }" | ccs - ccs://workspace-name/0.1.0/path/to/file.yml'
51
+ option_parser.separator ' cat /local/path/to/file.yml | ccs - ccs://workspace-name/0.1.0/path/to/file.yml'
52
+ option_parser.separator ''
53
+
54
+ option_parser.separator format('Version: %<version>s', version: Ccs::VERSION)
55
+
56
+ arguments = option_parser.parse!
57
+
58
+ unless options.values.any?
59
+ puts option_parser
60
+ exit(1)
61
+ end
62
+
63
+ options = YAML.safe_load File.read(options.delete('configuration')) if options.key?('configuration')
64
+
65
+ raise OptionParser::MissingArgument, 'access_token' unless options['access_token']
66
+ raise OptionParser::MissingArgument, 'secret_token' unless options['secret_token']
67
+ raise OptionParser::MissingArgument, 'source' unless arguments.fetch(0, nil)
68
+ raise OptionParser::MissingArgument, 'destination' unless arguments.fetch(1, nil)
69
+
70
+ exit(1) unless Ccs::Application.new(arguments[0], arguments[1], options['access_token'], options['secret_token']).run
data/lib/ccs.rb CHANGED
@@ -1,12 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/http'
2
4
  require 'json'
3
5
  require 'openssl'
4
6
  require 'base64'
7
+ require 'uri'
5
8
 
6
9
  require 'ccs/version'
7
- require 'ccs/downloader'
10
+ require 'ccs/encrypter'
8
11
  require 'ccs/decrypter'
12
+ require 'ccs/uploader'
13
+ require 'ccs/downloader'
9
14
  require 'ccs/configuration_file'
15
+ require 'ccs/application'
10
16
 
11
- module Ccs
12
- end
17
+ module Ccs; end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ccs
4
+ class Application
5
+ def initialize(source, destination, access_token, secret_token)
6
+ @source = source
7
+ @destination = destination
8
+ @access_token = access_token
9
+ @secret_token = secret_token
10
+ end
11
+
12
+ def run
13
+ download? ? download : upload
14
+ end
15
+
16
+ private
17
+
18
+ def download?
19
+ @source.match?(%r{\A(ccs|https?):\/\/})
20
+ end
21
+
22
+ def download
23
+ content = ConfigurationFile.new(@source, @access_token, @secret_token).download
24
+ return unless content
25
+
26
+ (@destination.eql?('-') ? STDOUT : File.new(@destination, 'w')).print content
27
+ end
28
+
29
+ def upload
30
+ content = @source.eql?('-') ? STDIN.read : File.read(@source)
31
+ ConfigurationFile.new(@destination, @access_token, @secret_token).upload(content)
32
+ end
33
+ end
34
+ end
@@ -1,29 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ccs
2
4
  class ConfigurationFile
3
- def initialize(uri)
4
- @uri = uri
5
- end
6
-
7
- def version
8
- parts[0]
9
- end
10
-
11
- def path
12
- parts[1]
5
+ def initialize(uri, access_token, secret_token)
6
+ @uri = build_uri(uri)
7
+ @access_token = access_token
8
+ @secret_token = secret_token
13
9
  end
14
10
 
15
- def to_path
16
- Pathname.new path
11
+ def upload(content)
12
+ Uploader.new(@uri, content, @access_token, @secret_token).call
17
13
  end
18
14
 
19
- def to_s
20
- format 'ccs://%s/%s', version, path
15
+ def download
16
+ Downloader.new(@uri, @access_token, @secret_token).call
21
17
  end
22
18
 
23
19
  private
24
20
 
25
- def parts
26
- @parts ||= @uri.sub('ccs://', '').split('/', 2)
21
+ def build_uri(uri)
22
+ URI uri.sub('ccs://', 'https://api.occson.com/')
27
23
  end
28
24
  end
29
25
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ccs
2
4
  class Decrypter
3
5
  def initialize(passphrase, content)
@@ -5,7 +7,7 @@ module Ccs
5
7
  @content = content
6
8
  end
7
9
 
8
- def decrypt
10
+ def call
9
11
  decryptor.pkcs5_keyivgen(@passphrase, ciphertext_salt, 1)
10
12
  result = decryptor.update(encrypted)
11
13
  result << decryptor.final
@@ -1,36 +1,37 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ccs
2
4
  class Downloader
3
- def initialize(token, configuration_file)
4
- @token = token
5
- @configuration_file = configuration_file
5
+ def initialize(uri, access_token, secret_token)
6
+ @uri = uri
7
+ @access_token = access_token
8
+ @secret_token = secret_token
6
9
  end
7
10
 
8
- def download
11
+ def call
9
12
  response = http.request(request)
13
+ body = response.body
14
+ return unless response.code.eql? '200'
15
+ json = JSON.parse body
10
16
 
11
- return unless response.class == Net::HTTPOK
12
-
13
- JSON.parse(response.body)
17
+ Decrypter.new(@secret_token, json['encrypted_content']).call
14
18
  end
15
19
 
16
20
  private
17
21
 
18
- def uri
19
- @uri ||= URI format('https://pipello.io/api/v1/ccs/%s/%s', @configuration_file.version, @configuration_file.path)
20
- end
21
-
22
22
  def http
23
- Net::HTTP.new(uri.host, uri.port).tap do |http|
24
- http.use_ssl = uri.scheme == 'https'
25
- end
23
+ Net::HTTP.new(@uri.host, @uri.port)
26
24
  end
27
25
 
28
26
  def request
29
- Net::HTTP::Get.new(uri.path, headers)
27
+ Net::HTTP::Get.new(@uri.path, headers)
30
28
  end
31
29
 
32
30
  def headers
33
- { 'Authorization' => format('Token token=%s', @token) }
31
+ {
32
+ 'Authorization' => format('Token token=%<access_token>s', access_token: @access_token),
33
+ 'Content-Type' => 'application/json'
34
+ }
34
35
  end
35
36
  end
36
37
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ccs
4
+ class Encrypter
5
+ def initialize(passphrase, content, salt)
6
+ @passphrase = passphrase
7
+ @content = content
8
+ @salt = salt
9
+ end
10
+
11
+ def call
12
+ encryptor.pkcs5_keyivgen(@passphrase, @salt, 1)
13
+ encrypted = encryptor.update(@content)
14
+ encrypted << encryptor.final
15
+
16
+ openssl_salted_ciphertext = 'Salted__' + @salt + encrypted
17
+ Base64.strict_encode64(openssl_salted_ciphertext)
18
+ end
19
+
20
+ private
21
+
22
+ def encryptor
23
+ @encryptor ||= OpenSSL::Cipher::AES.new(256, :CBC).encrypt
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ccs
4
+ class Uploader
5
+ def initialize(uri, content, access_token, secret_token)
6
+ @uri = uri
7
+ @content = content
8
+ @access_token = access_token
9
+ @secret_token = secret_token
10
+ end
11
+
12
+ def call
13
+ request.body = { encrypted_content: encrypted_content }.to_json
14
+ http.request(request).code.eql? '201'
15
+ end
16
+
17
+ private
18
+
19
+ def http
20
+ Net::HTTP.new(@uri.host, @uri.port)
21
+ end
22
+
23
+ def request
24
+ @request ||= Net::HTTP::Post.new(@uri.path, headers)
25
+ end
26
+
27
+ def headers
28
+ {
29
+ 'Authorization' => format('Token token=%<access_token>s', access_token: @access_token),
30
+ 'Content-Type' => 'application/json'
31
+ }
32
+ end
33
+
34
+ def encrypted_content
35
+ @encrypted_content ||= Encrypter.new(@secret_token, @content, salt).call
36
+ end
37
+
38
+ def salt
39
+ @access_token[0...8]
40
+ end
41
+ end
42
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ccs
2
- VERSION = '0.2.0'.freeze
4
+ VERSION = '1.0.0.rc1'
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ccs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
- - pipello.io
7
+ - tkowalewski
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-14 00:00:00.000000000 Z
11
+ date: 2018-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,59 +16,143 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: 1.16.1
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: 1.16.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: inch
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.7.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.7.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.11.3
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.11.3
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: '10.0'
61
+ version: 12.3.0
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: '10.0'
68
+ version: 12.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: reek
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 4.7.3
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 4.7.3
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: rspec
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
87
  - - "~>"
46
88
  - !ruby/object:Gem::Version
47
- version: '3.0'
89
+ version: 3.7.0
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
94
  - - "~>"
53
95
  - !ruby/object:Gem::Version
54
- version: '3.0'
96
+ version: 3.7.0
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: rubocop
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - "~>"
60
102
  - !ruby/object:Gem::Version
61
- version: 0.44.1
103
+ version: 0.52.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.52.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.15.1
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.15.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.3.0
62
132
  type: :development
63
133
  prerelease: false
64
134
  version_requirements: !ruby/object:Gem::Requirement
65
135
  requirements:
66
136
  - - "~>"
67
137
  - !ruby/object:Gem::Version
68
- version: 0.44.1
138
+ version: 3.3.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: yard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.8.7.5
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.8.7.5
69
153
  description: ''
70
154
  email:
71
- - hello@pipello.io
155
+ - me@tkowalewski.pl
72
156
  executables:
73
157
  - ccs
74
158
  extensions: []
@@ -78,13 +162,16 @@ files:
78
162
  - CODE_OF_CONDUCT.md
79
163
  - LICENSE.txt
80
164
  - README.md
81
- - bin/ccs
165
+ - exe/ccs
82
166
  - lib/ccs.rb
167
+ - lib/ccs/application.rb
83
168
  - lib/ccs/configuration_file.rb
84
169
  - lib/ccs/decrypter.rb
85
170
  - lib/ccs/downloader.rb
171
+ - lib/ccs/encrypter.rb
172
+ - lib/ccs/uploader.rb
86
173
  - lib/ccs/version.rb
87
- homepage: https://github.com/pipello/ccs
174
+ homepage: https://github.com/tkowalewski/ccs
88
175
  licenses:
89
176
  - MIT
90
177
  metadata: {}
@@ -99,13 +186,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
186
  version: '0'
100
187
  required_rubygems_version: !ruby/object:Gem::Requirement
101
188
  requirements:
102
- - - ">="
189
+ - - ">"
103
190
  - !ruby/object:Gem::Version
104
- version: '0'
191
+ version: 1.3.1
105
192
  requirements: []
106
193
  rubyforge_project:
107
- rubygems_version: 2.5.2
194
+ rubygems_version: 2.7.3
108
195
  signing_key:
109
196
  specification_version: 4
110
- summary: ''
197
+ summary: Configuration Control System (CCS)
111
198
  test_files: []
data/bin/ccs DELETED
@@ -1,57 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'ccs'
4
- require 'optparse'
5
- require 'io/console'
6
-
7
- options = {}
8
-
9
- opt_parser = OptionParser.new do |opt|
10
- opt.banner = 'Usage: ccs [OPTIONS] <CCSUri> <LocalPath|STDOUT>'
11
- opt.separator ''
12
- opt.separator 'Options:'
13
-
14
- opt.on('-t TOKEN', '--token TOKEN', String, 'API Token') do |v|
15
- options[:token] = v
16
- end
17
-
18
- opt.on('-d', '--decrypt', 'Ask for passphrase and decrypt') do |v|
19
- options[:decrypt] = v
20
- end
21
-
22
- opt.on('-h','--help', 'help') do
23
- puts opt_parser
24
- end
25
-
26
- opt.separator ''
27
- opt.separator 'Examples:'
28
- opt.separator ' ccs -t 8b5a196e-a116-4c64-8472-f7c6e1c2de3b ccs://0.1.0/path/to/file.yml'
29
- opt.separator ' ccs -t 8b5a196e-a116-4c64-8472-f7c6e1c2de3b ccs://0.1.0/path/to/file.yml local/path/to/file.yml'
30
-
31
- opt.separator ''
32
- opt.separator format('Version: %s', Ccs::VERSION)
33
- end
34
-
35
- arguments = opt_parser.parse!
36
-
37
- if ARGV.empty?
38
- puts opt_parser
39
- exit(-1)
40
- end
41
-
42
- raise OptionParser::MissingArgument if options[:token].nil?
43
- raise OptionParser::MissingArgument if arguments[0].nil?
44
-
45
- configuration_file = Ccs::ConfigurationFile.new(arguments[0])
46
- destination = arguments[1] ? File.new(arguments[1], 'w') : STDOUT
47
-
48
- json = Ccs::Downloader.new(options[:token], configuration_file).download
49
-
50
- if options[:decrypt]
51
- print 'Passphrase: '
52
- passphrase = STDIN.noecho(&:gets)
53
-
54
- destination.puts Ccs::Decrypter.new(passphrase.chomp, json['encrypted_content']).decrypt
55
- else
56
- destination.puts json['encrypted_content']
57
- end