CAS对接Open edX

Open edX的第三方登录是作为一个django app存在的,配置过程如下。

LMS配置过程

##安装CAS的Client、Mapper
进入edXapp环境,下载CAS的Client、Mapper

CAS Client安装目录在下面的地址

Mapper的安装目录在下面的地址

开启edX特性支持CAS登陆

修改/edx/app/edxapp/lms.env.json文件如下

修改/edx/app/edxapp/edx-platform/lms/envs/common.py如下

同时

修改/edx/app/edxapp/edx-platform/lms/envs/aws.py如下

修改/edx/app/edxapp/edx-platform/lms/urls.py如下

增加一个nextpage属性,当用户通过CAS登陆后自动跳转到dashboard。

修改/edx/app/edxapp/edx-platform/common/djangoapps/external_auth/views.pydjango_cas.views改为cas.view

修改CAS Client配置文件

在cas目录中找到backends.py

默认的Client并没有返回附加的属性,寻找下面的函数

在其返回值增加用户附加属性。也就是代码中的tree。修改如下
原版函数结尾:

改为下面这样:


寻找下面的片段

改为

分析:
username, authentication_response = _verify(ticket, service)这一行是用户认证后返回的用户名和附加属性的XML树。
对接逻辑如下(try之后的部分):
尝试根据用户名获取用户的model。当用户不存在时候,如果设置了自动创建用户。那么就自动根据用户名创建一个用户的model,如果定义了属性解析器、那么根据CAS认证返回的XML树解析用户的属性,对应更改user的model。之后保存model并注册用户。

问题:
1. 是否应该让用户每次通过CAS登陆后都去解析用户的属性来保持edX中用户的资料和CAS系统提供的一致?
2. user和profile的关系是什么?
3. 用户属性的更改是通过更改user还是更改profile?

更改Mapper使其能正确解析CAS Server返回的XML树

修改/edx/app/edxapp/venvs/edxapp/lib/python2.7/site-packages/mitx_cas_mapper/__init__.py

打印源码中的attr结果如下

所以分析、CAS Server返回结果结构大致如下。

修改源代码中原有的XPath、对应实际返回的XML Tag即可正常解析XML

CMS配置过程

开启edX特性支持CAS登陆

修改/edx/app/edxapp/cms.env.json文件如下

修改/edx/app/edxapp/edx-platform/cms/envs/common.py如下,增加一行

修改/edx/app/edxapp/edx-platform/cms/envs/aws.py如下

修改/edx/app/edxapp/edx-platform/cms/urls.py如下

增加一个nextpage属性,当用户通过CAS登陆后自动跳转到dashboard。

修改/edx/app/edxapp/edx-platform/common/djangoapps/external_auth/views.pydjango_cas.views改为cas.view

其他的说明

如果要对CAS返回的结果进行解析,需要更改mapper的代码。在mapper的安装目录下可以看到python脚本。在这里给出一个示例,本校CAS将会返回学号等登录信息,需要自动填写姓名、邮箱。解析脚本参考如下。

Linux常用命令备忘录(更新ing)

常用命令

下面加粗的是一系列的命令,没加粗的是相关命令。

ls 显示当前目录文件

ll 、la 、l

cd 进入其他目录

cd 回家
cd ~ 回家
cd – 进入上一次进入过的目录,相当于后退
cd .. 进入上一层目录

grep 在输入的内容中搜索关键词

egrep

ln  创建链接

ln -s 软链接

vim的使用

vimtutor

find 查找文件

find . -name “abc.html”  递归查找当前目录下名为abc.html的文件

find . -name “abc.html” | xargs grep “2333” 递归查找当前目录下名为abc.html且文件内容含有2333的文件

netstat  查看当前网络状态

netstat -ano|grep 80  查看80端口的状态

ps 查看当前进程状态

ps -aux|grep java  查看当前运行的java进程

kill 结束进程

top 资源监视

tail 显示文件尾内容

tail -f /var/log/tomcat/catalina.out  监视tomcat的运行日志输出(远程调试用

cat 打印文件所有内容

su 切换用户

sudo 以其他身份执行

sudo -u abc def  以abc用户身份执行def命令

sudo xxx 以root身份执行xxx

service 控制服务状态

sudo service nginx reload  重新加载nginx配置

ssh相关

ssh user@hostname  以user登录hostname

scp user@hostname:/remote/file/path  /local/file/path  从远程向本地复制文件(夹)

scp /local/file/path user@hostname:/remote/file/path  从本地向远程复制文件(夹)

scp用-p来保持权限

ssh-keygen 生成新的ssh公钥和私钥

rsync相关

同步文件,scp不能同步软链接,而rsync可以,参考

http://blog.csdn.net/niushuai666/article/details/16880061

 

Ubuntu软件安装

sudo apt-get install apache2  安装apache软件

sudo apt-get purge apache2 删除apache2

sudo apt-get update 更新列表

sudo apt-get upgrade 升级所有软件

 

Apache多站点及反向代理配置

状态:只有一个服务器,需要多个站点,比如博客、文件、Android接口等。

最开始我的做法是用子文件夹来区分站点,所以本站的地址都是这样的http://hylstudio.cn/xxx

后来曾老师提醒可以使用下一级域名来区分不同的站点,于是研究了下。

首先,更改DNS,把需要的域名解析到这台服务器,然后更改apache配置如下

进入apache配置目录/etc/apache2其中目录结构如下
├── apache2.conf           主配置文件
├── conf-available         可用配置文件
├── conf-enabled           启用的配置文件
├── mods-available       可用的模块
├── mods-enabled         启用的模块
├── sites-available         可用的站点
└── sites-enabled           启用的站点

各个文件夹的功能如上,规则是在available中创建真实的配置、然后在enabled文件夹下创建软连接(ln -s命令)。

默认状态下sites-enabled下只有一个000-default,被我改成了999-default.conf,把内容改成下面这样

然后复制一份这个文件为001-wordpress.conf。内容如下

其他的同理,只需要更改ServerName、Alias、DocumentRoot即可。

需要说一下的是tomcat,因为tomcat在其他端口,需要做反向代理。内容如下

同时需要启用proxy模块
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/proxy.load

这样做的好处是对外不暴露tomcat真实端口。

这样,就实现了通过不同域名访问不同站点。

配置default虚拟主机,rewrite含义为我没定义过的虚拟主机都会302重定向到blog.hylstudio.cn

Linux笔记1(Linux运维、大数据相关工具)

Linux下好用的软件

智能终端fish:

http://fishshell.com/docs/current/index.html#introduction

多人协作、不间断运行的shell:tmux

https://tmux.github.io/

http://man.openbsd.org/OpenBSD-current/man1/tmux.1

 

http://blog.jobbole.com/87584/

 

自动化运维ansible

http://docs.ansible.com/

http://sofar.blog.51cto.com/353572/1579894/

 

多虚拟py环境vituralenv

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432712108300322c61f256c74803b43bfd65c6f8d0d0000

http://www.cnblogs.com/tk091/p/3700013.html

 

py包管理 pip

https://pypi.python.org/pypi/pip/

http://www.ttlsa.com/python/how-to-install-and-use-pip-ttlsa/

 

开源大数据工具luigi

http://luigi.readthedocs.io/en/stable/

http://www.oschina.net/p/luigi

http://www.open-open.com/lib/view/open1413337781090.html