JetBrains License Server PHP版
JetBrainsLicenseServer 授权服务类
代码如下:
<?php
/**
* JetBrains许可服务器
*/
class JetBrainsLicenseServer
{
// 授权给谁
public $licensee = 'jxx';
// license 有效时间(单位:毫秒),默认约为7天多(607875500),原厂 server 传递的数值。
public $prolongationPeriod = 607875500;
// RSA 私钥
public $privateKey = <<<Eof
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBALecq3BwAI4YJZwhJ+snnDFj3lF3DMqNPorV6y5ZKXCiCMqj8OeO
mxk4YZW9aaV9ckl/zlAOI0mpB3pDT+Xlj2sCAwEAAQJAW6/aVD05qbsZHMvZuS2A
a5FpNNj0BDlf38hOtkhDzz/hkYb+EBYLLvldhgsD0OvRNy8yhz7EjaUqLCB0juIN
4QIhAMsJQ3xiJemnJ2pD65iRNCC/Kr7jtxbbBwa6ZFLjp12pAiEA54JCn41fF8GZ
90b9L5dtFQB2/yIcGX4Xo7bCvl8DaPMCIBgOZ+2T33QYtwXTOFXiVm/O1qy5ZFcT
6ng0m3BqwsjJAiEAqna/l7wAyP1E4U7kHqbhKxWsiTAUgLDXtzRbMNHFMQECIQCA
xlpXEPqnC3P8if0G9xHomqJ531rOJuzB8fNtRFmxnA==
-----END RSA PRIVATE KEY-----
Eof;
public function ping($salt, $isAnswer = false)
{
$str = '<PingResponse><message></message><responseCode>OK</responseCode><salt>%s</salt></PingResponse>';
$out = sprintf($str, $salt);
return $isAnswer ? $this->writeAnswer($out) : $out;
}
public function obtainTicket($salt, $isAnswer = false)
{
$ticketId = 1;
$str = "<ObtainTicketResponse><message></message><prolongationPeriod>%u</prolongationPeriod><responseCode>OK</responseCode><salt>%s</salt><ticketId>%d</ticketId><ticketProperties>licensee=%s\tlicenseType=0\t</ticketProperties></ObtainTicketResponse>";
$out = sprintf($str, $this->prolongationPeriod, $salt, $ticketId, $this->licensee);
return $isAnswer ? $this->writeAnswer($out) : $out;
}
public function prolongTicket($salt, $isAnswer = false)
{
$ticketId = 1;
$str = '<ProlongTicketResponse><message></message><responseCode>OK</responseCode><salt>%s</salt><ticketId>%d</ticketId></ProlongTicketResponse>';
$out = sprintf($str, $salt, $ticketId);
return $isAnswer ? $this->writeAnswer($out) : $out;
}
public function releaseTicket($salt, $isAnswer = false)
{
$str = '<ReleaseTicketResponse><message></message><responseCode>OK</responseCode><salt>%s</salt></ReleaseTicketResponse>';
$out = sprintf($str, $salt);
return $isAnswer ? $this->writeAnswer($out) : $out;
}
public function writeAnswer($str)
{
$signature = $this->sign($str);
$signatureHex = bin2hex($signature);
$out = sprintf("<!-- %s -->\n%s", $signatureHex, $str);
return $out;
}
private function sign($data)
{
if (empty ($data)) {
return null;
}
$pkeyid = openssl_get_privatekey($this->privateKey);
if (empty ($pkeyid)) {
return null;
}
$signature = '';
$verify = openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_MD5);
openssl_free_key($pkeyid);
return $verify ? $signature : null;
}
}
index.php 文件
代码如下: