forked from zhy0313/opsweb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsvn_admin.py
158 lines (157 loc) · 7.74 KB
/
svn_admin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#-*- coding: utf-8 -*-
from imp import reload
from flask import Blueprint,render_template,g,flash,request
from Modules import check,loging,MyForm,db_op,produce,main_info
from flask_mail import Mail
from flask_mail import Message
from sqlalchemy import and_,distinct
import re
import __init__
app = __init__.app
svn_url = app.config.get('SVN_URL')
mail = Mail(app)
logging = loging.Error()
page_svn_admin = Blueprint('svn_admin',__name__)
@page_svn_admin.route('/svn_admin',methods = ['GET', 'POST'])
@main_info.main_info
def svn_admin():
reload(MyForm)
form = MyForm.MyForm_svn_admin()
if form.submit.data:
sender = app.config.get('MAIL_DEFAULT_SENDER')
db = db_op.svn_users
db_groups = db_op.svn_groups
ts = form.text.data.strip().splitlines()
ts = set(ts)
for i,name in enumerate(ts):
if not re.search('.*@.*\.com$',name):
flash('%s格式错误,用户名应为个人邮箱账号!'%name)
i=-1
if i < 0:
return render_template('Message_static.html',Main_Infos=g.main_infos)
Action = form.select_action.data
def Query(db,*ts):
#生成用户列表
user_list = []
for name in ts[0]:
try:
val = db.query.with_entities(db.user,db.password).filter(db.user == name).all()
if val:
val = [v for v in val[0]]
groups = [group[0] for group in db_groups.query.with_entities(distinct(db_groups.groups)).filter(db_groups.users == name).all()]
for group in groups:
val.append(group)
user_list.append(val)
except Exception as e:
logging.error(e)
flash('获取数据错误!')
return render_template('Message_static.html', Main_Infos=g.main_infos)
return user_list
if Action == 'query':
user_list = Query(db,ts)
if user_list :
return render_template('svn_admin_show.html',Main_Infos=g.main_infos,user_list = user_list)
else:
flash('账号不存在!')
elif Action == 'add':
groups_list = form.select_groups.data
if groups_list:
for name in ts:
if Query(db,(name,)):
flash('%s 账号已存在!' %name)
continue
else:
try:
#数据库插入账户
pw = produce.Produce(13)
db_op.DB.session.add(db(user = name,password = pw,status = 1))
db_op.DB.session.commit()
#数据库插入用户组
for group in groups_list:
db_op.DB.session.add(db_groups(groups=group,users=name))
db_op.DB.session.commit()
except Exception as e:
flash(e)
flash('%s 账号开通失败!' %name)
else:
#开通成功后再发送邮件
msg = Message("SVN账号信息",sender=sender,recipients=[name])
msg.html = '<p>用户名:%s</p><p> 密码:%s</p><p>SVN根路径%s/svn/,具体项目路径请咨询各自组内同事.</p><p><font color="red">账号5分钟后开通,请妥善保管此封邮件,勿邮件回复!</font></p>' %(name,pw,svn_url)
with app.app_context():
try:
mail.send(msg)
except Exception as e:
flash(e)
flash('%s 邮件发送失败!' %name)
else:
flash('%s 账号开通成功,通知邮件已发送.' %name)
else:
flash('开通账户需选择账号对应的用户组')
elif Action == 'add_group'or Action == 'del_group':
svn_users = db.query.filter(db.user == name)
groups_list = form.select_groups.data
if groups_list:
for name in ts:
if Query(db,(name,)):
try:
#修改用户组列表
for group in groups_list:
if 'add' in Action:
db_op.DB.session.add(db_groups(groups=group, users=name))
db_op.DB.session.commit()
flash('%s 账号已添加到用户组%s' %(name,group))
if 'del' in Action:
Info = db_groups.query.filter(and_(db_groups.groups == group,db_groups.users == name)).all()
for c in Info:
db_op.DB.session.delete(c)
db_op.DB.session.commit()
flash('%s 账号已从用户组%s移除.' %(name,group))
#修改用户状态
svn_users.update({db.status:4})
db_op.DB.session.commit()
except Exception as e:
logging.error(e)
flash('获取数据错误!')
return render_template('Message_static.html', Main_Infos=g.main_infos)
else:
flash('%s 账号不存在!' %name)
else:
flash('变更账户所属用户组,需先选择要变更的用户组')
else:
if Query(db,ts):
for name in ts:
try:
#数据库删除账号
svn_users = db.query.filter(db.user == name)
if Action == 'del':
Str = '关闭'
#用户组内删除账号
Info = db_groups.query.filter(db_groups.users == name).all()
for c in Info:
db_op.DB.session.delete(c)
db_op.DB.session.commit()
svn_users.update({db.status:2})
elif Action == 'lock':
Str = '锁定'
svn_users.update({db.status:3})
elif Action == 'unlock':
Str = '解锁'
svn_users.update({db.status:4})
db_op.DB.session.commit()
except Exception as e:
logging.error(e)
flash('获取数据错误!')
return render_template('Message_static.html', Main_Infos=g.main_infos)
else:
flash('%s 账号%s成功!'%(name,Str))
else:
flash('账号不存在!')
return render_template('Message_static.html',Main_Infos=g.main_infos)
return render_template('svn_admin.html',Main_Infos=g.main_infos,form=form)
@page_svn_admin.before_request
@check.login_required(grade=0)
def check_login(error=None):
produce.Async_log(g.user, request.url)
@page_svn_admin.teardown_request
def db_remove(error=None):
db_op.DB.session.remove()