gitlab-license 0.0.2 → 1.2.0

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: 2a87318ee3ba270b898c8fdd55958d02f219d0ab
4
- data.tar.gz: 6d9394ee078fc45357a4e39a7c79bae098c6d956
2
+ SHA256:
3
+ metadata.gz: e6aecf2ddad9be921880a1603714f79947534ede972c8f47f8b5121c96d912c1
4
+ data.tar.gz: 66b55835b29c3c9c2fdd175b31113523d616802e6a8cfa6898a98f080039760b
5
5
  SHA512:
6
- metadata.gz: 19c9de17bb52fcb767e62d1af7c1350ac523ad26073636d57fe6cb2945a29be20374a49ac5d98b83d78e9c393c81f27d801f72ba1da9fb4c79252ef4437fe526
7
- data.tar.gz: 6eab5c49867731fbc886b6e678b910f9501b862f75646c28657301e8c1be00eb65fdffb87a609ed38668c70c0424a68fc93bdd78a419c7b29b69fa51ee907304
6
+ metadata.gz: 1ca37a34899d853c22871e36f70aac9196e127ea92b6c7ef1cdda167eab9e595c9e092ae072857c343158881dad8961b2430150b3e730d2408facac6b94b1c1e
7
+ data.tar.gz: 5d77bbd654db4ad8e4e4458748d15720a3092d6085e73e06ac717b4f5fe6594f52ed517dedcc6e4c33398f3a1f419b7573578d37dae61a0f84b3543e2557383d
@@ -0,0 +1,22 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ require: rubocop-rspec
4
+
5
+ Metrics/BlockLength:
6
+ ExcludedMethods: ['describe', 'context']
7
+
8
+ Style/Alias:
9
+ EnforcedStyle: prefer_alias_method
10
+ Enabled: true
11
+
12
+ Style/HashEachMethods:
13
+ Enabled: true
14
+
15
+ Style/HashTransformKeys:
16
+ Enabled: true
17
+
18
+ Style/HashTransformValues:
19
+ Enabled: true
20
+
21
+ RSpec/MultipleExpectations:
22
+ Enabled: false
@@ -0,0 +1,84 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2020-03-02 14:37:54 -0500 using RuboCop version 0.80.1.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 6
10
+ Metrics/AbcSize:
11
+ Max: 36
12
+
13
+ # Offense count: 1
14
+ # Configuration parameters: CountComments.
15
+ Metrics/ClassLength:
16
+ Max: 129
17
+
18
+ # Offense count: 3
19
+ Metrics/CyclomaticComplexity:
20
+ Max: 16
21
+
22
+ # Offense count: 5
23
+ # Configuration parameters: CountComments, ExcludedMethods.
24
+ Metrics/MethodLength:
25
+ Max: 38
26
+
27
+ # Offense count: 3
28
+ Metrics/PerceivedComplexity:
29
+ Max: 16
30
+
31
+ # Offense count: 3
32
+ Style/Documentation:
33
+ Exclude:
34
+ - 'spec/**/*'
35
+ - 'test/**/*'
36
+ - 'lib/gitlab/license.rb'
37
+ - 'lib/gitlab/license/boundary.rb'
38
+ - 'lib/gitlab/license/encryptor.rb'
39
+
40
+ # Offense count: 12
41
+ # Cop supports --auto-correct.
42
+ # Configuration parameters: EnforcedStyle.
43
+ # SupportedStyles: always, always_true, never
44
+ Style/FrozenStringLiteralComment:
45
+ Exclude:
46
+ - 'Gemfile'
47
+ - 'Rakefile'
48
+ - 'bin/console'
49
+ - 'gitlab-license.gemspec'
50
+ - 'lib/gitlab/license.rb'
51
+ - 'lib/gitlab/license/boundary.rb'
52
+ - 'lib/gitlab/license/encryptor.rb'
53
+ - 'lib/gitlab/license/version.rb'
54
+ - 'spec/gitlab/license/boundary_spec.rb'
55
+ - 'spec/gitlab/license/encryptor_spec.rb'
56
+ - 'spec/gitlab/license_spec.rb'
57
+ - 'spec/spec_helper.rb'
58
+
59
+ # Offense count: 1
60
+ # Configuration parameters: MinBodyLength.
61
+ Style/GuardClause:
62
+ Exclude:
63
+ - 'lib/gitlab/license.rb'
64
+
65
+ # Offense count: 1
66
+ # Cop supports --auto-correct.
67
+ # Configuration parameters: EnforcedStyle.
68
+ # SupportedStyles: short, verbose
69
+ Style/PreferredHashMethods:
70
+ Exclude:
71
+ - 'lib/gitlab/license.rb'
72
+
73
+ # Offense count: 1
74
+ # Cop supports --auto-correct.
75
+ Style/RescueModifier:
76
+ Exclude:
77
+ - 'lib/gitlab/license.rb'
78
+
79
+ # Offense count: 14
80
+ # Cop supports --auto-correct.
81
+ # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
82
+ # URISchemes: http, https
83
+ Layout/LineLength:
84
+ Max: 104
data/README.md CHANGED
@@ -48,9 +48,9 @@ license.licensee = {
48
48
  "Email" => "douwe@gitlab.com"
49
49
  }
