0.0
No release in over a year
code0-license is used to validate software licenses
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 13.0
~> 3.0
~> 1.21

Runtime

~> 0.3.0
 Project Readme

Code0::License

Code0::License can create and validate software licenses.

Installation

Install the gem and add to the application's Gemfile by executing:

$ bundle add code0-license

If bundler is not being used to manage dependencies, install the gem by executing:

$ gem install code0-license

Usage

To start using the gem, you need to have a public and private RSA key. If you don't have a key pair, you can generate one by running bin/create_key

To generate a license, use the private key as encryption key:

require "code0/license"

# read private key from file
private_key_file = File.read('license_key.key')
private_key = OpenSSL::PKey::RSA.new(private_key_file)

# set private key as encryption key
Code0::License.encryption_key = private_key

# create a license
license = Code0::License.new(
  {
    licensee: { company: 'Code0' }, # content of licensee can be as you want, it just can't be empty
    start_date: '2024-05-01', # when is the first date where this license is valid?
    end_date: '2025-05-01', # until when is the license valid?
    restrictions: {}, # content can be as you wish, can be used to semantically store some restrictions that are evaluated by your application
    options: {}, # content can be as you wish, can be used to semantically provide some options of this license
  }
)

# export the license
File.write('license.txt', Code0::License.export(license, 'CODE0'))

To verify the license in your application, use the public key

require "code0/license"

# read public key from file
public_key_file = File.read('license_key.pub')
public_key = OpenSSL::PKey::RSA.new(public_key_file)

# set public key as encryption key
Code0::License.encryption_key = public_key

# load the license
license = Code0::License.load(File.read('license.txt'))

# exit if license is not valid or outside of the valid time
exit unless license.valid?
exit unless license.in_active_time?

# for example, exit if users exceed licensed amount
exit if license.restricted?(:user_count) && User.count > license.restrictions[:user_count]