Skip to content

Commit d9b360d

Browse files
author
huanghr
committed
v0.1
0 parents  commit d9b360d

File tree

1,097 files changed

+268257
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,097 files changed

+268257
-0
lines changed

.gitattributes

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.html linguist-language=Python

.gitignore

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
*.py[cod]
2+
nohup.out
3+
*.log
4+
*.swp
5+
db.sqlite3
6+
/env/
7+
/env2.7/
8+
.svn/

README.md

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# SSO单点登录系统
2+
运维云平台之单点登录系统,SSO的概念、用途和好处就不在这说明了,总之能接入好接入单点登录的系统就接入,二次开发成本高的系统如果支持LDAP就先接入LDAP,这样运维同学尽可能减>少应用系统账号管理维护工作。<br>
3+
4+
本系统基于Cookie方式,由认证中心统一配置cookie,不支持跨域。这已经基本能满足内部各系统接入需求,对于子系统接入开发成本也是最低。<br>
5+
6+
注:如果要求跨域,只需在本系统中稍加改动就可实现,改成认证中心不配置cookie,在认证中心成功登录后跳转回子系统时把token传递回去,由子系统配置cookie即可。
7+
8+
### 流程图
9+
![](sso.png)
10+
11+
### 部署运行环境
12+
* Centos6.5 x86_64
13+
* saltstack master
14+
* Python2.7
15+
* Virtualenv
16+
* Django1.9.2
17+
18+
### 安装部署
19+
20+
```
21+
cd salt-deploy
22+
sh update_python2.7.8.sh
23+
pip install virtualenv
24+
virtualenv ./env
25+
source env/bin/activate
26+
pip install -r pip_requirements.txt
27+
python manage.py makemigrations
28+
python manage.py migrate
29+
python init.py
30+
vim mysite/settings.py #手动修改配置SYS_API和EMAIL等配置
31+
sh service.sh start
32+
```
33+
34+
### 截图
35+
![](home.png)
36+
37+
### 技术交流
38+
39+
Email:飞龙 <[email protected]>

home.png

22.1 KB
Loading

init.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# coding: utf-8
2+
#1. 创建默认角色
3+
4+
import sys
5+
6+
reload(sys)
7+
sys.setdefaultencoding('utf8')
8+
9+
import os
10+
import re
11+
import time
12+
import getpass
13+
import readline
14+
import django
15+
import uuid
16+
17+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
18+
django.setup()
19+
from django.core.management import execute_from_command_line
20+
from django.contrib.auth.models import User
21+
from django.conf import settings
22+
23+
#创建管理员
24+
User.objects.create_superuser('admin', '[email protected]', 'password', last_name='admin')

manage.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/usr/bin/env python
2+
import os
3+
import sys
4+
5+
if __name__ == "__main__":
6+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
7+
8+
from django.core.management import execute_from_command_line
9+
10+
execute_from_command_line(sys.argv)

mysite/__init__.py

Whitespace-only changes.

mysite/comm.py

