bugfix
This commit is contained in:
parent
f25eee433c
commit
94bd3ccb1c
@ -6,7 +6,22 @@ import aiohttp_session
|
|||||||
from aiohttp_session import get_session, session_middleware
|
from aiohttp_session import get_session, session_middleware
|
||||||
from aiohttp_session.cookie_storage import EncryptedCookieStorage
|
from aiohttp_session.cookie_storage import EncryptedCookieStorage
|
||||||
|
|
||||||
|
from appPublic.jsonConfig import getConfig
|
||||||
|
from appPublic.rsa import RSA
|
||||||
class AuthAPI:
|
class AuthAPI:
|
||||||
|
|
||||||
|
def getPrivateKey(self):
|
||||||
|
if not hasattr(self,'rsaEngine'):
|
||||||
|
self.rsaEngine = RSA()
|
||||||
|
self.conf = getConfig()
|
||||||
|
fname = self.conf.website.rsakey.privatekey
|
||||||
|
self.privatekey = self.rsaEngine.read_privatekey(fname)
|
||||||
|
return self.privatekey
|
||||||
|
|
||||||
|
def rsaDecode(self,cdata):
|
||||||
|
self.getPrivateKey()
|
||||||
|
return self.rsaEngine.decode(self.privatekey,cdata)
|
||||||
|
|
||||||
def setupAuth(self,app):
|
def setupAuth(self,app):
|
||||||
# setup session middleware in aiohttp fashion
|
# setup session middleware in aiohttp fashion
|
||||||
storage = EncryptedCookieStorage(urandom(32))
|
storage = EncryptedCookieStorage(urandom(32))
|
||||||
@ -21,7 +36,7 @@ class AuthAPI:
|
|||||||
# setup aiohttp_auth.auth middleware in aiohttp fashion
|
# setup aiohttp_auth.auth middleware in aiohttp fashion
|
||||||
auth.setup(app, policy)
|
auth.setup(app, policy)
|
||||||
app.middlewares.append(self.checkAuth)
|
app.middlewares.append(self.checkAuth)
|
||||||
app.router.add_route('POST','/login',self.login)
|
# app.router.add_route('POST','/login',self.login)
|
||||||
app.router.add_route('GET', '/logout', self.logout)
|
app.router.add_route('GET', '/logout', self.logout)
|
||||||
|
|
||||||
async def login(self,request):
|
async def login(self,request):
|
||||||
@ -29,14 +44,45 @@ class AuthAPI:
|
|||||||
user_id = params.get('user',None)
|
user_id = params.get('user',None)
|
||||||
password = params.get('password',None)
|
password = params.get('password',None)
|
||||||
from_path = params.get('from_path',None)
|
from_path = params.get('from_path',None)
|
||||||
if self.checkUserPassword(user_id,password):
|
if await self.checkUserPassword(user_id,password):
|
||||||
await auth.remember(request, user)
|
await auth.remember(request, user)
|
||||||
return web.HpptFound(from_path)
|
return web.HpptFound(from_path)
|
||||||
raise web.HTTPUnauthorized()
|
raise web.HTTPUnauthorized()
|
||||||
|
|
||||||
|
async def checkLogin(self,request):
|
||||||
|
"""
|
||||||
|
authorization header has the format:
|
||||||
|
login_method:user_id:auth_code
|
||||||
|
"""
|
||||||
|
authinfo = request.headers.get('authorization')
|
||||||
|
if authinfo is None:
|
||||||
|
print('header not include "authorization" info', request.headers)
|
||||||
|
raise web.HTTPUnauthorized()
|
||||||
|
|
||||||
|
authdata = self.rsaDecode(authinfo)
|
||||||
|
# print('authdata=',authdata)
|
||||||
|
alist = authdata.split('::')
|
||||||
|
if len(alist) != 3:
|
||||||
|
print('auth data format error')
|
||||||
|
raise web.HTTPUnauthorized()
|
||||||
|
|
||||||
|
login_method=alist[0]
|
||||||
|
user_id = alist[1]
|
||||||
|
password = alist[2]
|
||||||
|
if login_method == 'password':
|
||||||
|
if await self.checkUserPassword(user_id,password):
|
||||||
|
await auth.remember(request,user_id)
|
||||||
|
print('auth success,',user_id, password)
|
||||||
|
return user_id
|
||||||
|
print('auth failed')
|
||||||
|
raise web.HTTPUnauthorized()
|
||||||
|
else:
|
||||||
|
print('auth method unrecognized------------------------')
|
||||||
|
raise web.HTTPUnauthorized()
|
||||||
|
|
||||||
async def logout(self,request):
|
async def logout(self,request):
|
||||||
await auth.forget(request)
|
await auth.forget(request)
|
||||||
return web.REsponse(body='OK'.encode('utf-8'))
|
return web.Response(body='OK'.encode('utf-8'))
|
||||||
|
|
||||||
@web.middleware
|
@web.middleware
|
||||||
async def checkAuth(self,request,handler):
|
async def checkAuth(self,request,handler):
|
||||||
@ -46,8 +92,10 @@ class AuthAPI:
|
|||||||
return await handler(request)
|
return await handler(request)
|
||||||
user = await auth.get_auth(request)
|
user = await auth.get_auth(request)
|
||||||
if user is None:
|
if user is None:
|
||||||
raise web.HTTPFound(f'/login_form?from_path={path}')
|
print('-----------auth.get_auth() return None--------------')
|
||||||
user_perms = await self.getUserPermission(user)
|
user = await self.checkLogin(request)
|
||||||
|
#raise web.HTTPFound(f'/login_form?from_path={path}')
|
||||||
|
user_perms = await self.getUserPermissions(user)
|
||||||
need_perm = await self.getPermissionNeed(path)
|
need_perm = await self.getPermissionNeed(path)
|
||||||
if need_perm in user_perms:
|
if need_perm in user_perms:
|
||||||
return await handler(request)
|
return await handler(request)
|
||||||
|
Loading…
Reference in New Issue
Block a user