增加web查询
This commit is contained in:
parent
3b32ab42b2
commit
5d94686ac3
3 changed files with 169 additions and 0 deletions
78
shadowsocks/api.py
Normal file
78
shadowsocks/api.py
Normal file
|
@ -0,0 +1,78 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
import config
|
||||
import logging
|
||||
import cymysql
|
||||
import re
|
||||
from flask import Flask,request,session,redirect,render_template
|
||||
if config.LOG_ENABLE:
|
||||
logging.basicConfig(
|
||||
filename=config.LOG_FILE,
|
||||
level=config.LOG_LEVEL,
|
||||
datefmt='%Y-%m-%d %H:%M:%S',
|
||||
format='%(asctime)s %(levelname)s %(filename)s[%(lineno)d] %(message)s'
|
||||
)
|
||||
app = Flask(__name__)
|
||||
app.secret_key = 'asdjhlasdlkjahskldhakjshd782934879123987*(Z&*(&98237498'
|
||||
|
||||
def get_mysql_conn():
|
||||
conn = cymysql.connect(host=config.MYSQL_HOST, port=config.MYSQL_PORT, user=config.MYSQL_USER,
|
||||
passwd=config.MYSQL_PASS, db=config.MYSQL_DB, charset='utf8')
|
||||
return conn;
|
||||
def validateEmail(email):
|
||||
if len(email) > 4:
|
||||
if re.match("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", email) != None:
|
||||
return True
|
||||
return False
|
||||
@app.route("/")
|
||||
def index():
|
||||
if 'uid' in session:
|
||||
conn = get_mysql_conn()
|
||||
cur = conn.cursor(cursor=cymysql.cursors.DictCursor)
|
||||
cur.execute("SELECT * FROM user WHERE id=%s",(session['uid']))
|
||||
userinfo = cur.fetchone()
|
||||
cur.close()
|
||||
conn.close()
|
||||
return render_template("index.html",user=userinfo)
|
||||
return redirect("/login")
|
||||
@app.route("/login",methods=['POST', 'GET'])
|
||||
def login():
|
||||
if request.method == 'POST':
|
||||
email = request.form["username"]
|
||||
password = request.form["password"]
|
||||
if(validateEmail(email)):
|
||||
conn = get_mysql_conn()
|
||||
cur = conn.cursor(cursor=cymysql.cursors.DictCursor)
|
||||
cur.execute("SELECT * FROM user WHERE u_email=%s",(email))
|
||||
userinfo = cur.fetchone()
|
||||
cur.close()
|
||||
conn.close()
|
||||
if(userinfo == None or userinfo["u_pwd"] != password):
|
||||
return render_template("login.html", errormsg=u"用户不存在或者密码错误")
|
||||
else:
|
||||
session['uid']=userinfo['id']
|
||||
return redirect("/")
|
||||
else:
|
||||
return render_template("login.html", errormsg=u"邮件格式错误")
|
||||
else:
|
||||
return render_template("login.html")
|
||||
@app.route('/logout')
|
||||
def logout():
|
||||
session.pop('uid', None)
|
||||
return redirect("/login")
|
||||
@app.route('/update_ss_pwd',methods=['POST'])
|
||||
def update_ss_pwd():
|
||||
if 'uid' in session:
|
||||
ss_pwd = request.form["ss_pwd"]
|
||||
conn = get_mysql_conn()
|
||||
cur = conn.cursor(cursor=cymysql.cursors.DictCursor)
|
||||
update_sql = "update user set ss_pwd=%s where id=%s"
|
||||
cur.execute(update_sql,(ss_pwd,session['uid']))
|
||||
cur.close()
|
||||
conn.close()
|
||||
return u"修改成功"
|
||||
else:
|
||||
return u"修改失败"
|
||||
if __name__ == "__main__":
|
||||
app.debug=True
|
||||
app.run()
|
33
shadowsocks/templates/index.html
Normal file
33
shadowsocks/templates/index.html
Normal file
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-cmn-Hans">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
|
||||
<title>SS查询系统</title>
|
||||
<link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/0.4.3/weui.min.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
function show_b(b) {
|
||||
if(b/1024/1024/1024>1){
|
||||
document.write((b/1024/1024/1024).toFixed(2)+"GB")
|
||||
}else if(b/1024/1024>1){
|
||||
document.write((b/1024/1024).toFixed(2)+"MB")
|
||||
}else{
|
||||
document.write((b/1024).toFixed(2)+"KB")
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<div class="container" id="container">
|
||||
<div class="hd">
|
||||
<h1 class="page_title">Welcome {{ user.u_nickname }}</h1>
|
||||
<h3> IP:107.182.191.61</h3>
|
||||
<h3> 加密方式:rc4-md5</h3>
|
||||
<h3> 端口:{{ user.ss_port }}</h3>
|
||||
<h3> 密码:{{ user.ss_pwd }}</h3>
|
||||
<h3> 已用流量:<script>show_b('{{ user.b_usage}}')</script></h3>
|
||||
<h3> 总流量:<script>show_b('{{ user.b_max}}')</script></h3>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
58
shadowsocks/templates/login.html
Normal file
58
shadowsocks/templates/login.html
Normal file
|
@ -0,0 +1,58 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-cmn-Hans">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
|
||||
<title>SS查询系统</title>
|
||||
<link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/0.4.3/weui.min.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container" id="container">
|
||||
<div class="cell">
|
||||
<form id="loginfrom" action="/login" method="post">
|
||||
<div class="hd">
|
||||
<div style="height: 120px;"></div>
|
||||
<div class="weui_cells_title">SS查询系统</div>
|
||||
<div class="weui_cells weui_cells_form">
|
||||
<div class="weui_cell">
|
||||
<div class="weui_cell_hd"><label class="weui_label">邮件</label></div>
|
||||
<div class="weui_cell_bd weui_cell_primary">
|
||||
<input class="weui_input" name="username" type="text" placeholder="请输入邮件">
|
||||
</div>
|
||||
</div>
|
||||
<div class="weui_cell">
|
||||
<div class="weui_cell_hd"><label class="weui_label">邮件</label></div>
|
||||
<div class="weui_cell_bd weui_cell_primary">
|
||||
<input class="weui_input" name="password" type="password" placeholder="请输入邮件">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weui_btn_area">
|
||||
<a class="weui_btn weui_btn_primary" onclick="javascript:formsubmit()">登录</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
function formsubmit() {
|
||||
document.getElementById("loginfrom").submit()
|
||||
}
|
||||
function close_error_dialog() {
|
||||
document.getElementById("error_dialog").style.display="none"
|
||||
}
|
||||
</script>
|
||||
{% if errormsg %}
|
||||
<div class="weui_dialog_alert" id="error_dialog">
|
||||
<div class="weui_mask"></div>
|
||||
<div class="weui_dialog">
|
||||
<div class="weui_dialog_hd"><strong class="weui_dialog_title">错误信息</strong></div>
|
||||
<div class="weui_dialog_bd">{{ errormsg }}</div>
|
||||
<div class="weui_dialog_ft">
|
||||
<a href='javascript:close_error_dialog();' class="weui_btn_dialog primary">确定</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue