server.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. require('dotenv').config();
  2. const express = require('express');
  3. const mongoose = require('mongoose');
  4. const cors = require('cors');
  5. const crypto = require('crypto');
  6. const moment = require('moment');
  7. const License = require('./models/License');
  8. const app = express();
  9. // Middleware
  10. app.use(cors());
  11. app.use(express.json());
  12. // Connect to MongoDB
  13. mongoose.connect(process.env.MONGODB_URI)
  14. .then(() => console.log('Connected to MongoDB'))
  15. .catch(err => console.error('MongoDB connection error:', err));
  16. // Activation endpoint
  17. app.post('/activate', async (req, res) => {
  18. try {
  19. const { license_key, machine_code, activation_date } = req.body;
  20. // Validate input
  21. if (!license_key || !machine_code) {
  22. return res.status(400).json({
  23. success: false,
  24. message: '许可证密钥和机器码是必需的'
  25. });
  26. }
  27. // Check if license already exists
  28. const existingLicense = await License.findOne({ licenseKey: license_key });
  29. if (existingLicense) {
  30. if (existingLicense.machineCode !== machine_code) {
  31. return res.status(400).json({
  32. success: false,
  33. message: '许可证已在其他设备上激活'
  34. });
  35. }
  36. if (!existingLicense.isActive) {
  37. return res.status(400).json({
  38. success: false,
  39. message: '许可证已被禁用'
  40. });
  41. }
  42. }
  43. // Create new license or update existing one
  44. const expiryDate = moment().add(1, 'year').toDate(); // 设置一年有效期
  45. const licenseData = {
  46. licenseKey: license_key,
  47. machineCode: machine_code,
  48. activationDate: activation_date || new Date(),
  49. expiryDate: expiryDate,
  50. isActive: true
  51. };
  52. if (existingLicense) {
  53. await License.updateOne({ licenseKey: license_key }, licenseData);
  54. } else {
  55. await License.create(licenseData);
  56. }
  57. return res.json({
  58. success: true,
  59. message: '激活成功',
  60. expiry_date: expiryDate.toISOString().split('T')[0]
  61. });
  62. } catch (error) {
  63. console.error('激活错误:', error);
  64. return res.status(500).json({
  65. success: false,
  66. message: '服务器错误'
  67. });
  68. }
  69. });
  70. // Verification endpoint
  71. app.post('/verify', async (req, res) => {
  72. try {
  73. const { license_key, machine_code } = req.body;
  74. // Validate input
  75. if (!license_key || !machine_code) {
  76. return res.status(400).json({
  77. success: false,
  78. message: '许可证密钥和机器码是必需的'
  79. });
  80. }
  81. // Find license
  82. const license = await License.findOne({ licenseKey: license_key });
  83. if (!license) {
  84. return res.status(404).json({
  85. success: false,
  86. message: '许可证不存在'
  87. });
  88. }
  89. // Check machine code
  90. if (license.machineCode !== machine_code) {
  91. return res.status(400).json({
  92. success: false,
  93. message: '硬件信息不匹配'
  94. });
  95. }
  96. // Check if license is active
  97. if (!license.isActive) {
  98. return res.status(400).json({
  99. success: false,
  100. message: '许可证已被禁用'
  101. });
  102. }
  103. // Check expiry
  104. if (moment().isAfter(license.expiryDate)) {
  105. return res.status(400).json({
  106. success: false,
  107. message: '许可证已过期'
  108. });
  109. }
  110. return res.json({
  111. success: true,
  112. message: '许可证有效',
  113. expiry_date: license.expiryDate.toISOString().split('T')[0]
  114. });
  115. } catch (error) {
  116. console.error('验证错误:', error);
  117. return res.status(500).json({
  118. success: false,
  119. message: '服务器错误'
  120. });
  121. }
  122. });
  123. const PORT = process.env.PORT || 3000;
  124. app.listen(PORT, () => {
  125. console.log(`Server is running on port ${PORT}`);
  126. });