gemfury 0.12.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,79 @@
1
+ module Gemfury::Command::Authorization
2
+ include Gemfury::Platform
3
+
4
+ def wipe_credentials!
5
+ FileUtils.rm(config_path, :force => true) # never raises exception
6
+ each_netrc_host { |h| netrc_conf.delete(h) }
7
+ netrc_conf.save
8
+ end
9
+
10
+ def has_credentials?
11
+ !!netrc_conf[netrc_api_host] ||
12
+ read_config_file.key?(:gemfury_api_key)
13
+ end
14
+
15
+ private
16
+ def with_authorization(&block)
17
+ # Load up the credentials if user_api_key is not already set
18
+ load_credentials! if @user_api_key.nil?
19
+
20
+ # Attempt the operation and prompt user in case of
21
+ # lack of authorization or a 401 response from the server
22
+ begin
23
+ prompt_credentials! if @user_api_key.nil?
24
+ block.call
25
+ rescue Gemfury::Unauthorized
26
+ if acct = client.account
27
+ shell.say %Q(Oops! You don't have access to "#{acct}"), :red
28
+ else
29
+ shell.say "Oops! Authentication failure.", :red
30
+ @user_api_key = nil
31
+ retry
32
+ end
33
+ end
34
+ end
35
+
36
+ def prompt_credentials!
37
+ # Prompt credentials
38
+ highline = HighLine.new
39
+ highline.say 'Please enter your Gemfury credentials.'
40
+ email = highline.ask('Email: ')
41
+ passw = highline.ask('Password: ') { |q| q.echo = false }
42
+
43
+ # Request and save the API access token
44
+ if !email.empty? && !passw.empty?
45
+ @user_api_key = client.get_access_token(email, passw)
46
+ write_credentials!(email)
47
+ end
48
+ end
49
+
50
+ def load_credentials!
51
+ # Get credentials from ~/.netrc
52
+ _, @user_api_key = netrc_conf[netrc_api_host]
53
+ # Legacy loading from ~/.gem/gemfury
54
+ @user_api_key ||= read_config_file[:gemfury_api_key]
55
+ end
56
+
57
+ def write_credentials!(email)
58
+ each_netrc_host { |h| netrc_conf[h] = email, @user_api_key }
59
+ netrc_conf.save
60
+ end
61
+
62
+ def read_config_file
63
+ File.exist?(config_path) ? YAML.load_file(config_path) : {}
64
+ end
65
+
66
+ def netrc_conf
67
+ @netrc ||= Netrc.read
68
+ end
69
+
70
+ def netrc_api_host
71
+ URI.parse(client.endpoint).host
72
+ end
73
+
74
+ def each_netrc_host
75
+ [:endpoint, :gitpoint].each do |c|
76
+ yield(URI.parse(client.send(c)).host)
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,48 @@
1
+ module Gemfury
2
+ module Configuration
3
+
4
+ CONFIGURATION_DEFAULTS = {
5
+ :user_api_key => nil,
6
+ :adapter => :net_http,
7
+ :endpoint => 'https://api.fury.io/',
8
+ :gitpoint => 'https://git.fury.io/',
9
+ :pushpoint => 'https://push.fury.io/',
10
+ :user_agent => "Gemfury RubyGem #{Gemfury::VERSION} (Ruby #{RUBY_VERSION})",
11
+ :api_version => 1,
12
+ :account => nil
13
+ }.freeze
14
+
15
+ # user API key, also known as "full access token"
16
+ # @return [String]
17
+ attr_accessor :user_api_key
18
+
19
+ # The adapter that will be used to connect
20
+ # @return [Symbol]
21
+ attr_accessor :adapter
22
+
23
+ # The endpoint that will be used to connect
24
+ # @return [String]
25
+ attr_accessor :endpoint
26
+
27
+ # The HTTP endpoint for git repo (used for .netrc credentials)
28
+ # @return [String]
29
+ attr_accessor :gitpoint
30
+
31
+ # The endpoint for the Push API
32
+ # @return [String]
33
+ attr_accessor :pushpoint
34
+
35
+ # The value sent in the 'User-Agent' header
36
+ # @return [String]
37
+ attr_accessor :user_agent
38
+
39
+ # Gemfury remote API version
40
+ # @return [Integer]
41
+ attr_accessor :api_version
42
+
43
+ # The account to impersonate, if you have permissions for multiple accounts
44
+ # (If nil, no impersonation)
45
+ # @return [String]
46
+ attr_accessor :account
47
+ end
48
+ end
@@ -0,0 +1,26 @@
1
+ module Gemfury
2
+ module Const
3
+ class << self
4
+ def host
5
+ 'www.gemfury.com'
6
+ #'localhost:3000'
7
+ end
8
+
9
+ def welcome
10
+ "Welcome to Gemfury!\nPlease complete the following information"
11
+ end
12
+
13
+ def email_error
14
+ "Invalid email address. Please try again."
15
+ end
16
+
17
+ def email_regex
18
+ return @email_regex if @email_regex
19
+ email_name_regex = '[A-Z0-9_\.%\+\-\']+'
20
+ domain_head_regex = '(?:[A-Z0-9\-]+\.)+'
21
+ domain_tld_regex = '(?:[A-Z]{2,4}|museum|travel)'
22
+ @email_regex = /^#{email_name_regex}@#{domain_head_regex}#{domain_tld_regex}$/i
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ module Gemfury
2
+ # Base Error class
3
+ Error = Class.new(StandardError)
4
+
5
+ # The Gemfury gem version doesn't match the one on the server
6
+ InvalidGemVersion = Class.new(Error)
7
+
8
+ # Client#user_api_key is not defined or Gemfury returns 401
9
+ Unauthorized = Class.new(Error)
10
+
11
+ # Client is not allowed to perform this operation
12
+ Forbidden = Class.new(Error)
13
+
14
+ # Account is locked for another operation
15
+ Conflict = Class.new(Error)
16
+
17
+ # Returned if something is not found
18
+ NotFound = Class.new(Error)
19
+
20
+ # Corrupt Gem File
21
+ CorruptGemFile = Class.new(Error)
22
+
23
+ # Version already exists
24
+ DupeVersion = Class.new(Error)
25
+
26
+ # TimeoutError for 503s
27
+ TimeoutError = Class.new(Error)
28
+ end
@@ -0,0 +1,19 @@
1
+ module Gemfury
2
+ module Platform
3
+ def home_directory
4
+ on_windows? ? ENV['USERPROFILE'] : ENV['HOME']
5
+ end
6
+
7
+ def config_path
8
+ File.expand_path('.gem/gemfury', home_directory)
9
+ end
10
+
11
+ def on_windows?
12
+ RUBY_PLATFORM =~ /mswin32|mingw32/
13
+ end
14
+
15
+ def on_mac?
16
+ RUBY_PLATFORM =~ /-darwin\d/
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,2 @@
1
+ # Load Gemfury rakefile extensions
2
+ load "gemfury/tasks/release.rake"
@@ -0,0 +1,36 @@
1
+ require 'rubygems/package'
2
+ require 'gemfury'
3
+ require 'gemfury/command'
4
+
5
+ namespace 'fury' do
6
+ desc "Build gem and push it to Gemfury"
7
+ task :release, [:gemspec, :as] do |t, args|
8
+ gemspec = args[:gemspec] ||
9
+ FileList["#{Dir.pwd}/*.gemspec"][0]
10
+
11
+ if gemspec.nil? || !File.exist?(gemspec)
12
+ puts "No gemspec found"
13
+ else
14
+ puts "Building #{File.basename(gemspec)}"
15
+ spec = Gem::Specification.load(gemspec)
16
+
17
+ if Gem::Package.respond_to?(:build)
18
+ Gem::Package.build(spec)
19
+ else
20
+ require 'rubygems/builder'
21
+ Gem::Builder.new(spec).build
22
+ end
23
+
24
+ gemfile = File.basename(spec.cache_file)
25
+
26
+ params = ['push', gemfile]
27
+ params << "--as=#{args[:as]}" if args[:as]
28
+
29
+ Gemfury::Command::App.start(params)
30
+ end
31
+ end
32
+ end
33
+
34
+ namespace 'gemfury' do
35
+ task :release => 'fury:release'
36
+ end
@@ -0,0 +1,3 @@
1
+ module Gemfury
2
+ VERSION = '0.12.0.rc1'
3
+ end
@@ -0,0 +1,29 @@
1
+ require 'gemfury'
2
+ require 'gemfury/command'
3
+
4
+ class Gem::Commands::FuryCommand < Gem::Command
5
+ def description
6
+ 'Push a private gem to your Gemfury account'
7
+ end
8
+
9
+ def arguments
10
+ "GEM built gem file to push"
11
+ end
12
+
13
+ def usage
14
+ "#{program_name} GEM"
15
+ end
16
+
17
+ def initialize
18
+ super 'fury', description
19
+ add_option('-a', '--as USERNAME', 'Impersonate another account') do |value, options|
20
+ options[:as] = value
21
+ end
22
+ end
23
+
24
+ def execute
25
+ opts = options.dup
26
+ args = opts.delete(:args)
27
+ Gemfury::Command::App.send(:dispatch, "push", args, opts, {})
28
+ end
29
+ end
@@ -0,0 +1,2 @@
1
+ require 'rubygems/command_manager'
2
+ Gem::CommandManager.instance.register_command :fury
metadata ADDED
@@ -0,0 +1,197 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gemfury
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.12.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - Michael Rykov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-07-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: multi_json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.14.0
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: 1.1.0.pre
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.14.0
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: 1.1.0.pre
47
+ - !ruby/object:Gem::Dependency
48
+ name: netrc
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.10.0
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: 0.12.0.pre
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.10.0
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: 0.12.0.pre
67
+ - !ruby/object:Gem::Dependency
68
+ name: faraday
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.9.0
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: 1.1.0.pre
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 0.9.0
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: 1.1.0.pre
87
+ - !ruby/object:Gem::Dependency
88
+ name: highline
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 1.6.0
94
+ - - "<"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.1.0.pre
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 1.6.0
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: 2.1.0.pre
107
+ - !ruby/object:Gem::Dependency
108
+ name: progressbar
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 1.10.1
114
+ - - "<"
115
+ - !ruby/object:Gem::Version
116
+ version: 2.0.0.pre
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: 1.10.1
124
+ - - "<"
125
+ - !ruby/object:Gem::Version
126
+ version: 2.0.0.pre
127
+ description: 'Hosted repo for your public and private packages at https://gemfury.com
128
+
129
+ '
130
+ email: hello@gemfury.com
131
+ executables:
132
+ - gemfury
133
+ - fury
134
+ extensions: []
135
+ extra_rdoc_files: []
136
+ files:
137
+ - README.md
138
+ - bin/fury
139
+ - bin/gemfury
140
+ - lib/faraday/adapter/fury_http.rb
141
+ - lib/faraday/request/multipart_with_file.rb
142
+ - lib/gemfury.rb
143
+ - lib/gemfury/client.rb
144
+ - lib/gemfury/client/filters.rb
145
+ - lib/gemfury/client/middleware.rb
146
+ - lib/gemfury/command.rb
147
+ - lib/gemfury/command/app.rb
148
+ - lib/gemfury/command/authorization.rb
149
+ - lib/gemfury/configuration.rb
150
+ - lib/gemfury/const.rb
151
+ - lib/gemfury/error.rb
152
+ - lib/gemfury/platform.rb
153
+ - lib/gemfury/tasks.rb
154
+ - lib/gemfury/tasks/release.rake
155
+ - lib/gemfury/version.rb
156
+ - lib/rubygems/commands/fury_command.rb
157
+ - lib/rubygems_plugin.rb
158
+ homepage: https://gemfury.com
159
+ licenses:
160
+ - MIT
161
+ metadata: {}
162
+ post_install_message: |
163
+ ************************************************************************
164
+
165
+ Upload your first package to start using Gemfury:
166
+ fury push my-package-1.0.0.gem
167
+
168
+ If you have a directory with packages, you can use:
169
+ fury migrate ./path/to/codez
170
+
171
+ Find out what else you can do:
172
+ fury help
173
+
174
+ Follow @gemfury on Twitter for announcements, updates, and news.
175
+ https://twitter.com/gemfury
176
+
177
+ ************************************************************************
178
+ rdoc_options: []
179
+ require_paths:
180
+ - lib
181
+ required_ruby_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">"
189
+ - !ruby/object:Gem::Version
190
+ version: 1.3.1
191
+ requirements: []
192
+ rubyforge_project:
193
+ rubygems_version: 2.7.8
194
+ signing_key:
195
+ specification_version: 4
196
+ summary: Hosted repo for your public and private packages
197
+ test_files: []