diff options
Diffstat (limited to 'license/license.class')
-rw-r--r-- | license/license.class | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/license/license.class b/license/license.class new file mode 100644 index 0000000..83a71a5 --- /dev/null +++ b/license/license.class @@ -0,0 +1,142 @@ +<?php +/* +** $Id$ +** +** Relog Internet Tools 3 Library ("ITOOLS3") +** +** it_license.class - Handle software licensing +** +** $Log$ +** Revision 1.2 2000/07/13 19:16:29 daenzer +** cosmetic changes +** +** Revision 1.1 2000/07/13 19:10:19 weber +** Added licensing suite +** +*/ + +/** + * itools (TM) license class + */ +class it_license +{ + /* private */ + var $host; /* Host requesting license */ + var $product; /* Product that we are requesting license for */ + + var $license; /* Entire encoded license string */ + var $licenseurl; /* External URL of license */ + var $licensefile; /* Local file name of cached license */ + var $internal; /* 1 if data source is internal cache */ + var $exp; /* Expiration date */ + +/** + * Create an it_license object for a product installation + * @param $product Name of the licensed product / project + */ +function it_license($product) +{ + $this->host = strtolower(gethostbyaddr(getenv('HTTP_HOST'))); + $this->product = $product; + $this->licensefile = '/tmp/'.$this->product.'-'.$this->host.'.license'; + $this->licenseurl = 'http://license.relog.ch/license.php?host='.$this->host.'&product='.$this->product; + + if ($this->get_license(1)) /* Cached license file exists */ + { + $age = time() - filemtime($this->licensefile); + + if ($age > 86400) /* Cached file is expired */ + { + if (!$this->get_license()) /* Try to get a new license from server */ + { + if ($age > 604800) /* Couldn't get a new license for a week */ + { + unlink($this->licensefile); /* License finally expired */ + unset($this->license); + } + } + } + } + else $this->get_license(); + + $this->check(); + + if (!$this->internal) + { + if ($fh = fopen($this->licensefile, "w")) + { + fwrite($fh, $this->license); + fclose($fh); + } + } +} + + +function get_license($internal=0) +{ + $url = $internal ? $this->licensefile : $this->licenseurl; + + /* echo "Getting license \"$url\"<br>\n"; */ + + if ($file = @file($url)) + { + $this->license = $file[0]; + $this->internal = $internal; + return $url; + } + return 0; +} + + +function check() +{ + $secret="Jm+sd3O5NfvBudDhaf/N24-%C"; + + list($header, $formatversion, $comment, $code, $md5, $end) = explode('|', $this->license); + if ($header == 'RELOG/ULTRALICENSE3000') + { + if ($formatversion == 1) + { + if (md5($secret.$code.$secret) == base64_decode($md5)) + { + list($formatversion, $host, $product, $this->exp) = explode('|', base64_decode($code)); + if ($formatversion == 1) + { + if ($host == $this->host) + { + if ($product == $this->product) + { + list($year, $month, $day) = explode('-', $this->exp); + $exp = mktime(0, 0, 0, $month, $day, $year); + $now = time(); + + if ($exp > $now) /* Valid license */ + return; + + $error = 'license expired on '.$this->exp; + } + else $error = 'wrong product'; + } + else $error = 'wrong host'; + } + else $error = 'format2'; + } + else $error = 'license not authentic'; + } + else $error = 'format'; + } + else $error = 'no license'; + echo $this->host.": invalid license for product <i>$product</i>, reason: <b>$error</b><br>\n"; + exit; +} + + +function valid_until() +{ + return $this->exp; +} + + + +} /* End class it_license */ +?> |