<?php
 
 
    /**
 
    * Project:        Distrubution License Class
 
    * File:            class.license.gen.php
 
    *
 
    * Copyright (C) 2005 Oliver Lillie
 
    * 
 
    * This program is free software; you can redistribute it and/or modify it 
 
    * under the terms of the GNU General Public License as published by  the Free 
 
    * Software Foundation; either version 2 of the License, or (at your option) 
 
    * any later version.
 
    *
 
    * This program is distributed in the hope that it will be useful, but 
 
    * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 
    * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
 
    * for more details.
 
    *
 
    * You should have received a copy of the GNU General Public License along 
 
    * with this program; if not, write to the Free Software Foundation, Inc., 
 
    * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    
 
    *
 
    * @link http://www.buggedcom.co.uk/
 
    * @link http://www.phpclasses.org/browse/package/2298.html
 
    * @author Oliver Lillie, buggedcom <publicmail at buggedcom dot co dot uk>
 
    * @version 0.5
 
    * @history---------------------------------------------
 
    * see CHANGELOG
 
    */
 
    
 
    class license_architect extends license_application {
 
    
 
        /**
 
        * Constructor
 
        *
 
        * @access public 
 
        * @param $use_mcrypt boolean Determines if mcrypt encryption is used or 
 
        *         not (defaults to true, however if mcrypt is not available, it 
 
        *         is set to false) 
 
        * @param $use_time boolean Sets if time binding should be used in the 
 
        *         key (defaults to true) 
 
        * @param $use_server boolean Sets if server binding should be used in  
 
        *         the key (defaults to true) 
 
        * @param $allow_local boolean Sets if server binding is in use then  
 
        *         localhost servers are valid (defaults to false) 
 
        **/
 
        function license_architect($license_path='license.dat', $use_mcrypt=true, $use_time=true, $use_server=true, $allow_local=false)
 
        {
 
            # check to see if the class has been secured
 
            $this->_check_secure();
 
            $this->license_application($license_path, $use_mcrypt, $use_time, $use_server, $allow_local);
 
        }
 
        
 
        /**
 
        * writeKey
 
        *
 
        * writes the key 
 
        *
 
        * @access public 
 
        * @param $key string The key string
 
          * @return boolean Returns boolean on success
 
        **/
 
        function writeKey($key)
 
        {
 
            # check to see if the class has been secured
 
            $this->_check_secure();
 
            # open the key file for writeing and truncate
 
            $h = fopen($this->_LICENSE_PATH, 'w');
 
            # if write fails return error
 
            if(fwrite($h, $key) === false) return false;
 
            # close file
 
            fclose($h);
 
            # return key
 
            return true;
 
        }
 
        
 
        /**
 
        * register_install
 
        *
 
        * registers the install with the home server and if registration is 
 
        * excepted it then generates and installs the key.
 
        *
 
        * @access public 
 
        * @param $domain string the domain to register the license to
 
        * @param $start number  the start time of the license, can be either 
 
        *         the actuall time or the time span until the license is valid
 
        * @param $expire_in number/string number of seconds untill the license 
 
        *         expires after start, or 'NEVER' to never expire
 
        * @param $data array Array that contains the info to be validated
 
        * @param $dialhost string Host name of the server to be contacted
 
        * @param $dialpath string Path of the script for the data to be sent to
 
        * @param $dialport number Port Number to send the data through
 
          * @return string Returns the encrypted install validation
 
        **/
 
        function register_install($domain, $start, $expire_in, $data, $dialhost, $dialpath, $dialport='80')
 
        {
 
            # check to see if the class has been secured
 
            $this->_check_secure();
 
            # check if key is alread generated
 
            if(@filesize($this->_LICENSE_PATH) > 4)    return array('RESULT'=>'KEY_EXISTS');
 
            
 
            $data = array('DATA'=>$data);
 
            
 
            # if the server matching is required then get the info
 
            if($this->USE_SERVER)
 
            {
 
                # evaluate the supplied domain against the collected ips
 
                if(!$this->_compare_domain_ip($domain, $this->_IPS)) return array('RESULT'=>'DOMAIN_IP_FAIL');
 
                # check server uris
 
                if(count($this->_SERVER_INFO) < $this->REQUIRED_URIS) return array('RESULT'=>'SERVER_FAIL');
 
                
 
                $data['SERVER']['MAC']         = $this->_MAC;
 
                $data['SERVER']['PATH']     = $this->_SERVER_INFO;
 
                $data['SERVER']['IP']         = $this->_IPS;
 
                $data['SERVER']['DOMAIN']     = $domain;
 
 
            }
 
            
 
            # if use time restrictions
 
            if($this->USE_TIME)
 
            {
 
                $current                     = time();
 
                $start                        = ($current < $start) ? $start : $current+$start;
 
                # set the dates
 
                $data['DATE']['START']         = $start;
 
                if($expire_in == 'NEVER')
 
                {
 
                    $data['DATE']['SPAN']     = '~';
 
                    $data['DATE']['END']     = 'NEVER';
 
                }
 
                else
 
                {
 
                    $data['DATE']['SPAN']     = $expire_in;
 
                    $data['DATE']['END']     = $start+$expire_in;
 
                }
 
            }
 
            
 
            # includethe id for requests
 
            $data['ID'] = md5($this->ID2);
 
 
            # post the data home
 
            $data = $this->_post_data($dialhost, $dialpath, $data, $dialport);
 
            # return the result and key if approved
 
            return (empty($data['RESULT'])) ? array('RESULT'=>'SOCKET_FAILED') : $data;
 
        }
 
 
        /**
 
        * generate
 
        *
 
        * generates the server key when the license class resides on the server
 
        *
 
        * @access public 
 
        * @param $domain string The domain to bind the license to.
 
        * @param $start number The number of seconds untill the key is valid
 
        *         if the value is 0 then the current value given by time() is 
 
        *         used as the start date.
 
        * @param $expire_in number The number of seconds the key will be valid 
 
        *         for (the default reverts to 31449600 - 1 year)
 
        * @param $other_array array An array that can contain any other data you
 
        *         want to store in the key
 
          * @return string key string
 
          * @return string     KEY_EXISTS            - key has already been written and thus can't write
 
          *                    DOMAIN_IP_FAIL         - means the domain name supplied doesn't match the corresponding ip
 
          *                    SERVER_FAIL         - enough server vars failed to be found
 
        **/
 
        function generate($domain='', $start=0, $expire_in=31449600, $other_array=array())
 
        {
 
            # check to see if the class has been secured
 
            $this->_check_secure();
 
            # check if key is alread generated
 
            if(@filesize($this->_LICENSE_PATH) > 4)    return 'KEY_EXISTS';
 
            # check if target exists
 
            if(!@file_exists($this->_LICENSE_PATH) || !@is_file($this->_LICENSE_PATH)) return 'WRITE_TARGET_404';
 
            # key file doesn't exist
 
            if(!@is_writeable($this->_LICENSE_PATH)) return 'WRITE_TARGET_UNWRITEABLE';
 
            
 
            # if the URIS returned are false it means that there has not been
 
            # enough unique data returned by the $_SERVER so cannot generate key
 
            if($this->_SERVER_INFO !== false || !$this->USE_SERVER)
 
            {
 
                # set the id
 
                $DATA['ID']                 = md5($this->ID1);
 
                
 
                # set server binds
 
                if($this->USE_SERVER)
 
                {
 
                    # evaluate the supplied domain against the collected ips
 
                    if(!$this->_compare_domain_ip($domain, $this->_IPS)) return 'DOMAIN_IP_FAIL';
 
                    
 
                    # set the domain
 
                    $DATA['SERVER']['DOMAIN']     = $domain;
 
                    # set the mac id
 
                    $DATA['SERVER']['MAC']         = $this->_MAC;
 
                    # set the server arrays
 
                    $DATA['SERVER']['PATH']     = $this->_SERVER_INFO;
 
                    # set the ip arrays
 
                    $DATA['SERVER']['IP']         = $this->_IPS;
 
                }
 
                
 
                # set time binds
 
                if($this->USE_TIME && !is_array($start))
 
                {
 
                    $current                     = time();
 
                    $start                        = ($current < $start) ? $start : $current+$start;
 
                    # set the dates
 
                    $DATA['DATE']['START']         = $start;
 
                    $DATA['DATE']['SPAN']         = $expire_in;
 
                    if($expire_in == 'NEVER')
 
                    {
 
                        $DATA['DATE']['END']     = 'NEVER';
 
                    }
 
                    else
 
                    {
 
                        $DATA['DATE']['END']     = $start+$expire_in;
 
                    }
 
                }
 
                
 
                # if start is array then it is the other array and time binding is not in use
 
                # convert to other array
 
                if(is_array($start))
 
                {
 
                    $other_array = $start;
 
                }
 
                
 
                # set the server os
 
                $other_array['_PHP_OS']      = PHP_OS;  
 
                
 
                # set the server os
 
                $other_array['_PHP_VERSION'] = PHP_VERSION;  
 
 
                # merge the data with the other array
 
                $DATA['DATA']                 = $other_array;
 
 
                # encrypt the key
 
                $key = $this->_wrap_license($DATA);
 
                
 
                # write the key
 
                if(!$this->writeKey($key)) return 'WRITE_FAILED';
 
                
 
                # return the key
 
                return $key;
 
            }
 
            # no key can be generated so returns false
 
            return 'SERVER_FAIL';
 
            
 
        }
 
                
 
    }
 
    
 
 
?>
 
 |