[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [XEND] Xen API Auth Manager for handling sessions



# HG changeset patch
# User acnt2@xxxxxxxxxxxxxxxxxxxxxxxx
# Node ID 48c5a79c4fbf7ef1472cbf2f95bd2f4f42f3c9fc
# Parent  5fe8e9ebcf5c1da30e0da4e7f66a81de37406dc1
[XEND] Xen API Auth Manager for handling sessions

Signed-off-by: Alastair Tse <atse@xxxxxxxxxxxxx>
---
 tools/python/xen/xend/XendAuthSessions.py |   86 ++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+)

diff -r 5fe8e9ebcf5c -r 48c5a79c4fbf tools/python/xen/xend/XendAuthSessions.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/python/xen/xend/XendAuthSessions.py Thu Oct 05 17:29:19 2006 +0100
@@ -0,0 +1,86 @@
+#============================================================================
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#============================================================================
+# Copyright (C) 2006 XenSource Ltd.
+#============================================================================
+
+import time
+
+from xen.xend import uuid
+from xen.xend.XendError import *
+from xen.xend.XendLogging import log
+
+class XendAuthSessions:
+    """Keeps track of Xen API Login Sessions. (Example only)"""
+
+    def __init__(self):
+        self.sessions = {}
+        self.users = {'atse': 'passwd'}
+
+    def init(self):
+        pass
+
+    def login_with_password(self, username, password):
+        if self.is_authorized(username, password):
+            new_session = uuid.createString()
+            self.sessions[new_session] = (username, time.time())
+            return new_session
+
+        raise XendError("Login failed")
+
+    def logout(self, session):
+        if self.is_session_valid(session):
+            del self.sessions[session]
+
+    def is_session_valid(self, session):
+        log.debug('isSessionValid: %s' % session)
+        if type(session) == type(str()):
+            return (session in self.sessions)
+        return False
+    
+    def is_authorized(self, username, password):
+        if username in self.users and self.users[username] == password:
+            return True
+        return False
+
+    def get_user(self, session):
+        try:
+            return self.sessions[session][0]
+        except (KeyError, IndexError):
+            return None
+
+
+def instance():
+    """Singleton constructor. Use this instead of the class constructor.
+    """
+    global inst
+    try:
+        inst
+    except:
+        inst = XendAuthSessions()
+        inst.init()
+    return inst
+
+# Handy Authentication Decorators
+# -------------------------------
+def session_required(func):
+    def check_session(self, session, *args, **kwargs):
+        if instance().is_session_valid(session):
+            return func(self, session, *args, **kwargs)
+        else:
+            return {'Status': 'Failure',
+                    'ErrorDescription': XEND_ERROR_SESSION_INVALID}
+    return check_session
+
+

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.