Files
Jack a24f2e23c6 Update to 7.25.0
1. Added Mail Marketing Automation trigger tasks
2. Added Mail Marketing Groups Import, Export, Merge
3. Added Mail Marketing Subscribers to support paste import
4. Added Mail Marketing Template Import Export Duplicate
5. Added Mail server add timed automatic reply
6. Added HTTPS Protection function for Website (disables automatic HTTP to HTTPS redirection when enabled)
7. Optimize Website Interface Button Integration
8. Optimize the response speed of WP Toolkit interface
2025-03-13 17:52:26 +08:00

425 lines
16 KiB
Python

#coding: utf-8
#-------------------------------------------------------------------
# aaPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2019 aaPanel(www.aapanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: hwliang <hwl@aapanel.com>
#-------------------------------------------------------------------
#------------------------------
# AUTH验证接口
#------------------------------
import public,time,json,os,requests
try:
from BTPanel import cache, session
except:
pass
class panelAuth:
__product_list_path = 'data/product_list.pl'
__product_bay_path = 'data/product_bay.pl'
__product_id = '100000011'
__official_url = '{}'.format(public.OfficialApiBase())
# __official_url = 'http://dev.aapanel.com'
def create_serverid(self, get):
try:
return public.get_userinfo()
except:
return public.return_msg_gettext(False, public.lang("Please login with account first"))
def create_plugin_other_order(self,get):
pdata = self.create_serverid(get)
pdata['pid'] = get.pid
pdata['cycle'] = get.cycle
p_url = public.GetConfigValue('home') + '/api/Pluginother/create_order'
if get.type == '1':
pdata['renew'] = 1
p_url = public.GetConfigValue('home') + '/api/Pluginother/renew_order'
return json.loads(public.httpPost(p_url,pdata))
def get_order_stat(self,get):
pdata = self.create_serverid(get)
pdata['order_id'] = get.oid
p_url = public.GetConfigValue('home') + '/api/Pluginother/order_stat'
if get.type == '1': p_url = public.GetConfigValue('home') + '/api/Pluginother/re_order_stat'
return json.loads(public.httpPost(p_url,pdata))
def check_serverid(self,get):
if get.serverid != self.create_serverid(get): return False
return True
def get_plugin_price(self, get):
try:
userPath = 'data/userInfo.json'
if not 'pluginName' in get and not 'product_id' in get: return public.return_msg_gettext(False, public.lang("Parameter ERROR!"))
if not os.path.exists(userPath): return public.return_msg_gettext(False, public.lang("Please login with account first"))
params = {}
if not hasattr(get,'product_id'):
params['product_id'] = self.get_plugin_info(get.pluginName)['id']
else:
params['product_id'] = get.product_id
data = self.send_cloud('{}/api/product/pricesV3'.format(self.__official_url), params)
if not data:
return public.return_msg_gettext(False, public.lang("Please log in to your aaPanel account on the panel first!"))
if not data['success']:
return public.return_msg_gettext(False,data['msg'])
# if len(data['res']) == 6:
# return data['res'][3:]
return data['res']
except:
del(session['get_product_list'])
return public.return_msg_gettext(False,'Syncing information, please try again!\n {}',(public.get_error_info(),))
def get_plugin_info(self,pluginName):
data = self.get_business_plugin(None)
if not data: return None
for d in data:
if d['name'] == pluginName: return d
return None
def get_plugin_list(self,get):
try:
if not session.get('get_product_bay') or not os.path.exists(self.__product_bay_path):
data = self.send_cloud('get_order_list_byuser', {})
if data: public.writeFile(self.__product_bay_path,json.dumps(data))
session['get_product_bay'] = True
data = json.loads(public.readFile(self.__product_bay_path))
return data
except: return None
def get_buy_code(self,get):
cycle = getattr(get,'cycle',1)
params = {}
params['cycle'] = cycle
params['cycle_unit'] = get.cycle_unit
params['product_id'] = get.pid
params['src'] = 2
params['trigger_entry'] = get.source
params['pay_channel'] = 2
# 0.管理后台生成 1.Ping++ 2.Stripe 3.Paypal 10.抵扣券
if hasattr(get, 'pay_channel'):
params['pay_channel'] = get.pay_channel
params['charge_type'] = get.charge_type
env_info = public.fetch_env_info()
params['environment_info'] = json.dumps(env_info)
params['server_id'] = env_info['install_code']
# 多机购买 数量
if not hasattr(get, 'num'):
return public.return_msg_gettext(False, public.lang("parameter error: num"))
params['num'] = get.num
# 添加购买来源
# params['source'] = get.source
data = self.send_cloud('{}/api/order/product/create'.format(self.__official_url), params)
if not data['success']:
return public.return_msg_gettext(False, data['res'])
return data['res']
def get_stripe_session_id(self,get):
params = {}
if hasattr(get, 'order_no'):
params['order_no'] = get.order_no
if hasattr(get, 'order_id'):
params['order_id'] = get.order_id
if hasattr(get, 'subscribe'):
params['subscribe'] = get.subscribe
if not params.get('order_no', None) and not params.get('order_id', None):
return public.return_msg_gettext(False, public.lang("parameter error"))
data = self.send_cloud('{}/api/order/product/pay'.format(self.__official_url), params)
session['focre_cloud'] = True
return data['res']
# paypal支付
def get_paypal_session_id(self,get):
params = {}
if hasattr(get, 'oid'):
params['oid'] = get.oid
if not params.get('oid', None):
return public.return_msg_gettext(False, public.lang("parameter error"))
data = self.send_cloud('{}/api/paypal/create_order'.format(self.__official_url), params)
session['focre_cloud'] = True
data2 = {
"status": data.get("success", False),
"res": data.get("res", ""),
"nonce": data.get("nonce", 0),
}
return data2
# paypal 支付确认
def check_paypal_status(self,get):
params = {}
if hasattr(get, 'paypal_order_id'):
params['paypal_order_id'] = get.paypal_order_id
if not params.get('paypal_order_id', None):
return public.return_msg_gettext(False, public.lang("parameter error"))
data = self.send_cloud('{}/api/paypal/capture_order'.format(self.__official_url), params)
# session['focre_cloud'] = True
data2 = {
"status": data.get("success", False),
"res": data.get("res", ""),
"nonce": data.get("nonce", 0),
}
return data2
def check_pay_status(self,get):
params = {}
params['id'] = get.id
data = self.send_cloud('check_product_pays', params)
if not data: return public.return_msg_gettext(False, public.lang("Fail to connect to the server!"))
if data['status'] == True:
self.flush_pay_status(get)
if 'get_product_bay' in session: del(session['get_product_bay'])
return data
def flush_pay_status(self,get):
if 'get_product_bay' in session: del(session['get_product_bay'])
data = self.get_plugin_list(get)
if not data: return public.return_msg_gettext(False, public.lang("Fail to connect to the server!"))
return public.return_msg_gettext(True, public.lang("Flush status success"))
def get_renew_code(self):
pass
def check_renew_code(self):
pass
def get_business_plugin(self,get):
try:
if not session.get('get_product_list') or not os.path.exists(self.__product_list_path):
data = self.send_cloud('{}/api/product/chargeProducts'.format(self.__official_url), {})
if data['success']: public.writeFile(self.__product_list_path,json.dumps(data['res']))
session['get_product_list'] = True
data = json.loads(public.readFile(self.__product_list_path))
return data
except: return None
def get_ad_list(self):
pass
def check_plugin_end(self):
pass
def get_re_order_status_plugin(self,get):
params = {}
params['pid'] = getattr(get,'pid',0)
data = self.send_cloud('get_re_order_status', params)
if not data: return public.return_msg_gettext(False, public.lang("Fail to connect to the server!"))
if data['status'] == True:
self.flush_pay_status(get)
if 'get_product_bay' in session: del(session['get_product_bay'])
return data
def get_voucher_plugin(self,get):
params = {}
params['product_id'] = getattr(get,'pid',0)
params['status'] = '0'
data = self.send_cloud('{}/api/user/productVouchers'.format(self.__official_url), params)
if not data: return []
return data['res']
def create_order_voucher_plugin(self,get):
cycle = getattr(get,'cycle','1')
params = {}
params['cycle'] = cycle
params['cycle_unit'] = get.cycle_unit
params['coupon_id'] = get.coupon_id
params['src'] = 2
params['pay_channel'] = 10
params['charge_type'] = get.charge_type
env_info = public.fetch_env_info()
params['environment_info'] = json.dumps(env_info)
params['server_id'] = env_info['install_code']
data = self.send_cloud('{}/api/order/product/create'.format(self.__official_url), params)
session['focre_cloud'] = True
if data['success']:
return public.return_msg_gettext(True, public.lang("Activate successfully"))
return public.return_msg_gettext(False, public.lang("Activate failed"))
def send_cloud(self,cloudURL,params):
try:
userInfo = self.create_serverid(None)
if 'token' not in userInfo:
return None
url_headers = {"Content-Type": "application/json",
"authorization": "bt {}".format(userInfo['token'])
}
resp = requests.post(cloudURL, params =params, headers=url_headers)
resp = resp.json()
if not resp['res']: return None
return resp
except: return public.get_error_info()
def send_cloud_pro(self,module,params):
try:
cloudURL = '{}/api/order/product/'.format(self.__official_url)
userInfo = self.create_serverid(None)
params['os'] = 'Linux'
if 'status' in userInfo:
params['server_id'] = ''
else:
params['server_id'] = userInfo['server_id']
url_headers = {"authorization": "bt {}".format(userInfo['token'])}
resp = requests.post(cloudURL, params=params, headers=url_headers)
resp = resp.json()['res']
if not resp: return None
return resp
except: return None
def get_voucher(self,get):
params = {}
params['product_id'] = self.__product_id
params['status'] = '0'
data = self.send_cloud_pro('get_voucher', params)
return data
def get_order_status(self,get):
params = {}
data = self.send_cloud_pro('get_order_status', params)
return data
def get_product_discount_by(self,get):
params = {}
data = self.send_cloud_pro('get_product_discount_by', params)
return data
def get_re_order_status(self,get):
params = {}
data = self.send_cloud_pro('get_re_order_status', params)
return data
def create_order_voucher(self,get):
code = getattr(get,'code','1')
params = {}
params['code'] = code
data = self.send_cloud_pro('create_order_voucher', params)
return data
def create_order(self,get):
cycle = getattr(get,'cycle','1')
params = {}
params['cycle'] = cycle
params['cycle'] = 'month'
params['product_id'] = 100000012
params['src'] = 2
params['pay_channel'] = 2
params['charge_type'] = 1
params['environment_info'] = json.dumps(public.fetch_env_info())
data = self.send_cloud_pro('create', params)
return data
# def fetch_env_info(self):
# userInfo = self.create_serverid(None)
# return json.dumps({'ip': public.GetLocalIp(),
# 'is_ipv6': 0,
# 'os': 'Centos7',
# 'mac': self.get_mac_address(),
# 'hdid': public.fetch_disk_SN(),
# 'ramid': '16G',
# 'cpuid': public.fetch_cpu_ID(),
# 'server_name': self.get_hostname(),
# 'install_code': userInfo['server_id']
# })
def get_cpuname(self):
return public.ExecShell("cat /proc/cpuinfo|grep 'model name'|cut -d : -f2")[0].strip()
def get_product_auth(self,get):
params = {}
params['page'] = get.page if 'page' in get else 1
params['pageSize'] = get.pageSize if 'pageSize' in get else 15
data = self.send_cloud('{}/api/user/productAuthorizes'.format(self.__official_url), params)
if not data:
return []
if not data['success']: return []
data = data['res']
# return [i for i in data['list'] if i['status'] != 'activated' and get.pid == i['product_id']]
res = list()
for i in data['list']:
if i['status'] != 'activated' and str(get.pid) == str(i['product_id']):
res.append(i)
return res
def auth_activate(self,get):
params = {}
params['serial_no'] = get.serial_no
params['environment_info'] = json.dumps(public.fetch_env_info())
data = self.send_cloud('{}/api/authorize/product/activate'.format(self.__official_url), params)
if not data['success']: return public.return_msg_gettext(False, public.lang("Activate Failed"))
session['focre_cloud'] = True
return public.return_msg_gettext(True, public.lang("Activate successfully"))
def renew_product_auth(self,get):
params = {}
params['serial_no'] = get.serial_no
params['pay_channel'] = get.pay_channel
params['cycle'] = get.cycle
params['cycle_unit'] = get.cycle_unit
params['src'] = 2
params['trigger_entry'] = get.source
params['environment_info'] = json.dumps(public.fetch_env_info())
if hasattr(get,'coupon_id') and get.pay_channel == '10':
params['coupon_id'] = get.coupon_id
data = self.send_cloud('{}/api/authorize/product/renew'.format(self.__official_url), params)
if not data['success']:
data['res'] = 'Invalid authorize OR authorize not found!'
return data
session['focre_cloud'] = True
# 使用抵扣券续费直接返回续费结果
if get.pay_channel == '10':
if not data['success']:
return public.return_msg_gettext(False, public.lang("Renew Failed"))
return public.return_msg_gettext(True, public.lang("Renew successfully"))
# 使用支付续费返回stripe的请求数据
return data['res']
def free_trial(self,get):
"""
每个账号有一次免费试用专业版15天的机会
:return:
"""
params = {}
params['environment_info'] = json.dumps(public.fetch_env_info())
data = self.send_cloud('{}/api/product/obtainProfessionalMemberFree'.format(self.__official_url), params)
session['focre_cloud'] = True
# 使用抵扣券续费直接返回续费结果
if not data['success']:
return public.return_msg_gettext(False, public.lang("Apply Failed"))
return public.return_msg_gettext(True, public.lang("Apply successfully"))
# 获取专业版特权信息 或插件信息?
def get_plugin_remarks(self, get):
if not hasattr(get, 'product_id'):
return public.return_msg_gettext(False, public.lang("product_id Parameter ERROR!"))
product_id = get.product_id
ikey = 'plugin_remarks' + product_id
if ikey in session:
return session.get(ikey)
url = '{}/api/panel/get_advantages/{}'.format(self.__official_url, product_id)
data = requests.get(url).json()
# public.print_log(" ###############%%%%%%%%%%%%%%%%%%%% {}".format(data))
if not data: return public.returnMsg(False, public.lang("Failed to connect to the server!"))
session[ikey] = data
return data