diff --git a/generate_keys.rb b/generate_keys.rb deleted file mode 100644 index 197f2ad..000000000 --- a/generate_keys.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'openssl' - -key_pair = OpenSSL::PKey::RSA.generate(2048) -File.open("license_key", "w") { |f| f.write(key_pair.to_pem) } - -public_key = key_pair.public_key -File.open("license_key.pub", "w") { |f| f.write(public_key.to_pem) } - -puts "Generated RSA key pairs, use generate_licenses.rb to generate licenses." -puts "Make your own customization to the code if needed." \ No newline at end of file diff --git a/generate_licenses.rb b/generate_licenses.rb index eb83904..6fe9c24 100644 --- a/generate_licenses.rb +++ b/generate_licenses.rb @@ -1,33 +1,68 @@ +require 'openssl' require_relative 'lib/license.rb' -# MARK: GENERATOR -# -if !File.file?("license_key") || !File.file?("license_key.pub") - puts "License key not found" - puts "Generate a RSA key pair using generate_keys.rb" - exit +LICENSE_TARGET_PRIVATE_KEY = "license_key" +LICENSE_TARGET_PUBLIC_KEY = "license_key.pub" +TARGET_LICENSE_FILE = 'result.gitlab-license' + +puts "[i] gitlab license generator - core v2.2.1" +puts "" + +if !File.exist?(LICENSE_TARGET_PRIVATE_KEY) || !File.exist?(LICENSE_TARGET_PUBLIC_KEY) + puts "[*] generating RSA keys..." + key = OpenSSL::PKey::RSA.new(2048) + File.write(LICENSE_TARGET_PRIVATE_KEY, key.to_pem) + File.write(LICENSE_TARGET_PUBLIC_KEY, key.public_key.to_pem) end -public_key = OpenSSL::PKey::RSA.new File.read("license_key.pub") -private_key = OpenSSL::PKey::RSA.new File.read("license_key") +puts "[*] loading RSA keys..." + +public_key = OpenSSL::PKey::RSA.new File.read(LICENSE_TARGET_PUBLIC_KEY) +private_key = OpenSSL::PKey::RSA.new File.read(LICENSE_TARGET_PRIVATE_KEY) + +puts "[*] building license..." Gitlab::License.encryption_key = private_key license = Gitlab::License.new +# don't use gitlab inc, search `gl_team_license` in lib for details license.licensee = { "Name" => "Tim Cook", "Company" => "Apple Computer, Inc.", "Email" => "tcook@apple.com" } +# required of course license.starts_at = Date.new(1976, 4, 1) + +# required since gem gitlab-license v2.2.1 license.expires_at = Date.new(2500, 4, 1) +# prevent gitlab crash at +# notification_start_date = trial? ? expires_at - NOTIFICATION_DAYS_BEFORE_TRIAL_EXPIRY : block_changes_at +license.block_changes_at = Date.new(2500, 4, 1) + +# required license.restrictions = { plan: 'ultimate', + # STARTER_PLAN = 'starter' + # PREMIUM_PLAN = 'premium' + # ULTIMATE_PLAN = 'ultimate' + active_user_count: 2147483647, + # required, just dont overflow } +puts "[*] calling export" + +puts "" +puts "=====================================================" + data = license.export -File.open("result.gitlab-license", "w") { |f| f.write(data) } +File.open(TARGET_LICENSE_FILE, "w") { |f| f.write(data) } + +puts "=====================================================" +puts "" + +puts "[*] License generated successfully!" \ No newline at end of file diff --git a/make.sh b/make.sh index c643fea..dc2541d 100755 --- a/make.sh +++ b/make.sh @@ -1,10 +1,4 @@ #!/bin/bash -set -e - -cd "$(dirname "$0")" - -# ruby ./generate_keys.rb -ruby ./generate_licenses.rb - -echo "done" \ No newline at end of file +cd "$(dirname "$0")" || exit 1 +ruby ./generate_licenses.rb \ No newline at end of file diff --git a/result.gitlab-license b/result.gitlab-license index 49f767a..3b7e5fb 100644 --- a/result.gitlab-license +++ b/result.gitlab-license @@ -1,23 +1,24 @@ -eyJkYXRhIjoiUW5sQ2NiL1Q5ME50RHVoYm1kU2l5S2ZEdElVczcwSWc1Q280 -UVRRM0FRMDYyQml1TlJrakRBa1QramVYXG5VODdRYktlTmc3Mm5lVE9YeFIr -MWxkWEVvaVhPS0JXOTVzSmZnY2Fla29XZWZBV2xXQWIzQkJMSU91TnRcbklE -WkRMMXNUTFQrenBlOGNMcW5vdE1GQjVBOWtveklYNWZIbXJMUVVtY2wvWldz -VGZ6d0JPVUpMUnRIK1xuSUk2ajlVUWZkTndXMDhlUXpjV0hCSUZFajl4bnJu -YnBlcFNzKzFQS0RSeGFsS0JtWUVFUmRnSTVOUFBaXG5pNVdGRTNxUDc2QkxK -UDNOZ24xWUV3b3BuTG82V1BiSVR6S1VRempaQVprQXFDRHhjellYZzJXdnpq -ODVcbitucFVWYUxiUkt2aTZSK2E2VVQvQ1lLeC8xQ2RDbFJJK3NzT1JQRm51 -VTBqTG5HUUVBT1JyY0wzOXNMSlxuZlB2TDBVT3hHVlhUZFBabWcwVGYwemVp -bGhFcTI4VXBQTmZXNS9WV2RmVStjUjJTOTlJMFBZeFVMbmxDXG5TUFFwaTlX -ZmZqeU9rWnE1TldVNVNqMDFwTlk4T3hlK2hWWXN2amUwUTMrSFF4QUZGTlBy -eldMa09VYVlcbllUZm1tdTRSNjZYc0dVZW8yZ3N3K1F5VnVZSjBGZEkrK2h4 -TDhFMmJ6Z1A5RHRpNW1ybk0remg4MDVhb1xudVEyOG15ekJPc3d5MEFxK3lH -OXlJZnQxRkc1MGRQTkt1VTl3XG4iLCJrZXkiOiJIRDUvNWR1L0kramVIUWEx -eEljSnF4cHFmMjAvTG5oNDFFcldBMTZ3MW82ZktKVDBjS3NheFlJWWo4NUxc -bmlGc3oyRm1ZakFZMGdhdXYwM1F1Z1FQZm1hNXdJdkRIdGxXenlxSC9sWXgv -QnR5d2tva2VpUllsVDFLclxuMGgwWEFFYTljeElCVTdpSXZMQnE3bE40LzRS -amlqRWExZmtpVmdlN2x2NlQybVNtWGRGTHNsUGJyQndtXG50Y1BMREhvaStR -TTZKMHpMVUtITGFRcnZYWVoraWgxQVdtM3Iyc3A2Q2p0d0lidE9jcC9aMmhS -NmQxb09cbmFmWXJ1MnhldThva0ZpR2ZIeklJcUdMM29yelFEeHVKU0FJaW9u -bExHakhMQVBlbzNRWkxweWRndzhsUFxuc2s0MHRYMS90WUJHTEg1Q3VKenpI -SzhsMW42ZUNQUzFFVituckV6NmxnPT1cbiIsIml2IjoiN3pOWngwUTNXOHR0 -OVArcTVaOEhvQT09XG4ifQ== +eyJkYXRhIjoiT2FaeExyaDhuOEk1dkFSK3d1akhsaWNudVUvSnJtS04veSs0 +anhSV3V4K2g0ZDNrMHgvNHlBVVordE0yXG5sU1FEZ1NUSE5xM3J3N2pYbzhQ +V0JRM21JeDZ1VHRjdVROVlRyQ0FHNUV1STZFZzRzcFJCQzBQSjFjRHNcbis1 +V0s2UDhici9EMldKdytjbldSN3JqT0JqZndHcVB4NU9YZGlJMkV0clFFUHVy +UnFsZDRjNGI1VXpNeVxuaWlDMy9pNGIwQlVWUXB4bUpRTDdCVXczVFB6c2FR +cTBTam16cjFIaWF5TWJPaHE2ZytyVnd0aytGdE43XG52Q09DejVWSVVGTHJS +NHNpQUVkWCtMMFNQR3FoRldTeElQODMwREdRcHFtbjdTNEtNRVZRT0FyR24r +NlBcbnRTQTRTeDdubGpCakE1Z04zMWdzOXg2S1JnK0Y5dXlXRzBWMFlWazEv +WmNrSFZXRkhLRVBKMEFhb3BvMVxuK25KM01UbmRmMW45dGVLMlJsMnRIR3RE +TmJTUVJuT3VVUEE0U3hOUlNXYml6bkZSTVU1MlpDQ3o4SGhiXG5OQ2VsV01R +WmdxSFZ5TWdxTVJud2lZT0pHLzBvUFhvSjhxdGtqSzErZGY2K3BCK3pFTlR1 +Z1lkVzhuTkVcbkJYTFZMSUF1di9USlVqeXJSckxmQTFqVTFzVjU0SkhHeGFq +UUNGMFNDWklTNElyc2pxTnAzQ2NXWC9pZ1xuR0RmKzhPSWJuS1hhWkNubzNi +MXQzZ3JFRnphVG9VOHFqdFlYdjlaVDM5Mk9OTmlWTnFDYUd6T2ZzcXJ0XG5I +VmZUY0Rya0kxT0JPYTJMNE9JPVxuIiwia2V5IjoiRCtkSFFRY2pBK3hBR2d3 +TGFtbXdoZGR5VnpnUnRadzB6YkN4bXJES2JBOXZ2WU5iOS9vc2xBUGZqbCti +XG5acFl5NTRydDNyVDlhNTRGaDF4NVBPcEtNenFMajhEVmlDR1hZVy9WaDVj +NDRUazl6Q0FwZnAwOW1ua3Rcbm5QYktxR2MwV0E4ZmJnM092V0hHK0F6VDRL +NklqMEZRRk1JRkpwZm9kTXY3MmRvUVNpSGxqVFJ6N0pkclxuWk1GeXE5UDBF +SnNDWElqOUpiZFVmZFBqRGdlUWw5aFQwRXVvTUEwVjU1N3ZQQVpNenk1VTQz +enlSTnBrXG4rWmJ3YUY0cXpmMEZwSXd2ZnpGL3MyYTU3VC9JeGZvd3dMVG5j +NjJSYk45OWtGRlloQlhIc3dWSGdZN3VcbklOLzh0V2txdXJacU5zRGZ5N0RR +RmtwTTAvLzF0ekt3RURwWktRdlc1QT09XG4iLCJpdiI6IjdmenVqb1RZV3VV +MytQTzBkVS94c3c9PVxuIn0=