gitlab-license 0.0.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 003f891e0c79c5dad69dd13991814fd337dd842f
4
- data.tar.gz: 9a324afa2d6c474d654baddded5d8c8f06c06e2c
3
+ metadata.gz: 2a87318ee3ba270b898c8fdd55958d02f219d0ab
4
+ data.tar.gz: 6d9394ee078fc45357a4e39a7c79bae098c6d956
5
5
  SHA512:
6
- metadata.gz: 902fe5b33b61f2c259a638c4ed9bfdb05cade11046e4c7913557df9030e547ea29e8fa3e363208fd0d4f13b460b3300d646a78ef3d133444106aee2209d9850f
7
- data.tar.gz: 0ca91a33ad564337b64b691ddd7badb405899bc3a7b1d6d8c8e45e08397e59b4a031d30836553ea7568f9ba49ae7c7d49af86063f08e3379b58cb152f9e18161
6
+ metadata.gz: 19c9de17bb52fcb767e62d1af7c1350ac523ad26073636d57fe6cb2945a29be20374a49ac5d98b83d78e9c393c81f27d801f72ba1da9fb4c79252ef4437fe526
7
+ data.tar.gz: 6eab5c49867731fbc886b6e678b910f9501b862f75646c28657301e8c1be00eb65fdffb87a609ed38668c70c0424a68fc93bdd78a419c7b29b69fa51ee907304
@@ -8,24 +8,40 @@ require "gitlab/license/encryptor"
8
8
 
9
9
  module Gitlab
10
10
  class License
11
+ class Error < StandardError; end
12
+ class ImportError < Error; end
13
+ class ValidationError < Error; end
14
+
11
15
  class << self
12
- attr_accessor :encryption_key
16
+ attr_reader :encryption_key
13
17
  @encryption_key = nil
14
18
 
15
- def encryptor
16
- unless self.encryption_key && self.encryption_key.is_a?(OpenSSL::PKey::RSA)
17
- raise "No RSA encryption key provided."
19
+ def encryption_key=(key)
20
+ if key && !key.is_a?(OpenSSL::PKey::RSA)
21
+ raise ArgumentError, "No RSA encryption key provided."
18
22
  end
19
23
 
20
- Encryptor.new(self.encryption_key)
24
+ @encryption_key = key
21
25
  end
22
26
 
23
- def import(data)
24
- from_json(encryptor.decrypt(data))
27
+ def encryptor
28
+ @encryptor ||= Encryptor.new(self.encryption_key)
25
29
  end
26
30
 
27
- def from_json(license_json)
28
- new(JSON.parse(license_json))
31
+ def import(data)
32
+ begin
33
+ license_json = encryptor.decrypt(data)
34
+ rescue Encryptor::Error
35
+ raise ImportError, "License data could not be decrypted."
36
+ end
37
+
38
+ begin
39
+ attributes = JSON.parse(license_json)
40
+ rescue JSON::ParseError
41
+ raise ImportError, "License data is invalid JSON."
42
+ end
43
+
44
+ new(attributes)
29
45
  end
30
46
  end
31
47
 
@@ -51,7 +67,7 @@ module Gitlab
51
67
  end
52
68
 
53
69
  def validate!
54
- raise "License is invalid" unless valid?
70
+ raise ValidationError, "License is invalid" unless valid?
55
71
  end
56
72
 
57
73
  def will_expire?
@@ -1,15 +1,23 @@
1
1
  module Gitlab
2
2
  class License
3
3
  class Encryptor
4
+ class Error < StandardError; end
5
+ class KeyError < Error; end
6
+ class DecryptionError < Error; end
7
+
4
8
  attr_accessor :key
5
9
 
6
10
  def initialize(key)
11
+ if key && !key.is_a?(OpenSSL::PKey::RSA)
12
+ raise KeyError, "No RSA encryption key provided."
13
+ end
14
+
7
15
  @key = key
8
16
  end
9
17
 
10
18
  def encrypt(data)
11
19
  unless key.private?
12
- raise "Provided key is not a private key."
20
+ raise KeyError, "Provided key is not a private key."
13
21
  end
14
22
 
15
23
  # Encrypt the data using symmetric AES encryption.
@@ -35,26 +43,53 @@ module Gitlab
35
43
 
36
44
  def decrypt(data)
37
45
  unless key.public?
38
- raise "Provided key is not a public key."
46
+ raise KeyError, "Provided key is not a public key."
39
47
  end
40
48
 
41
- json_data = Base64.decode64(data)
42
- encryption_data = JSON.parse(json_data)
49
+ json_data = Base64.decode64(data.chomp)
50
+
51
+ begin
52
+ encryption_data = JSON.parse(json_data)
53
+ rescue JSON::ParserError
54
+ raise DecryptionError, "Encryption data is invalid JSON."
55
+ end
56
+
57
+ unless %w(data key iv).all? { |key| encryption_data[key] }
58
+ raise DecryptionError, "Required field missing from encryption data."
59
+ end
43
60
 
44
61
  encrypted_data = Base64.decode64(encryption_data["data"])
45
62
  encrypted_key = Base64.decode64(encryption_data["key"])
46
63
  aes_iv = Base64.decode64(encryption_data["iv"])
47
64
 
48
- # Decrypt the AES key using asymmetric RSA encryption.
49
- aes_key = self.key.public_decrypt(encrypted_key)
65
+ begin
66
+ # Decrypt the AES key using asymmetric RSA encryption.
67
+ aes_key = self.key.public_decrypt(encrypted_key)
68
+ rescue OpenSSL::PKey::RSAError
69
+ raise DecryptionError, "AES encryption key could not be decrypted."
70
+ end
50
71
 
51
72
  # Decrypt the data using symmetric AES encryption.
52
73
  cipher = OpenSSL::Cipher::AES128.new(:CBC)
53
74
  cipher.decrypt
54
- cipher.key = aes_key
55
- cipher.iv = aes_iv
56
75
 
57
- data = cipher.update(encrypted_data) + cipher.final
76
+ begin
77
+ cipher.key = aes_key
78
+ rescue OpenSSL::Cipher::CipherError
79
+ raise DecryptionError, "AES encryption key is invalid."
80
+ end
81
+
82
+ begin
83
+ cipher.iv = aes_iv
84
+ rescue OpenSSL::Cipher::CipherError
85
+ raise DecryptionError, "AES IV is invalid."
86
+ end
87
+
88
+ begin
89
+ data = cipher.update(encrypted_data) + cipher.final
90
+ rescue OpenSSL::Cipher::CipherError
91
+ raise DecryptionError, "Data could not be decrypted."
92
+ end
58
93
 
59
94
  data
60
95
  end
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  class License
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-license
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Douwe Maan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-29 00:00:00.000000000 Z
11
+ date: 2015-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler