Files
yakpanel-core/class/panelAuth.py
2026-04-07 02:04:22 +05:30

425 lines
16 KiB
Python

#coding: utf-8
#-------------------------------------------------------------------
# YakPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2019 YakPanel(www.yakpanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: hwliang <hwl@yakpanel.com>
#-------------------------------------------------------------------
#------------------------------
# AUTH验证接口
#------------------------------
import public,time,json,os,requests
try:
from YakPanel 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.yakpanel.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 YakPanel 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