1 Star 1 Fork 0

Aaron_ou/ECC_servie

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
servie_main.py 6.75 KB
一键复制 编辑 原始数据 按行查看 历史
Aaron_ou 提交于 2017-06-04 08:55 . finish regist
# -*- coding:UTF-8 -*-
"""
这是servie端的主程序,包含web服务器,加/解密操作
"""
import tornado.web
import tornado.ioloop
import tornado.gen
import seccure
import urllib2
import urllib
import os
import dbopt
import time
import hashlib
settings = {
"static_path":os.path.join(os.path.dirname(__file__), "static"),
"cookie_secret": "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=",
"login_url": "/",
} #设置服务端静态文件地址,cookie_secret,默认地址等信息
class postor(): #用于与一次性口令端通信的类
def __init__(self,address,data): #初始化通信地址和数据
self.value = urllib.urlencode(data)
self.req = urllib2.Request(address,self.value)
def post_data(self):#提交通信数据
res = urllib2.urlopen(self.req)
return res
def post_m(address,data):#通信用函数,用于创建新进程进行通信,保障程序不被通信阻塞
post = postor(address,data)
post.post_data()
exit(0)
class LoginHandler(tornado.web.RequestHandler):#登录用句柄,为登录提供后台服务
@tornado.gen.engine
@tornado.web.asynchronous
def get(self):#在当前句柄中,得到get请求后的操作,后面的get函数同样效果
self.render("static/html/index.html")#操作内容,显示参数路径中的网页
print self.request.headers
@tornado.gen.engine
@tornado.web.asynchronous
def post(self):#在当前句柄中,得到post请求后的操作
username = self.get_argument("username")#获取post中的username数据
password = self.get_argument("password")#password数据
db = dbopt.db_class()#数据库操作初始化
cu = db.get_password(username)#获得数据库中该用户的密码
dict = cu.next()
print dict
if(password==dict['password']): #比对密码
self.set_secure_cookie("user",username,expires=time.time()+900) #设置cookie,以及周期
if (self.request.remote_ip == "::1"):#获取客户端ip
ip = "127.0.0.1"
else:
ip = self.request.remote_ip
s = "hello"
sig = seccure.sign(s, dbopt.test_pr_key)#签名
name = username
data = {"s": s, "sig": sig, "ip": ip, "name": name}#打包数据以及签名
post = postor("http://127.0.0.1:8088/", data)#发送给口令端
print data
res = post.post_data()#发送给口令端
string = res.read()#获取口令端返回的一次性密钥
print string
self.set_secure_cookie("passstring",urllib.quote(string.decode("base64")))
self.redirect("/check")#进入认证一次性密钥网页
else:
self.redirect("/")
class CheckHandler(tornado.web.RequestHandler):#认证一次性密钥的网页后台句柄
def get_current_user(self):
return self.get_secure_cookie("user")
@tornado.gen.engine
@tornado.web.asynchronous#设置异步防止因为数据库问题卡死
@tornado.web.authenticated#设置必须登录才能访问
def get(self):
if(self.current_user!=None):
print self.current_user
self.render("static/html/check.html",user=self.current_user,ip=self.request.remote_ip)#获得当前用户,显示认证页面
@tornado.gen.engine
@tornado.web.asynchronous
def post(self):
chiper = self.get_argument("password")#获得用户提交的一次性口令
print chiper
if(chiper == seccure.decrypt(urllib.unquote(self.get_secure_cookie("passstring")),dbopt.test_pr_key)):#比对双方获得的一次性口令,这里用服务器私钥解密了一次性口令
self.set_secure_cookie("c_user",self.current_user+chiper,expires=time.time()+900)#设置当前正确登录的用户cookie
self.redirect("/manage")#成功则进入管理页面
else:
self.redirect("/")#失败就返回登录页面
class ManageHandler(tornado.web.RequestHandler):#管理页面后台句柄
def get_current_user(self):
return self.get_secure_cookie("c_user")
@tornado.gen.engine
@tornado.web.asynchronous
@tornado.web.authenticated
def get(self):
if(self.current_user==self.get_secure_cookie("user")+seccure.decrypt(urllib.unquote(self.get_secure_cookie("passstring")),dbopt.test_pr_key)):#验证当前用户
db = dbopt.db_class()
power = db.get_uesr_power(self.get_secure_cookie("user"))
cu = power.next()#获取当前用户的权限
print cu
if(cu["power"] == "SM"):#根据不同权限显示不同页面
self.render("static/html/manage.html", user=self.get_secure_cookie("user"),user_list=db.get_all_user_power())
else:
self.render("static/html/seccess.html", user=self.get_secure_cookie("user"))
@tornado.gen.engine
@tornado.web.asynchronous
@tornado.web.authenticated
def post(self):
db = dbopt.db_class()
username = self.get_argument("t_user")
power = self.get_argument("power")
if(power == "del"):#删除操作
po = db.get_uesr_power(username)
dict = po.next()
if(dict["power"]!="SM"):
ret = db.del_user(username)
else:
ret = 0
if(ret == 1):
self.write("<h1>删除成功</h1>")
self.redirect("/manage")
else:
self.write("<h1>删除失败</h1>")
self.redirect("/manage")
elif(power == "M" or power == "SM"):#修改权限操作
db.change_power(username,power)
self.write("<h1>操作完成</h1>")
self.redirect("/manage")
else:
self.write(" <h1>操作码错误</h1>")
self.redirect("/manage")
class AddHandler(tornado.web.RequestHandler):#注册用户时用于接受用户的账号密码
@tornado.gen.engine
@tornado.web.asynchronous
def post(self):
username = self.get_argument("username")
password = self.get_argument("password")
power = self.get_argument("power")
db = dbopt.db_class()
res = db.add_user(username,password,power)
print res
self.finish()
application = tornado.web.Application([(r"/",LoginHandler),
(r'/check',CheckHandler),
(r'/manage', ManageHandler),
(r'/add',AddHandler),
],**settings)#网站后台设置
if __name__ == '__main__':
application.listen(8081)#开启端口监听
tornado.ioloop.IOLoop.instance().start()#开启监听循环
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/Aaron_ou/ecc_servie.git
git@gitee.com:Aaron_ou/ecc_servie.git
Aaron_ou
ecc_servie
ECC_servie
master

搜索帮助