50
50
 
51
- # The date the license was issued.
51
+ # The date the license starts.
52
52
  # Required.
53
- license.issued_at = Date.new(2015, 4, 24)
53
+ license.starts_at = Date.new(2015, 4, 24)
54
54
  # The date the license expires.
55
55
  # Not required, to allow lifetime licenses.
56
56
  license.expires_at = Date.new(2016, 4, 23)
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "gitlab/license"
3
+ require 'bundler/setup'
4
+ require 'gitlab/license'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "gitlab/license"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
@@ -1,24 +1,28 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'gitlab/license/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "gitlab-license"
6
+ spec.name = 'gitlab-license'
8
7
  spec.version = Gitlab::License::VERSION
9
- spec.authors = ["Douwe Maan"]
10
- spec.email = ["douwe@gitlab.com"]
8
+ spec.authors = ['Douwe Maan', 'Stan Hu', 'Tyler Amos']
9
+ spec.email = ['douwe@gitlab.com', 'stanhu@gitlab.com', 'tamos@gitlab.com']
11
10
 
12
- spec.summary = %q{gitlab-license helps you generate, verify and enforce software licenses.}
13
- spec.homepage = "https://gitlab.com/gitlab-org/gitlab-license"
14
- spec.license = "MIT"
11
+ spec.summary = 'gitlab-license helps you generate, verify and enforce software licenses.'
12
+ spec.homepage = 'https://dev.gitlab.org/gitlab/gitlab-license'
13
+ spec.license = 'MIT'
15
14
 
16
15
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
- spec.bindir = "exe"
16
+ spec.bindir = 'exe'
18
17
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
18
+ spec.require_paths = ['lib']
20
19
 
21
- spec.add_development_dependency "bundler", "~> 1.9"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "byebug"
20
+ spec.required_ruby_version = '>= 2.3.0'
21
+
22
+ spec.add_development_dependency 'bundler', '~> 1.9'
23
+ spec.add_development_dependency 'byebug'
24
+ spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rspec', '~> 3.9'
26
+ spec.add_development_dependency 'rubocop', '~> 0.80.1'
27
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.38.1'
24
28
  end
@@ -1,10 +1,11 @@
1
- require "openssl"
2
- require "date"
3
- require "json"
4
- require "base64"
1
+ require 'openssl'
2
+ require 'date'
3
+ require 'json'
4
+ require 'base64'
5
5
 
6
- require "gitlab/license/version"
7
- require "gitlab/license/encryptor"
6
+ require 'gitlab/license/version'
7
+ require 'gitlab/license/encryptor'
8
+ require 'gitlab/license/boundary'
8
9
 
9
10
  module Gitlab
10
11
  class License
@@ -17,89 +18,124 @@ module Gitlab
17
18
  @encryption_key = nil
18
19
 
19
20
  def encryption_key=(key)
20
- if key && !key.is_a?(OpenSSL::PKey::RSA)
21
- raise ArgumentError, "No RSA encryption key provided."
22
- end
21
+ raise ArgumentError, 'No RSA encryption key provided.' if key && !key.is_a?(OpenSSL::PKey::RSA)
23
22
 
24
23
  @encryption_key = key
24
+ @encryptor = nil
25
25
  end
26
26
 
27
27
  def encryptor
28
- @encryptor ||= Encryptor.new(self.encryption_key)
28
+ @encryptor ||= Encryptor.new(encryption_key)
29
29
  end
30
30
 
31
31
  def import(data)
32
+ raise ImportError, 'No license data.' if data.nil?
33
+
34
+ data = Boundary.remove_boundary(data)
35
+
32
36
  begin
33
37
  license_json = encryptor.decrypt(data)
34
38
  rescue Encryptor::Error
