mirror of https://github.com/dnomd343/kms-server
Dnomd343
3 years ago
commit
363a81bb99
10 changed files with 306 additions and 0 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,43 @@ |
|||||
|
<?php |
||||
|
|
||||
|
// 请求方式:showWinKeys() | showWinServerKeys() |
||||
|
|
||||
|
require_once 'kms-keys.php'; |
||||
|
|
||||
|
function showVersion($title, $content) { |
||||
|
$length = 0; |
||||
|
foreach ($content as $row) { // 获取最长的字符串长度 |
||||
|
$strLength = strlen(iconv('utf-8', 'gb2312', $row['name'])); |
||||
|
if ($length < $strLength) { |
||||
|
$length = $strLength; |
||||
|
} |
||||
|
} |
||||
|
$strLength = strlen(iconv('utf-8', 'gb2312', $title)); // 获取标题长度 |
||||
|
echo str_pad('', floor(($length - $strLength + 36) / 2), ' ') . $title . PHP_EOL; // 居中输出标题 |
||||
|
echo '┏' . str_pad('', $length + 34, '-') . '┓' . PHP_EOL; |
||||
|
foreach ($content as $row) { // 显示表格主体 |
||||
|
$strLength = strlen(iconv('utf-8', 'gb2312', $row['name'])); |
||||
|
echo '| ' . $row['name'] . str_pad('', $length - $strLength, ' ') . ' | '; |
||||
|
echo $row['key'] . ' |' . PHP_EOL; |
||||
|
} |
||||
|
echo '┗' . str_pad('', $length + 34, '-') . '┛' . PHP_EOL; |
||||
|
} |
||||
|
|
||||
|
function showKmsKeys($kmsKeys) { // 命令行显示KMS密钥 |
||||
|
foreach ($kmsKeys as $versionName => $versionContent) { |
||||
|
echo PHP_EOL; |
||||
|
showVersion($versionName, $versionContent); // 逐个显示表格 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function showWinKeys() { // 显示Windows的KMS密钥 |
||||
|
$kmsKeys = getKmsKeys('win'); |
||||
|
showKmsKeys($kmsKeys); |
||||
|
} |
||||
|
|
||||
|
function showWinServerKeys() { // 显示Windows Server的KMS密钥 |
||||
|
$kmsKeys = array_reverse(getKmsKeys('win-server')); |
||||
|
showKmsKeys($kmsKeys); |
||||
|
} |
||||
|
|
||||
|
?> |
@ -0,0 +1,40 @@ |
|||||
|
<?php |
||||
|
|
||||
|
function showHelp() { |
||||
|
global $webSite; |
||||
|
$length = strlen($webSite); |
||||
|
echo PHP_EOL; |
||||
|
echo str_pad('', floor(($length - 2) / 2), ' ') . 'Activation Command' . PHP_EOL; |
||||
|
echo '┏' . str_pad('', $length + 14, '-') . '┓' . PHP_EOL; |
||||
|
echo '| slmgr /upk' . str_pad('', $length + 3, ' ') . '|' . PHP_EOL; |
||||
|
echo '| slmgr /ipk {KMS_KEY}' . str_pad('', $length - 7, ' ') . '|' . PHP_EOL; |
||||
|
echo '| slmgr /skms ' . $webSite . ' |' . PHP_EOL; |
||||
|
echo '| slmgr /ato' . str_pad('', $length + 3, ' ') . '|' . PHP_EOL; |
||||
|
echo '| slmgr /dlv' . str_pad('', $length + 3, ' ') . '|' . PHP_EOL; |
||||
|
echo '┗' . str_pad('', $length + 14, '-') . '┛' . PHP_EOL; |
||||
|
echo PHP_EOL; |
||||
|
echo 'KMS_KEY -> http://' . $webSite . '/win' . PHP_EOL; |
||||
|
echo ' -> http://' . $webSite . '/win-server' . PHP_EOL; |
||||
|
echo PHP_EOL; |
||||
|
} |
||||
|
|
||||
|
function webHelp() { |
||||
|
global $webSite; |
||||
|
echo '<!DOCTYPE html><html><head><meta charset="utf-8">'; |
||||
|
echo '<meta name="viewport" content="width=device-width, initial-scale=1.0"><title>'; |
||||
|
echo 'Windows Activation'; |
||||
|
echo '</title><link rel="stylesheet" href="./style.css" /></head>'; |
||||
|
echo '<body><div><h2>Windows KMS Activation</h2><pre>'; |
||||
|
echo '<code> slmgr /upk' . PHP_EOL; |
||||
|
echo ' slmgr /ipk {KMS_KEY}' . PHP_EOL; |
||||
|
echo ' slmgr /skms ' . $webSite . PHP_EOL; |
||||
|
echo ' slmgr /ato' . PHP_EOL; |
||||
|
echo ' slmgr /dlv</code>'; |
||||
|
echo '</pre><p><a href="'; |
||||
|
echo 'http://' . $webSite . '/win'; |
||||
|
echo '">KMS_KEY (Windows)</a><br><a href="'; |
||||
|
echo 'http://' . $webSite . '/win-server'; |
||||
|
echo '">KMS_KEY (Windows Server)</a></p></div></body></html>'; |
||||
|
} |
||||
|
|
||||
|
?> |
Binary file not shown.
@ -0,0 +1,43 @@ |
|||||
|
<?php |
||||
|
|
||||
|
// 数据来源:kms-keys.db |
||||
|
// 请求方式:getKmsKeys($type) |
||||
|
// 返回格式: |
||||
|
// { |
||||
|
// "version_1": [ |
||||
|
// { |
||||
|
// "name": 版本名称 |
||||
|
// "key": KMS密钥 |
||||
|
// }, |
||||
|
// ··· |
||||
|
// ], |
||||
|
// "version_2": [ |
||||
|
// ··· |
||||
|
// ], |
||||
|
// ··· |
||||
|
// } |
||||
|
|
||||
|
class kmsDB extends SQLite3 { |
||||
|
function __construct() { |
||||
|
$this->open('kms-keys.db'); // KMS密钥数据库 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function getVersionName($type, $version_id) { // 获取对应版本的名称 |
||||
|
$db = new kmsDB; |
||||
|
$res = $db->query('SELECT * FROM `' . $type . '_version` WHERE version_id=' . $version_id . ';'); |
||||
|
return $res->fetchArray(SQLITE3_ASSOC)['version_name']; |
||||
|
} |
||||
|
|
||||
|
function getKmsKeys($type) { // 获取所有版本的KMS密钥 |
||||
|
$db = new kmsDB; |
||||
|
$res = $db->query('SELECT * FROM `' . $type . '`;'); |
||||
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)) { |
||||
|
$index = $row['version']; |
||||
|
unset($row['version']); |
||||
|
$data[getVersionName($type, $index)][] = $row; |
||||
|
} |
||||
|
return $data; |
||||
|
} |
||||
|
|
||||
|
?> |
@ -0,0 +1,34 @@ |
|||||
|
<?php |
||||
|
|
||||
|
// 请求方式:webWinKeys() | webWinServerKeys() |
||||
|
|
||||
|
require_once 'kms-keys.php'; |
||||
|
|
||||
|
function webKmsKeys($kmsKeys, $title) { // 网页显示KMS密钥 |
||||
|
echo '<!DOCTYPE html><html><head><meta charset="utf-8">'; |
||||
|
echo '<meta name="viewport" content="width=device-width, initial-scale=1.0"><title>'; |
||||
|
echo $title; |
||||
|
echo '</title><link rel="stylesheet" href="./style.css" /></head><body><div>'; |
||||
|
foreach ($kmsKeys as $versionName => $versionContent) { |
||||
|
echo '<h2>' . $versionName . '</h2>'; |
||||
|
echo '<table><thead><tr><th>操作系统</th><th>KMS密钥</th></tr></thead><tbody>'; |
||||
|
foreach ($versionContent as $row) { |
||||
|
echo '<tr><td>' . $row['name'] . '</td>'; |
||||
|
echo '<td>' . $row['key'] . '</td></tr>'; |
||||
|
} |
||||
|
echo '</tbody></table>'; |
||||
|
} |
||||
|
echo '</div></body></html>'; |
||||
|
} |
||||
|
|
||||
|
function webWinKeys() { // 网页显示Windows的KMS密钥 |
||||
|
$kmsKeys = getKmsKeys('win'); |
||||
|
webKmsKeys($kmsKeys, 'Windows KMS Keys'); |
||||
|
} |
||||
|
|
||||
|
function webWinServerKeys() { // 网页显示Windows Server的KMS密钥 |
||||
|
$kmsKeys = array_reverse(getKmsKeys('win-server')); |
||||
|
webKmsKeys($kmsKeys, 'Windows Server KMS Keys'); |
||||
|
} |
||||
|
|
||||
|
?> |
@ -0,0 +1,38 @@ |
|||||
|
<?php |
||||
|
|
||||
|
include 'kms-cli.php'; |
||||
|
include 'kms-web.php'; |
||||
|
include 'kms-help.php'; |
||||
|
|
||||
|
if (isset($_SERVER['HTTP_HOST'])) { |
||||
|
$webSite = $_SERVER['HTTP_HOST']; |
||||
|
} else { |
||||
|
$webSite = "{HOST}"; |
||||
|
} |
||||
|
|
||||
|
$url = $_SERVER['DOCUMENT_URI']; |
||||
|
|
||||
|
if ($url == '/') { |
||||
|
if ($_GET['cli'] == 'true') { |
||||
|
showHelp(); |
||||
|
} else { |
||||
|
webHelp(); |
||||
|
} |
||||
|
} |
||||
|
if ($url == '/win') { |
||||
|
if ($_GET['cli'] == 'true') { |
||||
|
showWinKeys(); |
||||
|
} else { |
||||
|
webWinKeys(); |
||||
|
} |
||||
|
} |
||||
|
if ($url == '/win-server') { |
||||
|
if ($_GET['cli'] == 'true') { |
||||
|
showWinServerKeys(); |
||||
|
} else { |
||||
|
webWinServerKeys(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
?> |
@ -0,0 +1,108 @@ |
|||||
|
@font-face { |
||||
|
font-family: Lato; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
src: url(./fonts/lato-normal.woff) format("woff") |
||||
|
} |
||||
|
|
||||
|
@font-face { |
||||
|
font-family: Lato; |
||||
|
font-style: normal; |
||||
|
font-weight: 600; |
||||
|
src: url(./fonts/lato-black.woff) format("woff") |
||||
|
} |
||||
|
|
||||
|
@font-face { |
||||
|
font-family: Roboto Mono; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
src: url(./fonts/RobotoMono-Regular.woff) format("woff"); |
||||
|
} |
||||
|
|
||||
|
body, |
||||
|
html { |
||||
|
margin: 0; |
||||
|
padding: 0; |
||||
|
color: rgba(0, 0, 0, .75); |
||||
|
font-size: 16px; |
||||
|
font-family: Lato, sans-serif; |
||||
|
font-variant-ligatures: common-ligatures; |
||||
|
line-height: 1.67; |
||||
|
-webkit-font-smoothing: antialiased; |
||||
|
-moz-osx-font-smoothing: grayscale |
||||
|
} |
||||
|
|
||||
|
div { |
||||
|
margin-bottom: 180px; |
||||
|
margin-left: auto; |
||||
|
margin-right: auto; |
||||
|
padding-left: 30px; |
||||
|
padding-right: 30px; |
||||
|
max-width: 750px |
||||
|
} |
||||
|
|
||||
|
h2 { |
||||
|
margin: 1.8em 0; |
||||
|
line-height: 1.33 |
||||
|
} |
||||
|
|
||||
|
h2:after { |
||||
|
content: ""; |
||||
|
display: block; |
||||
|
position: relative; |
||||
|
top: .33em; |
||||
|
border-bottom: 1px solid hsla(0, 0%, 50%, .33) |
||||
|
} |
||||
|
|
||||
|
a { |
||||
|
color: #0c93e4; |
||||
|
text-decoration: underline; |
||||
|
text-decoration-skip: ink; |
||||
|
background-color: transparent; |
||||
|
-webkit-text-decoration-skip: objects; |
||||
|
} |
||||
|
|
||||
|
a:focus, |
||||
|
a:hover { |
||||
|
text-decoration: none |
||||
|
} |
||||
|
|
||||
|
code, |
||||
|
pre { |
||||
|
font-family: Roboto Mono, monospace; |
||||
|
font-size: .85em |
||||
|
} |
||||
|
|
||||
|
pre * { |
||||
|
font-size: inherit |
||||
|
} |
||||
|
|
||||
|
pre>code { |
||||
|
background-color: rgba(0, 0, 0, .05); |
||||
|
display: block; |
||||
|
padding: .5em; |
||||
|
-webkit-text-size-adjust: none; |
||||
|
overflow-x: auto; |
||||
|
white-space: pre |
||||
|
} |
||||
|
|
||||
|
table { |
||||
|
background-color: transparent; |
||||
|
border-collapse: collapse; |
||||
|
border-spacing: 0 |
||||
|
} |
||||
|
|
||||
|
td, |
||||
|
th { |
||||
|
border-right: 1px solid #dcdcdc; |
||||
|
padding: 8px 12px |
||||
|
} |
||||
|
|
||||
|
td { |
||||
|
border-top: 1px solid #dcdcdc |
||||
|
} |
||||
|
|
||||
|
td:last-child, |
||||
|
th:last-child { |
||||
|
border-right: 0 |
||||
|
} |
Loading…
Reference in new issue