mirror of
https://github.com/Lakr233/GitLab-License-Generator.git
synced 2026-01-30 11:55:35 +02:00
Merge pull request #24 from codemaker219/modify_existing_licenses
add a script that can modify existing licenses
This commit is contained in:
71
src/modify.license.rb
Executable file
71
src/modify.license.rb
Executable file
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
# encoding: utf-8
|
||||||
|
|
||||||
|
require 'base64'
|
||||||
|
require 'json'
|
||||||
|
require 'openssl'
|
||||||
|
require 'tempfile'
|
||||||
|
require 'optparse'
|
||||||
|
require_relative '../lib/license/encryptor'
|
||||||
|
|
||||||
|
public_key_path = nil
|
||||||
|
in_file = nil
|
||||||
|
|
||||||
|
OptionParser.new do |opts|
|
||||||
|
opts.banner = "Usage: xxx.rb [options]"
|
||||||
|
|
||||||
|
opts.on("-k", "--public-key PATH", "Specify public key file (required)") do |v|
|
||||||
|
public_key_path = File.expand_path(v)
|
||||||
|
end
|
||||||
|
|
||||||
|
opts.on("-i", "--in PATH", "input license path") do |v|
|
||||||
|
in_file = File.expand_path(v)
|
||||||
|
end
|
||||||
|
|
||||||
|
opts.on("-h", "--help", "Prints this help") do
|
||||||
|
puts opts
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
.parse!
|
||||||
|
|
||||||
|
if in_file.nil? || public_key_path.nil?
|
||||||
|
puts "[!] missing required options"
|
||||||
|
puts "[!] use -h for help"
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
|
||||||
|
content = File.read(in_file)
|
||||||
|
attributes = JSON.parse(Base64.decode64(content))
|
||||||
|
|
||||||
|
PUBLIC_KEY = OpenSSL::PKey::RSA.new File.read(public_key_path)
|
||||||
|
decryptor = Gitlab::License::Encryptor.new(PUBLIC_KEY)
|
||||||
|
plain_license = decryptor.decrypt(content)
|
||||||
|
edited_json = nil
|
||||||
|
|
||||||
|
Tempfile.create(['json_edit', '.json']) do |file|
|
||||||
|
file.write(JSON.pretty_generate(JSON.parse(plain_license)))
|
||||||
|
file.flush
|
||||||
|
|
||||||
|
system("vim #{file.path}")
|
||||||
|
file.rewind
|
||||||
|
edited_json = file.read
|
||||||
|
end
|
||||||
|
|
||||||
|
edited_json = JSON.generate(JSON.parse(edited_json))
|
||||||
|
|
||||||
|
cipher = OpenSSL::Cipher::AES128.new(:CBC)
|
||||||
|
cipher.encrypt
|
||||||
|
cipher.key = PUBLIC_KEY.public_decrypt(Base64.decode64(attributes['key']))
|
||||||
|
cipher.iv = Base64.decode64(attributes['iv'])
|
||||||
|
|
||||||
|
encrypted_data = cipher.update(edited_json) + cipher.final
|
||||||
|
|
||||||
|
encryption_data = {
|
||||||
|
'data' => Base64.encode64(encrypted_data),
|
||||||
|
'key' => attributes['key'],
|
||||||
|
'iv' => attributes['iv']
|
||||||
|
}
|
||||||
|
|
||||||
|
json_data = JSON.dump(encryption_data)
|
||||||
|
puts Base64.encode64(json_data)
|
||||||
Reference in New Issue
Block a user