+144
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
#coding=utf-8
2+
3+
import sys
4+
import base64
5+
from itsdangerous import URLSafeTimedSerializer as utsr
6+
from django.core.mail import EmailMessage
7+
from django.conf import settings
8+
reload(sys)
9+
sys.setdefaultencoding('utf8')
10+
11+
12+
def request_get(url, timeout=5, headers=None):
13+
"""
14+
发送get请求
15+
默认超时5秒
16+
默认http请求,如果https请求url中必须是https://开发
17+
headers = {'User-Agent': 'hhrtest'}
18+
ret, err = request_get('http://ip.taobao.com/service/getIpInfo.php?ip=122.88.60.28', headers=headers)
19+
if not err: print ret.text
20+
状态码:ret.status_code
21+
返回Unicode型的数据,如文本文件:ret.text
22+
返回bytes型也就是二进制的数据,如图片、文件等:ret.content
23+
返回json数据:ret.json()
24+
headers: ret.request.headers['User-Agent']
25+
直接获取返回json串内容 ret.json()['data']['country']
26+
"""
27+
import re
28+
import requests
29+
ret = err = None
30+
requests.packages.urllib3.disable_warnings()
31+
if not re.match('https?://',url.strip()): url = 'http://' + url
32+
try:
33+
ret = requests.get(url, timeout=timeout, headers=headers)
34+
except Exception as e:
35+
return ret, e
36+
return ret, err
37+
38+
def request_post(url, post_data, timeout=5, headers=None):
39+
"""
40+
发送post请求
41+
默认http请求,如果https请求url中必须是https://开发
42+
post_data = {'key1': 'value1', 'key2': 'value2'}
43+
ret, err = request_post('http://httpbin.org/post', post_data=post_data)
44+
if not err: print ret.text
45+
状态码:ret.status_code
46+
文本内容:ret.text
47+
headers: ret.request.headers['User-Agent']
48+
直接获取返回json串内容 ret.json()['data']['country']
49+
"""
50+
import re
51+
import requests
52+
ret = err = None
53+
requests.packages.urllib3.disable_warnings()
54+
if not re.match('https?://',url.strip()): url = 'http://' + url
55+
try:
56+
ret = requests.post(url, post_data, timeout=timeout, headers=headers)
57+
except Exception as e:
58+
return ret, e
59+
return ret, err
60+
61+
def local_cmd(cmd):
62+
"""
63+
返回退出状态码和执行输出结果(标准输出和错误输出)
64+
ret, err = local_cmd('date')
65+
66+
"""
67+
import commands
68+
err, ret = commands.getstatusoutput(cmd)
69+
return ret, err
70+
71+
def send_html_mail(tolist, subject, html_content, fromer=None, cclist=None, bcclist=None):
72+
'''
73+
发送html邮件
74+
'''
75+
if fromer:
76+
_fromer = '%s<%s>' % (fromer, settings.EMAIL_HOST_USER)
77+
else:
78+
_fromer = settings.EMAIL_HOST_USER
79+
80+
msg = EmailMessage(subject, html_content, _fromer, tolist)
81+
msg.content_subtype = "html"
82+
if cclist: msg.cc = cclist
83+
if bcclist: msg.bcc = bcclist
84+
ret = msg.send(fail_silently=True)
85+
if ret == 1:
86+
ret = True
87+
else:
88+
ret = False
89+
return ret
90+
91+
def make_password(length=8):
92+
'''
93+
生成随机密码
94+
'''
95+
from random import choice
96+
import string
97+
chars=string.ascii_letters+string.digits
98+
return ''.join([choice(chars) for i in range(length)])
99+
100+
def redis_set(key, value, ex=0, host='localhost', port=6379):
101+
'''
102+
写redis
103+
'''
104+
ret = err = None
105+
try:
106+
import redis
107+
r = redis.StrictRedis(host=host,port=port)
108+
ret = r.set(key, value, ex)
109+
except Exception as e:
110+
err = e
111+
return ret, err
112+
113+
def redis_get(key, host='localhost', port=6379):
114+
'''
115+
读redis
116+
'''
117+
ret = err = None
118+
try:
119+
import redis
120+
except Exception as e:
121+
return False, e
122+
try:
123+
r = redis.StrictRedis(host=host,port=port)
124+
ret = r.get(key)
125+
except Exception as e:
126+
err = e
127+
return ret, err
128+
129+
class Token:
130+
def __init__(self, security_key):
131+
self.security_key = security_key
132+
self.salt = base64.encodestring(security_key)
133+
def generate_validate_token(self, username):
134+
serializer = utsr(self.security_key)
135+
return serializer.dumps(username, self.salt)
136+
def confirm_validate_token(self, token, expiration=600):
137+
serializer = utsr(self.security_key)
138+
return serializer.loads(token, salt=self.salt, max_age=expiration)
139+
def remove_validate_token(self, token):
140+
serializer = utsr(self.security_key)
141+
return serializer.loads(token, salt=self.salt)
142+
143+
def ustr_to_utf8(ustr):
144+
return ustr.encode('utf-8')

mysite/db_connect.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#coding=utf-8
2+
3+
import sys
4+
import os
5+
from django.conf import settings
6+
7+
sys.path.append(settings.BASE_DIR)
8+
os.environ['DJANGO_SETTINGS_MODULE'] ='mysite.settings'

0 commit comments

Comments
 (0)