Enhance authentication process in MySecurityPolicy and improve logging in auth_from_rpc

1 parent dc1fddd3
from inspect import signature
import logging
# from opensipkd.tools import get_params
......@@ -55,15 +56,21 @@ def get_user(request):
from pyramid.authentication import AuthTktCookieHelper
from pyramid.authorization import ACLHelper, Authenticated, Everyone
from .tools.api import auth_from_rpc
class MySecurityPolicy:
def __init__(self, secret):
self.helper = AuthTktCookieHelper(secret)
def identity(self, request):
log.debug("MySecurityPolicy.identity")
identity = self.helper.identify(request)
if identity is None:
try:
user = auth_from_rpc(request)
identity = {'userid': user.id}
except Exception as e:
log.warning("Failed to authenticate from RPC: %s", e)
return None
userid = identity['userid']
......@@ -82,7 +89,6 @@ class MySecurityPolicy:
def permits(self, request, context, permission):
identity = request.identity
principals = set([Everyone])
if identity is not None:
principals.add(Authenticated)
principals.add(identity['userid'])
......
from opensipkd.base import get_params
from opensipkd.base.models import (DBSession, User, GroupPermission, UserDeviceModel)
from opensipkd.tools import (
......@@ -36,6 +35,7 @@ def auth_from(request, field=None):
header = json_rpc_header(http_userid, user.api_key, time_stamp)
if header['signature'] != env['HTTP_SIGNATURE']:
log.warning(f"Server:{header['signature']}, Client:{env['HTTP_SIGNATURE']}")
raise JsonRpcInvalidLoginError
return user
......@@ -149,5 +149,6 @@ def update_token(user):
return dict(token=user.security_code)
def config_pars_rpc_url(params, method=None):
from opensipkd.base import get_params
values = get_params(params)
return pars_rpc_url(values, method)
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!