[Kimchi-devel] [PATCH] auth enhancement: expire the session when the request periodic access
Shu Ming
shuming at linux.vnet.ibm.com
Mon Mar 3 15:24:37 UTC 2014
2014/3/3 22:54, shaohef at linux.vnet.ibm.com:
> From: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
>
> Now UI will periodic access the vms and host.
> The will never make the session be timeout.
> This patch fix this problem.
> Now the UI can set "User-Agent" as "kimchi-robot" when it want to
> periodic access the vms and host.
> If the "User-Agent" starts with "kimchi-robot" for a long time, kimchi
> will expire the session.
So after the session is expired, will the front UI application continue
to access the vms and host periodically? I am afraid that will cause
bunch of authentication failure messages in the back end.
>
> A UI patch will send later.
>
> Signed-off-by: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
> ---
> src/kimchi/auth.py | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/src/kimchi/auth.py b/src/kimchi/auth.py
> index f8ccea1..b1c08db 100644
> --- a/src/kimchi/auth.py
> +++ b/src/kimchi/auth.py
> @@ -22,6 +22,7 @@ import cherrypy
> import grp
> import PAM
> import re
> +import time
>
>
> from kimchi import template
> @@ -32,6 +33,7 @@ from kimchi.utils import run_command
> USER_ID = 'userid'
> USER_GROUPS = 'groups'
> USER_SUDO = 'sudo'
> +REFRESH = 'robot-refresh'
>
>
> def debug(msg):
> @@ -131,6 +133,13 @@ def check_auth_session():
> cherrypy.session.release_lock()
> if session is not None:
> debug("Session authenticated for user %s" % session)
> + userAgent = cherrypy.request.headers.get('User-Agent')
> + if userAgent.startswith("kimchi-robot"):
> + if (time.time() - cherrypy.session[REFRESH] >
> + cherrypy.session.timeout * 60):
> + cherrypy.lib.sessions.expire()
> + else:
> + cherrypy.session[REFRESH] = time.time()
> return True
>
> debug("Session not found")
> @@ -172,6 +181,7 @@ def login(userid, password):
> cherrypy.session[USER_ID] = userid
> cherrypy.session[USER_GROUPS] = user.get_groups()
> cherrypy.session[USER_SUDO] = user.has_sudo()
> + cherrypy.session[REFRESH] = time.time()
> cherrypy.session.release_lock()
> return user.get_user()
>
> @@ -179,6 +189,7 @@ def login(userid, password):
> def logout():
> cherrypy.session.acquire_lock()
> cherrypy.session[USER_ID] = None
> + cherrypy.session[REFRESH] = 0
> cherrypy.session.release_lock()
> cherrypy.lib.sessions.expire()
>
More information about the Kimchi-devel
mailing list