35
- raise ImportError, "License data could not be decrypted."
39
+ raise ImportError, 'License data could not be decrypted.'
36
40
  end
37
41
 
38
42
  begin
39
43
  attributes = JSON.parse(license_json)
40
44
  rescue JSON::ParseError
41
- raise ImportError, "License data is invalid JSON."
45
+ raise ImportError, 'License data is invalid JSON.'
42
46
  end
43
-
47
+
44
48
  new(attributes)
45
49
  end
46
50
  end
47
51
 
48
52
  attr_reader :version
49
- attr_accessor :licensee, :issued_at, :expires_at
53
+ attr_accessor :licensee, :starts_at, :expires_at
50
54
  attr_accessor :notify_admins_at, :notify_users_at, :block_changes_at
55
+ attr_accessor :type, :last_synced_at, :next_sync_at, :block_changes_without_sync_at
51
56
  attr_accessor :restrictions
52
57
 
58
+ alias_method :issued_at, :starts_at
59
+ alias_method :issued_at=, :starts_at=
60
+
53
61
  def initialize(attributes = {})
54
62
  load_attributes(attributes)
55
63
  end
56
64
 
57
65
  def valid?
58
- return false if !licensee || !licensee.is_a?(Hash) || licensee.length == 0
59
- return false if !issued_at || !issued_at.is_a?(Date)
60
- return false if expires_at && !expires_at.is_a?(Date)
61
- return false if notify_admins_at && !notify_admins_at.is_a?(Date)
62
- return false if notify_users_at && !notify_users_at.is_a?(Date)
63
- return false if block_changes_at && !block_changes_at.is_a?(Date)
64
- return false if restrictions && !restrictions.is_a?(Hash)
65
-
66
- true
66
+ if !licensee || !licensee.is_a?(Hash) || licensee.empty?
67
+ false
68
+ elsif !starts_at || !starts_at.is_a?(Date)
69
+ false
70
+ elsif expires_at && !expires_at.is_a?(Date)
71
+ false
72
+ elsif notify_admins_at && !notify_admins_at.is_a?(Date)
73
+ false
74
+ elsif notify_users_at && !notify_users_at.is_a?(Date)
75
+ false
76
+ elsif block_changes_at && !block_changes_at.is_a?(Date)
77
+ false
78
+ elsif last_synced_at && !last_synced_at.is_a?(DateTime)
79
+ false
80
+ elsif next_sync_at && !next_sync_at.is_a?(DateTime)
81
+ false
82
+ elsif block_changes_without_sync_at && !block_changes_without_sync_at.is_a?(Date)
83
+ false
84
+ elsif type && type != 'sync'
85
+ false
86
+ elsif restrictions && !restrictions.is_a?(Hash)
87
+ false
88
+ else
89
+ true
90
+ end
67
91
  end
68
92
 
69
93
  def validate!
70
- raise ValidationError, "License is invalid" unless valid?
94
+ raise ValidationError, 'License is invalid' unless valid?
71
95
  end
72
96
 
73
97
  def will_expire?
74
- self.expires_at
98
+ expires_at
75
99
  end
76
100
 
77
101
  def will_notify_admins?
78
- self.notify_admins_at
102
+ notify_admins_at
79
103
  end
80
104
 
81
105
  def will_notify_users?
82
- self.notify_users_at
106
+ notify_users_at
83
107
  end
84
108
 
85
109
  def will_block_changes?
86
- self.block_changes_at
110
+ block_changes_at
111
+ end
112
+
113
+ def will_block_changes_without_sync?
114
+ block_changes_without_sync_at
115
+ end
116
+
117
+ def will_sync?
118
+ next_sync_at
87
119
  end
88
120
 
89
121
  def expired?
90
- will_expire? && Date.today >= self.expires_at
122
+ will_expire? && Date.today >= expires_at
91
123
  end
92
124
 
93
125
  def notify_admins?
94
- will_notify_admins? && Date.today >= self.notify_admins_at
126
+ will_notify_admins? && Date.today >= notify_admins_at
95
127
  end
96
128
 
97
129
  def notify_users?
98
- will_notify_users? && Date.today >= self.notify_users_at
130
+ will_notify_users? && Date.today >= notify_users_at
99
131
  end
100
132
 
101
133
  def block_changes?
102
- will_block_changes? && Date.today >= self.block_changes_at
134
+ will_block_changes? && Date.today >= block_changes_at
135
+ end
136
+
137
+ def block_changes_without_sync?
138
+ will_block_changes_without_sync? && Date.today >= block_changes_without_sync_at
103
139
  end
