【山大智云开发日志】seafdav分析(3)

2021SC@SDUSC

domain_controller.py主要由类SeafileDomainController构成

类的初始化,这些方法主要负责类的初始化与一些基本功能的判定

    def __init__(self, wsgidav_app, config):
        self.session_cls = seahub_db.init_db_session_class()

    def __repr__(self):
        return self.__class__.__name__

    def supports_http_digest_auth(self):
        # We have access to a plaintext password (or stored hash)
        return True

    def get_domain_realm(self, inputURL, environ):
        return "Seafile Authentication"

    def require_authentication(self, realmname, envrion):
        return True

    def isRealmUser(self, realmname, username, environ):
        return True

    def getRealmUserPassword(self, realmname, username, environ):
        """
        Not applicable to seafile.
        """
        return ""

方法basic_auth_user主要负责基本的用户身份验证

方法validateSecret()负责判断当前会话是否合法

方法enableTwoFactorAuth()负责启用两个因素进行身份验证,提高准确性。

def basic_auth_user(self, realmname, username, password, environ):
def validateSecret(session, password, ccnet_email):
def enableTwoFactorAuth(session, email):

nt_dc.py 

用法:从wsgidav.dc.nt_dc导入NTDomainController

domain_controller = NTDomainController(wsgidav_app, config)

地点:

domain_controller对象对应于"wsgidav.yaml"或 者"wsgidav.http_authenticator.HTTPAuthenticator''的输入。

+ preset_domain允许管理员指定一个要使用的域(而不是任何可能作为域\\用户中的user_name的一部分)。这只有在存在时才有用,是否需要对一个域进行身份验证,并且希望避免用户输入域名

+ preset_server允许管理员指定域控制器的NETBIOS名称,被使用(与前面的\\\\一起完成)。如果没有,它将寻找可信任的

本地主机上的域控制器。

这个类允许用户根据Windows NT域或本地计算机进行身份验证,要求NT或以上(2000、XP、2003等)。

nt_dc.py包含NTDomainController这一个类,类中的主要方法如下

def _get_domain_username(self, user_name):
def _get_domain_controller_name(self, domain):
def _auth_user(self, user_name, password, domain, server):

 def _get_domain_username(self, user_name):获得域的用户名

def _get_domain_controller_name(self, domain):获得得到域控制器的名字

def _is_user(self, user_name, domain, server): 用户的身份验证

其余方法是一些初始化以及一些判断的功能,相对来说较为容易。

分析pam_dc.py。允许用户对其进行身份验证的域控制器的实现,可插入身份验证模块(“PAM”)。

主要由类class PAMDomainController(BaseDomainController):构成。

类的主要函数

def get_domain_realm(self, path_info, environ):
def require_authentication(self, realm, environ):
def basic_auth_user(self, realm, user_name, password, environ):
def supports_http_digest_auth(self):

 def basic_auth_user 主要负责身份验证

    def basic_auth_user(self, realm, user_name, password, environ):
        pam = self.pam

        is_ok = pam.authenticate(
            user_name,
            password,
            service=self.pam_service,
            resetcreds=self.pam_resetcreds,
            encoding=self.pam_encoding,
        )
        if is_ok:
            _logger.debug("User '{}' logged on.".format(user_name))
            return True

        _logger.warning(
            "pam.authenticate('{}', '***', '{}') failed with code {}: {}".format(
                user_name, self.pam_service, pam.code, pam.reason
            )
        )
        return False

 seaf.utils.py结构

def _load_path_from_env(key, check=True):
def multi_tenancy_enabled():

 负责启用多租赁

def multi_tenancy_enabled():
    global _multi_tenancy_enabled
    if _multi_tenancy_enabled is None:
        _multi_tenancy_enabled = False
        try:
            cp = configparser.ConfigParser()
            cp.read(
                os.path.join(SEAFILE_CENTRAL_CONF_DIR if SEAFILE_CENTRAL_CONF_DIR else SEAFILE_CONF_DIR, 'seafile.conf'))
            if cp.has_option('general', 'multi_tenancy'):
                _multi_tenancy_enabled = cp.getboolean(
                    'general', 'multi_tenancy')
        except:
            _logger.exception('failed to read multi_tenancy')
    return _multi_tenancy_enabled

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值