【山大智云项目日志】(十二)源码分析之seahub-extra与seahub源码对比及总结

2021SC@SDUSC

这一次是对前三次seahub-extra文件夹中源码分析的一个小总结同时还有部分分析内容会继续展开。
一学期的源码分析我们应该找到两处代码的不同之处,分析其改动对原seafile的影响。对于相同之处先暂时不予以深究,毕竟涉及网络编程的内容我们也不熟悉。
由于当时的分工,我和另一位同学分别负责了seahub-frontend和seahub的源码分析,同时对于seahub-extra的源码分析任务,和seahub放在一起分析效果会更好,seahub-extra中的源码是上一届学长从seahub中取出来的几个文件夹,并对其进行部分修改来实现了山大智云的部分功能。

seahub-extra文件夹从seahub中“迁移”过来的文件夹

adfs_auth
customization
django_cas_ng
krb5_auth
organizations
plan
search
sysadmin_extar
还有一个它自己的设置文件
seahub-extra-settings

1.adfs_auth
seahub-extra中的这个文件夹下的代码与seahub-adfs_auth相比没有变化。它提供Web单点登录(SSO),以在使用单个帐户的同时对多个Web应用程序进行用户身份验证,这使最终用户在登录基于云的应用程序等时变得更加轻松。
示意图:
在这里插入图片描述
值得一提的是,在adfs认证中,使用了SAML2.0协议,用于简化在登录到主服务之后,再进行主站下任何服务的时候,都不必再去做身份认证输入口令了。这部分协议总体比较复杂,这里不必细究(看不懂了~.~)先了解它的作用吧。

def is_authorized(self, attributes, attribute_mapping):#以允许基于SAML属性的自定义授权策略
 def clean_user_main_attribute(self, main_attribute):#在使用用户主属性(通常为“username”)获取或创建用户对象之前,对其执行任何清理。返回已清理的属性。默认情况下,返回未更改的属性
 def configure_user(self, user, attributes, attribute_mapping):在创建后配置用户,默认情况下返回更新的用户,并返回属性更新的用户
 

2.django_cas_ng代码对比
第一点是seahub-extra中添加了国际化语言包的支持,去掉了migrations的相关内容。
再者就是在utils.py中的部分代码有差异:

在函数get_services_url中为CAS生成应用程序Django服务URL

seahub-extra中:

def get_service_url(request, redirect_to=None):
    if hasattr(django_settings, 'CAS_ROOT_PROXIED_AS'):
        middle_additive = '/' if \
            not (request.path.startswith('/') or django_settings.CAS_ROOT_PROXIED_AS.endswith('/')) else ''
        service = django_settings.CAS_ROOT_PROXIED_AS + middle_additive + request.path

seahub中:

def get_service_url(request, redirect_to=None):
 
    if hasattr(django_settings, 'CAS_ROOT_PROXIED_AS'):
        service = django_settings.CAS_ROOT_PROXIED_AS + '/' + request.path

主要是对URL的生成进行了调整。除此之外和seahub中的代码一模一样,猜测可能与改进后的山大智云服务有关。URL根据需要发生变化。

3.krb5_auth中的代码与原版代码对比也没有变化。
对于Kerberos认证我还是有一定的了解的。在信息安全导论这门课中专门讲过了这个认证的原理。
第四版Kerberos认证图示:
在这里插入图片描述
认证的步骤再做一下总结:
1.客户端向AS发送请求,告诉服务器自己的身份,以及要请求的TGS
2.AS返回给用户一条需要用户口令才能解开的消息,更具体来说是用户口令生成的密钥来解开这条消息,然后用户获取到了自己和TGS的共享密钥,同时还有访问TGS服务器的Ticket
3.用户将获得的Ticket发送到TGS,TGS是使用共享密钥解开消息同时对用户身份做了认证,得知了用户想要访问的服务
4.TGS将访问特定服务的Ticket返回给客户端
5.客户端使用获得的Ticket对特定服务器发送请求,请求服务
6.服务端响应服务

这里还涉及了很多Ticket的生存周期以及时间戳,上述步骤没有具体体现。
相关代码:

    def authenticate(self, remote_user):
        if not remote_user:
            return
        user = None
        username = self.clean_username(remote_user)

        user = self.get_user(username)
        if not user:
            if self.create_unknown_user:
                user = User.objects.create_user(email=username,
                                                is_active=True)
            else:
                pass

        return user

4.organization文件夹
在groups.py中,seahub-extra中删减了OrgAdminSearchGroup和OrgAdminSearchUser类:对于山大智云来说,不需要组织管理员搜索组和用户搜索。
这样看下来,seahub-extra将关于用户搜索的功能全下了包括对应服务的url也在settings中删了。

5.plan该文件夹是seahub-extra中额外多出来的。内容很熟悉,是对seahub中settings文件内容的复制,主要是对用户、org的云盘空间大小,以及群组数量做的限制:


DEFAULT_PLAN = {
    'Free': {
        'num_of_groups': 3,
        'group_members': 6,
        },
    'A': {
        'num_of_groups': 8,
        'group_members': 16,
        },
    'B': {
        'num_of_groups': -1,    # no limit
        'group_members': -1,    # no limit
        },
}
DEFAULT_ORG_PLAN = {
    'free': {
        'desc': 'Free',
        'storage': 1,           # GB
        'traffic': 5,           # GB/month
        'groups': -1,           # no limit
        'members': -1,
        'pricing': 0,
        },
    ORG_PLAN_PRO: {
        'desc': 'Professional',
        'storage': 100,           # GB
        'traffic': 100,           # GB/month
        'groups': -1,           # no limit
        'members': 10,
        'pricing': 25,          # $/month
        },
}

6.search文件夹
与原版代码相比,只有一行变化,在seahub-extra中views.py文件中多了一行。
启用缩略图:

response_dict = {
 'enable_thumbnail': ENABLE_THUMBNAIL,
}

到这对于seahub-extra的分析就告一段落。extra中主要集中了认证系统,由于seafile代码系统太多庞大,有时候无法准确实现代码跳转,这也给代码分析工作带来了困难。因此在后续与小组成员交流时可以讨论针对此问题的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值