104
140
 
105
141
  def restricted?(key = nil)
@@ -110,32 +146,43 @@ module Gitlab
110
146
  end
111
147
  end
112
148
 
113
- def attributes
149
+ def attributes
114
150
  hash = {}
115
151
 
116
- hash["version"] = self.version
117
- hash["licensee"] = self.licensee
152
+ hash['version'] = version
153
+ hash['licensee'] = licensee
154
+
155
+ # `issued_at` is the legacy name for starts_at.
156
+ # TODO: Move to starts_at in a next version.
157
+ hash['issued_at'] = starts_at
158
+ hash['expires_at'] = expires_at if will_expire?
118
159
 
119
- hash["issued_at"] = self.issued_at
120
- hash["expires_at"] = self.expires_at if self.will_expire?
160
+ hash['notify_admins_at'] = notify_admins_at if will_notify_admins?
161
+ hash['notify_users_at'] = notify_users_at if will_notify_users?
162
+ hash['block_changes_at'] = block_changes_at if will_block_changes?
121
163
 
122
- hash["notify_admins_at"] = self.notify_admins_at if self.will_notify_admins?
123
- hash["notify_users_at"] = self.notify_users_at if self.will_notify_users?
124
- hash["block_changes_at"] = self.block_changes_at if self.will_block_changes?
164
+ hash['block_changes_without_sync_at'] = block_changes_without_sync_at if will_block_changes_without_sync?
165
+ hash['next_sync_at'] = next_sync_at if will_sync?
166
+ hash['last_synced_at'] = last_synced_at if will_sync?
167
+ hash['type'] = type
125
168
 
126
- hash["restrictions"] = self.restrictions if self.restricted?
169
+ hash['restrictions'] = restrictions if restricted?
127
170
 
128
171
  hash
129
172
  end
130
173
 
131
- def to_json
132
- JSON.dump(self.attributes)
174
+ def to_json(*_args)
175
+ JSON.dump(attributes)
133
176
  end
134
177
 
135
- def export
178
+ def export(boundary: nil)
136
179
  validate!
137
180
 
138
- self.class.encryptor.encrypt(self.to_json)
181
+ data = self.class.encryptor.encrypt(to_json)
182
+
183
+ data = Boundary.add_boundary(data, boundary) if boundary
184
+
185
+ data
139
186
  end
140
187
 
141
188
  private
@@ -143,26 +190,26 @@ module Gitlab
143
190
  def load_attributes(attributes)
144
191
  attributes = Hash[attributes.map { |k, v| [k.to_s, v] }]
145
192
 
146
- version = attributes["version"] || 1
147
- unless version && version == 1
148
- raise ArgumentError, "Version is too new"
149
- end
193
+ version = attributes['version'] || 1
194
+ raise ArgumentError, 'Version is too new' unless version && version == 1
150
195
 
151
196
  @version = version
152
197
 
153
- @licensee = attributes["licensee"]
198
+ @licensee = attributes['licensee']
154
199
 
155
- %w(issued_at expires_at notify_admins_at notify_users_at block_changes_at).each do |attr|
200
+ # `issued_at` is the legacy name for starts_at.
201
+ # TODO: Move to starts_at in a next version.
202
+ %w[issued_at expires_at notify_admins_at notify_users_at block_changes_at].each do |attr|
156
203
  value = attributes[attr]
157
204
  value = Date.parse(value) rescue nil if value.is_a?(String)
158
-
205
+
159
206
  next unless value
160
207
 
161
208
  send("#{attr}=", value)
162
209
  end
163
210
 
164
- restrictions = attributes["restrictions"]
165
- if restrictions && restrictions.is_a?(Hash)
211
+ restrictions = attributes['restrictions']
212
+ if restrictions&.is_a?(Hash)
166
213
  restrictions = Hash[restrictions.map { |k, v| [k.to_sym, v] }]
167
214
  @restrictions = restrictions
168
215
  end
