⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auth.py

📁 Network Administration Visualized 网络管理可视化源码
💻 PY
字号:
# -*- coding: ISO8859-1 -*-## Copyright 2003, 2004 Norwegian University of Science and Technology## This file is part of Network Administration Visualized (NAV)## NAV is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## NAV 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 General Public License for more details.## You should have received a copy of the GNU General Public License# along with NAV; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA### $Id: auth.py 3548 2006-07-17 11:35:38Z mortenv $# Authors: Morten Vold <morten.vold@itea.ntnu.no>#"""Contains web authentication functionality for NAV."""import base64, urllibimport sys, os, reimport navimport loggingfrom nav import dbfrom nav.db import navprofilesfrom nav.web.preferences import Preferences, Linkfrom nav.db.navprofiles import Account, Accountnavbar, Navbarlinklogger = logging.getLogger("nav.web.auth")def checkAuthorization(user, uri):    """    Check whether the given user object is authorized to access the    specified URI)    """    # First make sure we are connected to the navprofile database.    conn = db.getConnection('navprofile', 'navprofile')    cursor = conn.cursor()    # When the connection has been made, we make use of the privilege    # system to discover whether the user has access to this uri or    # not.    return nav.auth.hasPrivilege(user, 'web_access', uri)def redirectToLogin(req):    """    Takes the supplied request and redirects it to the NAV login page.    """    from nav import web    web.redirect(req, '/index/login?origin=%s' % urllib.quote(req.unparsed_uri), temporary=True)def _find_user_preferences(user, req):    if not hasattr(user, "preferences"):        # if user preferences is not loaded, it's time to do so        user.preferences = Preferences()        conn = nav.db.getConnection('navprofile', 'navprofile')        prefs = user.getChildren(Accountnavbar)        if not prefs:            # if user has no preferences set, use default preferences            default = Account(0)            prefs = default.getChildren(Accountnavbar)        for pref in prefs:            link = Navbarlink(pref.navbarlink)            if pref.positions.count('navbar'): # does 'positions'-string contain 'navbar'                user.preferences.navbar.append(Link(link.name, link.uri))            if pref.positions.count('qlink1'): # does 'positions'-string contain 'qlink1'                user.preferences.qlink1.append(Link(link.name, link.uri))            if pref.positions.count('qlink2'): # does 'positions'-string contain 'qlink2'                user.preferences.qlink2.append(Link(link.name, link.uri))        if req:            req.session.save() # remember this to next timedef authenticate(req):    """    Authenticate and authorize the client that sent this request.  If    the authenticated (or unauthenticated) user is found to be not    authorized to request this URI, we redirect him/her to the login    page.    """    if not req.session.has_key('user'):        # If no Account object is registered with this session, we        # load and register the default Account (which is almost a        # synonym for Anonymous user)        conn = db.getConnection('navprofile', 'navprofile')        cursor = conn.cursor()        req.session['user'] = Account(0)    user = req.session['user']    logger.debug("Request for %s authenticated as user=%s", req.unparsed_uri,                 user.login)    _find_user_preferences(user, req)        if not checkAuthorization(user, req.unparsed_uri):        logger.warn("User %s denied access to %s", user.login,                    req.unparsed_uri)        redirectToLogin(req)    else:        if not user.id == 0:            os.environ['REMOTE_USER'] = user.login        elif os.environ.has_key('REMOTE_USER'):            del os.environ['REMOTE_USER']        return True# For fun, we give the authenticate function an alternative name.authorize = authenticate

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -