|
|
# -*- coding: utf-8 -*-
|
|
|
"""系统信息"""
|
|
|
import logging
|
|
|
import uuid
|
|
|
import time
|
|
|
import re
|
|
|
import os
|
|
|
import json
|
|
|
import hashlib
|
|
|
|
|
|
import datetime
|
|
|
|
|
|
from website import errors
|
|
|
from website import settings
|
|
|
from website.handler import APIHandler, WebHandler, authenticated, operation_log, permission
|
|
|
from website.util import sysinfo, rsa
|
|
|
|
|
|
|
|
|
class VersionHandler(APIHandler):
|
|
|
@authenticated
|
|
|
# @permission([100014, 100016])
|
|
|
def post(self):
|
|
|
self.finish()
|
|
|
|
|
|
class IdentifycodeHandler(APIHandler):
|
|
|
@authenticated
|
|
|
# @permission([100014, 100015])
|
|
|
# @operation_log("资产管理中心", "系统激活", "查询", "查询本地识别码", "查询本地识别码")
|
|
|
def post(self):
|
|
|
code = sysinfo.get_identify_code()
|
|
|
|
|
|
self.finish({"result": code})
|
|
|
|
|
|
class LicenseUploadHandler(APIHandler):
|
|
|
@authenticated
|
|
|
# @permission([100014, 100015])
|
|
|
# @operation_log("资产管理中心", "系统激活", "导入", "上传license文件", "上传license文件")
|
|
|
def post(self):
|
|
|
file_metas = self.request.files.get('file', None)
|
|
|
if not file_metas:
|
|
|
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "请上传文件")
|
|
|
|
|
|
file = file_metas[0]
|
|
|
filename = file.filename
|
|
|
punctuation = """!"#$%&'()*+,/:;<=>?@[\]^`{|}~ """
|
|
|
regex = re.compile('[%s]' % re.escape(punctuation))
|
|
|
filename = regex.sub("", filename.replace('..', ''))
|
|
|
file_size = len(file.body)
|
|
|
|
|
|
if file_size > 10 * 1024 * 1024:
|
|
|
raise errors.HTTPAPIError(errors.ERROR_METHOD_NOT_ALLOWED, 'Exceed 10M size limit')
|
|
|
|
|
|
md5_str = hashlib.md5(file.body).hexdigest()
|
|
|
|
|
|
filepath = settings.rsa_license_file
|
|
|
|
|
|
try:
|
|
|
body = file['body']
|
|
|
public_key = rsa.load_pub_key_string(open(settings.rsa_public_file).read().strip('\n').encode('utf-8'))
|
|
|
plaintext = rsa.decrypt(public_key, body)
|
|
|
plaintext_json = json.loads(self.tostr(plaintext))
|
|
|
|
|
|
syscode = plaintext_json["syscode"]
|
|
|
expireat = plaintext_json["expireat"]
|
|
|
|
|
|
current_syscode = sysinfo.get_identify_code()
|
|
|
if syscode != current_syscode:
|
|
|
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "license激活失败,请重新激活")
|
|
|
|
|
|
row = self.db_app.get("select id from license where syscode=%s", syscode)
|
|
|
if row:
|
|
|
self.db_app.update(
|
|
|
"update license set expireat=%s where syscode=%s", str(expireat), syscode
|
|
|
)
|
|
|
else:
|
|
|
self.db_app.insert(
|
|
|
"insert into license(syscode, expireat) values(%s, %s)",
|
|
|
syscode, expireat
|
|
|
)
|
|
|
self.r_app.set("system:license", json.dumps({"syscode":syscode, "expireat":expireat}))
|
|
|
|
|
|
with open(filepath, 'wb') as f:
|
|
|
f.write(file['body'])
|
|
|
|
|
|
logging.info(plaintext_json)
|
|
|
except Exception as e:
|
|
|
logging.info(e)
|
|
|
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "license激活失败,请重新激活")
|
|
|
|
|
|
self.finish()
|
|
|
|
|
|
class ActivateInfoHandler(APIHandler):
|
|
|
@authenticated
|
|
|
# @permission([100014, 100015])
|
|
|
# @operation_log("资产管理中心", "系统激活", "查询", "查询系统激活信息", "查询系统激活信息")
|
|
|
def post(self):
|
|
|
license_str = ""
|
|
|
activate_at = ""
|
|
|
expire_at = ""
|
|
|
date_remain = 0
|
|
|
|
|
|
row = self.db_app.get(
|
|
|
"select create_at, expireat from license limit 1"
|
|
|
)
|
|
|
if row:
|
|
|
license_str = open(settings.rsa_license_file, 'r').read()
|
|
|
activate_at = str(row["create_at"])
|
|
|
expire_at = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(row["expireat"])))
|
|
|
now = datetime.datetime.now()
|
|
|
delta = (datetime.datetime.fromtimestamp(int(row["expireat"])).date() - now.date()).days
|
|
|
date_remain = delta if delta > 0 else 0
|
|
|
|
|
|
data = {
|
|
|
"system": settings.system_info[settings.system_type]["name"],
|
|
|
"license": license_str,
|
|
|
"activate_at": activate_at,
|
|
|
"expire_at": expire_at,
|
|
|
"date_remain": date_remain
|
|
|
}
|
|
|
|
|
|
self.finish(data)
|
|
|
|
|
|
|
|
|
class InfoHandler(APIHandler):
|
|
|
def post(self):
|
|
|
|
|
|
self.finish()
|