@@ -0,0 +1,40 @@
1
+ module Gitlab
2
+ class License
3
+ module Boundary
4
+ BOUNDARY_START = /(\A|\r?\n)-*BEGIN .+? LICENSE-*\r?\n/.freeze
5
+ BOUNDARY_END = /\r?\n-*END .+? LICENSE-*(\r?\n|\z)/.freeze
6
+
7
+ class << self
8
+ def add_boundary(data, product_name)
9
+ data = remove_boundary(data)
10
+
11
+ product_name.upcase!
12
+
13
+ pad = lambda do |message, width|
14
+ total_padding = [width - message.length, 0].max
15
+
16
+ padding = total_padding / 2.0
17
+ [
18
+ '-' * padding.ceil,
19
+ message,
20
+ '-' * padding.floor
21
+ ].join
22
+ end
23
+
24
+ [
25
+ pad.call("BEGIN #{product_name} LICENSE", 60),
26
+ data.strip,
27
+ pad.call("END #{product_name} LICENSE", 60)
28
+ ].join("\n")
29
+ end
30
+
31
+ def remove_boundary(data)
32
+ after_boundary = data.split(BOUNDARY_START).last
33
+ in_boundary = after_boundary.split(BOUNDARY_END).first
34
+
35
+ in_boundary
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -8,17 +8,13 @@ module Gitlab
8
8
  attr_accessor :key
9
9
 
10
10
  def initialize(key)
11
- if key && !key.is_a?(OpenSSL::PKey::RSA)
12
- raise KeyError, "No RSA encryption key provided."
13
- end
11
+ raise KeyError, 'No RSA encryption key provided.' if key && !key.is_a?(OpenSSL::PKey::RSA)
14
12
 
15
13
  @key = key
16
14
  end
17
15
 
18
16
  def encrypt(data)
19
- unless key.private?
20
- raise KeyError, "Provided key is not a private key."
21
- end
17
+ raise KeyError, 'Provided key is not a private key.' unless key.private?
22
18
 
23
19
  # Encrypt the data using symmetric AES encryption.
24
20
  cipher = OpenSSL::Cipher::AES128.new(:CBC)
@@ -29,12 +25,12 @@ module Gitlab
29
25
  encrypted_data = cipher.update(data) + cipher.final
30
26
 
31
27
  # Encrypt the AES key using asymmetric RSA encryption.
32
- encrypted_key = self.key.private_encrypt(aes_key)
28
+ encrypted_key = key.private_encrypt(aes_key)
33
29
 
34
30
  encryption_data = {
35
- "data" => Base64.encode64(encrypted_data),
36
- "key" => Base64.encode64(encrypted_key),
37
- "iv" => Base64.encode64(aes_iv)
31
+ 'data' => Base64.encode64(encrypted_data),
32
+ 'key' => Base64.encode64(encrypted_key),
33
+ 'iv' => Base64.encode64(aes_iv)
38
34
  }
39
35
 
40
36
  json_data = JSON.dump(encryption_data)
@@ -42,31 +38,29 @@ module Gitlab
42
38
  end
43
39
 
44
40
  def decrypt(data)
45
- unless key.public?
46
- raise KeyError, "Provided key is not a public key."
47
- end
41
+ raise KeyError, 'Provided key is not a public key.' unless key.public?
48
42
 
49
43
  json_data = Base64.decode64(data.chomp)
50
44
 
51
45
  begin
52
46
  encryption_data = JSON.parse(json_data)
53
47
  rescue JSON::ParserError
54
- raise DecryptionError, "Encryption data is invalid JSON."
48
+ raise DecryptionError, 'Encryption data is invalid JSON.'
55
49
  end
56
50
 
57
- unless %w(data key iv).all? { |key| encryption_data[key] }
58
- raise DecryptionError, "Required field missing from encryption data."
51
+ unless %w[data key iv].all? { |key| encryption_data[key] }
52
+ raise DecryptionError, 'Required field missing from encryption data.'
59
53
  end
60
54
 
61
- encrypted_data = Base64.decode64(encryption_data["data"])
62
- encrypted_key = Base64.decode64(encryption_data["key"])
63
- aes_iv = Base64.decode64(encryption_data["iv"])
55
+ encrypted_data = Base64.decode64(encryption_data['data'])
56
+ encrypted_key = Base64.decode64(encryption_data['key'])
57
+ aes_iv = Base64.decode64(encryption_data['iv'])
64
58
 
65
59
  begin
66
60
  # Decrypt the AES key using asymmetric RSA encryption.
67
61
  aes_key = self.key.public_decrypt(encrypted_key)
68
62
  rescue OpenSSL::PKey::RSAError
69
- raise DecryptionError, "AES encryption key could not be decrypted."
63
+ raise DecryptionError, 'AES encryption key could not be decrypted.'
70
64
  end
71
65
 
72
66
  # Decrypt the data using symmetric AES encryption.
@@ -74,21 +68,21 @@ module Gitlab
74
68
  cipher.decrypt
75
69
 
76
70
  begin
