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

📄 navprofiles.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: navprofiles.py 3388 2006-03-14 12:32:56Z mortenv $# Authors: Morten Vold <morten.vold@itea.ntnu.no>#"""This module extends the database abstraction generated by forgetSQLfor the navprofiles database, and adds a lot of useful functionalityto the Account system."""import nav.dbfrom nav.db.forgotten.navprofiles import *import nav.pwhashimport md5class Account(nav.db.forgotten.navprofiles.Account):    def getGroups(self):        """        Return a list of Accountgroup objects this Account is a member of.        """        links = self.getChildren(Accountingroup)        return [Accountgroup(link.group) for link in links]    def getOrgIds(self):        """        Returns a list of organization ids this Account is associated with.        """        links = self.getChildren(Accountorg)        return [link.orgid for link in links]    def getImplicitOrgIds(self):        """        Returns a list of  organization ids this Account is associated        with,  including   implicit  organization  membersships.   The        hierarchy of  organizations from manage is  taken into account        here.        """        conn = nav.db.getConnection('webfront', 'manage')        # First, get the organizational units this user is an explicit        # member of.        orgList = self.getOrgIds()        if len(orgList) > 0:            # Then we need to trace organizational units below these in the            # hierarchy.            manageCursor = conn.cursor()            done = False            while not done:                orgString = ",".join(["'%s'" % org for org in orgList])                sql = \                    """                    SELECT DISTINCT orgid                    FROM org                    WHERE parent IN (%s)                    AND orgid NOT IN (%s);                    """ % (orgString, orgString)                manageCursor.execute(sql)                if manageCursor.rowcount < 1:                    done = True                else:                    orgList.extend([row[0] for row in manageCursor.fetchall()])        return orgList    def loadByLogin(cls, login):        """        Load and return an Account object by login name instead of id number.        """        result = Account.getAll(where="login=%s" % nav.db.escape(login))        if len(result) < 1:            raise NoSuchAccountError, login        else:            return result[0]    # Make sure loadByLogin becomes a class method    loadByLogin = classmethod(loadByLogin)    def authenticate(self, password):        """        Return True if the submitted authentication tokens are valid        for this Account.  In simpler terms; when password        authentication is used, this method compares the given        password with the one stored for this account and returns true        if they are equal.  If the stored password is blank, we        interpret this as: 'The user is not allowed to log in'        In the future, this could be extended to accept other types of        authentication tokens, such as personal certificates or        whatever.        """        if len(self.password.strip()) > 0:            stored_hash = nav.pwhash.Hash()            try:                stored_hash.set_hash(self.password)            except nav.pwhash.InvalidHashStringError:                # Probably an old style NAV password hash, get out                # of here and check it the old way                pass            else:                return stored_hash.verify(password)            # If the stored password looks like an old-style NAV MD5            # hash we compute the MD5 hash of the supplied password            # for comparison.            if self.password[:3] == 'md5':                hash = md5.md5(password)                return (hash.hexdigest() == self.password[3:])            else:                return (password == self.password)        else:            return False    def setPassword(self, password):        """Set the password of this account. The password parameter is        the plaintext password."""        if len(password.strip()) > 0:            hash = nav.pwhash.Hash(password=password)            self.password = str(hash)        else:            self.password = ""class Accountgroup(Accountgroup):    def getMembers(self):        """        Return a list of Account objects that are members of this        Accountgroup.        """        links = self.getChildren(Accountingroup)        return [Account(link.account) for link in links]def _customizeTables():    """    Customize the output from forgetSQL    """    nav.db.forgotten.navprofiles._Wrapper._dbModule = nav.db.driver    # Fix Privilege    Privilege._sqlFields['name'] = 'Privilege.privilegename'    Privilege._sqlFields['id'] = 'Privilege.privilegeid'    Accountgroupprivilege._sqlPrimary = ('accountgroup', 'privilege', 'target')    # Fix Accountingroup    if Accountingroup._sqlFields.has_key('groupid'):        del Accountingroup._sqlFields['groupid']    Accountingroup._sqlFields['group'] = 'groupid'    Accountingroup._userClasses['group'] = Accountgroup    Accountingroup._sqlPrimary = ('account', 'group')    # Fix Accountorg    Accountorg._sqlPrimary = ('account', 'orgid')    # Fix Accountnavbar    Accountnavbar._sqlPrimary  =('account', 'navbarlink')    # Fix Navbarlink    Navbarlink._sqlPrimary = ('id',)    # Fix Preference    Preference._sqlPrimary = ('account',)    # Fix Accountproperty    Accountproperty._sqlPrimary = ('account','property','value',)    # connection with database    def navprofilesCursor(dummy):        conn = nav.db.getConnection('default', 'navprofile')        return conn.cursor()    import forgotten.navprofiles    forgotten.navprofiles._Wrapper.cursor = classmethod(navprofilesCursor)class NoSuchAccountError(Exception):    def __init__(self, login):        self.login = login    def __str__(self):        return "No such account %s" % repr(self.login)##### Initialization #####_customizeTables()

⌨️ 快捷键说明

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