async def nodes_create_view(request): user = request['user'] nodes = await SS_Node.objects.execute(SS_Node.select()) return render('admin_panel/node/create.html', request, user=user, nodes=nodes)
async def get(self, request): user = request['user'] nodes = await SS_Node.objects.execute(SS_Node.select()) return render('admin_panel/node/index.html', request, user=user, nodes=nodes)
async def traffic_log(request): user = request['user'] total = await User_Traffic_Log.objects.count( User_Traffic_Log.select().where(User_Traffic_Log.user == user)) page, per_page, offset = Pagination.get_page_args(request) traffic_logs = await User_Traffic_Log.objects.execute( User_Traffic_Log.select().where( User_Traffic_Log.user == user).order_by( User_Traffic_Log.id.desc()).paginate(page, per_page)) ids = [log.id for log in traffic_logs] logs_query = ( User_Traffic_Log.select().where(User_Traffic_Log.id << ids).order_by( User_Traffic_Log.id.desc())) nodes_query = SS_Node.select() traffic_logs = await User_Traffic_Log.objects.prefetch( logs_query, nodes_query) Pagination._per_page = 20 pagination = Pagination(request, total=total, record_name='traffic_logs') return render('user_panel/traffic_log.html', request, user=user, traffic_logs=traffic_logs, pagination=pagination)
async def get(self, request, user_id): user = request['user'] user_detail = await User.objects.get(User.id == user_id) return render('admin_panel/user/edit.html', request, user=user, user_detail=user_detail)
async def nodes(request): user = request['user'] nodes = await SS_Node.objects.execute( SS_Node .select() .where((SS_Node.node_group == user.node_group) | (SS_Node.node_group == 0)) ) return render('user_panel/nodes.html', request, user=user, nodes=nodes)
async def get(self, request): user = request['user'] configs = {} for config in await SP_Config.objects.execute(SP_Config.select()): configs[config.key] = config.value return render('admin_panel/config.html', request, user=user, configs=configs)
async def index_view(request): user = request['user'] analytics = { 'total_user': await User.objects.count(User.select()), 'checkin_user': await User.objects.count(User.select().where(User.last_check_in_time > 0)), 'traffic_usage': tools.flow_auto_show(await User.objects.scalar( User.select(fn.Sum(User.u + User.d)))), 'online_user': await User.objects.count(User.select().where(User.t > 3600)), 'total_node': await SS_Node.objects.count(SS_Node.select()), } return render('admin_panel/index.html', request, user=user, **analytics)
async def users_view(request): user = request['user'] total = await User.objects.count(User.select()) page, per_page, offset = Pagination.get_page_args(request) users = await User.objects.execute(User.select().order_by( User.id.asc()).paginate(page, per_page)) Pagination._per_page = 20 pagination = Pagination(request, total=total, record_name='users') return render('admin_panel/user/index.html', request, user=user, users=users, pagination=pagination)
async def node_detail(request, node_id): user = request['user'] node = await SS_Node.objects.get(SS_Node.id == node_id) if user.user_class < node.node_class or (user.node_group != node.node_group and node.node_group != 0): return json({}) ss_info = { 'server': node.server, 'server_port': user.port, 'password': user.passwd, 'method': user.method, 'protocol': user.protocol, 'obfs': user.obfs } if user.obfs in ('http_post', 'http_simple'): ss_info['obfs_param'] = user.obfs_param if user.obfs in ('http_simple', 'http_post', 'random_head', 'tls1.2_ticket_auth') \ or user.protocol in ('verify_deflate', 'auth_chain_a', 'auth_sha1_v4', 'auth_aes128_md5', 'auth_aes128_sha1'): ss_url = '%s:%s:%s:%s:%s:%s/?obfsparam=%s&remarks=%s' % ( ss_info['server'], ss_info['server_port'], user.protocol.replace('_compatible', ''), ss_info['method'], user.obfs.replace('_compatible', ''), tools.base64_url_encode( ss_info['password']), tools.base64_url_encode( user.obfs_param), tools.base64_url_encode(node.name)) ssqr_s_n = 'ssr://' + tools.base64_url_encode(ss_url) ss_url = '%s:%s:%s:%s@%s:%s/%s' % ( user.obfs.replace('_compatible', ''), user.protocol.replace('_compatible', ''), ss_info['method'], ss_info['password'], ss_info['server'], ss_info['server_port'], tools.base64_encode(user.obfs_param)) ssqr_s = "ss://" + tools.base64_encode(ss_url) ssqr = ssqr_s else: ss_url = '%s:%s:%s:%s:%s:%s/?obfsparam=%s&remarks=%s' % ( ss_info['server'], ss_info['server_port'], user.protocol.replace('_compatible', ''), ss_info['method'], user.obfs.replace('_compatible', ''), tools.base64_url_encode(ss_info['password']), tools.base64_url_encode(user.obfs_param or ''), tools.base64_url_encode(node.name)) ssqr_s_n = "ssr://" + tools.base64_encode(ss_url) ss_url = '%s:%s:%s:%s@%s:%s/%s' % ( user.obfs.replace('_compatible', ''), user.protocol.replace('_compatible', ''), ss_info['method'], ss_info['password'], ss_info['server'], ss_info['server_port'], tools.base64_encode(user.obfs_param or '')) ssqr_s = "ss://" + tools.base64_encode(ss_url) ss_url = '%s:%s@%s:%s' % (ss_info['method'], ss_info['password'], ss_info['server'], ss_info['server_port']) ssqr = "ss://" + tools.base64_encode(ss_url) surge_base = '/'.join( request.url.split('/')[:3]) + '/downloads/ProxyBase.conf' surge_proxy = '#!PROXY-OVERRIDE:ProxyBase.conf\n' surge_proxy += '[Proxy]\n' surge_proxy += 'Proxy = custom,%s,%s,%s,%s,%s/downloads/SSEncrypt.module' % ( ss_info['server'], ss_info['server_port'], ss_info['method'], ss_info['password'], '/'.join(request.url.split('/')[:3])) data = { 'ss_info': ss_info, 'ss_info_show': ujson.dumps(ss_info, indent=4), 'ssqr': ssqr, 'ssqr_s_n': ssqr_s_n, 'ssqr_s': ssqr_s, 'surge_base': surge_base, 'surge_proxy': surge_proxy } return render('user_panel/node_detail.html', request, user=user, **data)
async def index(request): user = request['user'] return render('user_panel/index.html', request, user=user, checkin_time=request.app.config.CHECKIN_TIME)
async def invite(request): user = request['user'] return render('user_panel/invite.html', request, user=user)
async def edit(request): user = request['user'] return render('user_panel/edit.html', request, user=user)
async def token(request): return render('auth/token.html', request)
async def profile(request): user = request['user'] return render('user_panel/profile.html', request, user=user)
async def nodes_edit_view(request, node_id): user = request['user'] node = await SS_Node.objects.get(SS_Node.id == node_id) return render('admin_panel/node/edit.html', request, user=user, node=node)
async def get(self, request): return render('auth/register.html', request)
async def reset(request): return render('auth/reset.html', request)
async def get(self, request): return render('auth/login.html', request)