77
- cipher.key = aes_key
71
+ cipher.key = aes_key
78
72
  rescue OpenSSL::Cipher::CipherError
79
- raise DecryptionError, "AES encryption key is invalid."
73
+ raise DecryptionError, 'AES encryption key is invalid.'
80
74
  end
81
75
 
82
76
  begin
83
- cipher.iv = aes_iv
77
+ cipher.iv = aes_iv
84
78
  rescue OpenSSL::Cipher::CipherError
85
- raise DecryptionError, "AES IV is invalid."
79
+ raise DecryptionError, 'AES IV is invalid.'
86
80
  end
87
81
 
88
82
  begin
89
83
  data = cipher.update(encrypted_data) + cipher.final
90
84
  rescue OpenSSL::Cipher::CipherError
91
- raise DecryptionError, "Data could not be decrypted."
85
+ raise DecryptionError, 'Data could not be decrypted.'
92
86
  end
93
87
 
94
88
  data
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  class License
3
- VERSION = "0.0.2"
3
+ VERSION = '1.2.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-license
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Douwe Maan
8
+ - Stan Hu
9
+ - Tyler Amos
8
10
  autorequire:
9
11
  bindir: exe
10
12
  cert_chain: []
11
- date: 2015-05-05 00:00:00.000000000 Z
13
+ date: 2020-11-17 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
16
  name: bundler
@@ -24,6 +26,20 @@ dependencies:
24
26
  - - "~>"
25
27
  - !ruby/object:Gem::Version
26
28
  version: '1.9'
29
+ - !ruby/object:Gem::Dependency
30
+ name: byebug
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
27
43
  - !ruby/object:Gem::Dependency
28
44
  name: rake
29
45
  requirement: !ruby/object:Gem::Requirement
@@ -39,28 +55,60 @@ dependencies:
39
55
  - !ruby/object:Gem::Version
40
56
  version: '10.0'
41
57
  - !ruby/object:Gem::Dependency
42
- name: byebug
58
+ name: rspec
43
59
  requirement: !ruby/object:Gem::Requirement
44
60
  requirements:
45
- - - ">="
61
+ - - "~>"
46
62
  - !ruby/object:Gem::Version
47
- version: '0'
63
+ version: '3.9'
48
64
  type: :development
49
65
  prerelease: false
50
66
  version_requirements: !ruby/object:Gem::Requirement
51
67
  requirements:
52
- - - ">="
68
+ - - "~>"
53
69
  - !ruby/object:Gem::Version
54
- version: '0'
70
+ version: '3.9'
71
+ - !ruby/object:Gem::Dependency
72
+ name: rubocop
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: 0.80.1
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: 0.80.1
85
+ - !ruby/object:Gem::Dependency
86
+ name: rubocop-rspec
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: 1.38.1
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: 1.38.1
55
99
  description:
56
100
  email:
57
101
  - douwe@gitlab.com
102
+ - stanhu@gitlab.com
103
+ - tamos@gitlab.com
58
104
  executables: []
59
105
  extensions: []
60
106
  extra_rdoc_files: []
61
107
  files:
62
108
  - ".gitignore"
63
109
  - ".rspec"
110
+ - ".rubocop.yml"
111
+ - ".rubocop_todo.yml"
64
112
  - ".travis.yml"
65
113
  - Gemfile
66
114
  - LICENSE.txt
@@ -70,9 +118,10 @@ files:
70
118
  - bin/setup
71
119
  - gitlab-license.gemspec
72
120
  - lib/gitlab/license.rb
121
+ - lib/gitlab/license/boundary.rb
73
122
  - lib/gitlab/license/encryptor.rb
74
123
  - lib/gitlab/license/version.rb
75
- homepage: https://gitlab.com/gitlab-org/gitlab-license
124
+ homepage: https://dev.gitlab.org/gitlab/gitlab-license
76
125
  licenses:
77
126
  - MIT
78
127
  metadata: {}
@@ -84,15 +133,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
133
  requirements:
85
134
  - - ">="
86
135
  - !ruby/object:Gem::Version
87
- version: '0'
136
+ version: 2.3.0
88
137
  required_rubygems_version: !ruby/object:Gem::Requirement
89
138
  requirements:
90
139
  - - ">="
91
140
  - !ruby/object:Gem::Version
92
141
  version: '0'
93
142
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.2.2
143
+ rubygems_version: 3.0.3
96
144
  signing_key:
97
145
  specification_version: 4
98
146
  summary: gitlab-license helps you generate, verify and enforce software licenses.