mirror of https://github.com/IoTcat/PyOne.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
6.6 KiB
158 lines
6.6 KiB
#-*- coding=utf-8 -*- |
|
from base_view import * |
|
|
|
|
|
###########################################安装 |
|
def check_mongo(host,port,user,password,db): |
|
try: |
|
mongo = MongoClient(host=host,port=int(port),connect=False,serverSelectionTimeoutMS=3) |
|
mon_db=eval('mongo.{}'.format(db)) |
|
if GetConfig_pre('MONGO_PASSWORD')!='': |
|
try: |
|
mon_db.authenticate(user,password) |
|
except: |
|
return False |
|
try: |
|
mon_db.items.remove() |
|
except: |
|
return False |
|
except: |
|
return False |
|
return True |
|
|
|
def check_redis(host,port,password,db): |
|
try: |
|
if password!='': |
|
pool=redis.ConnectionPool(host=host,port=int(port),db=db,password=password,socket_connect_timeout=3) |
|
redis_client=redis.Redis(connection_pool=pool) |
|
else: |
|
pool=redis.ConnectionPool(host=host,port=int(port),db=db,socket_connect_timeout=3) |
|
redis_client=redis.Redis(connection_pool=pool) |
|
try: |
|
redis_client.exists('test') |
|
return True |
|
except: |
|
return False |
|
except: |
|
return False |
|
|
|
|
|
|
|
|
|
@admin.route('/install',methods=['POST','GET']) |
|
def install(): |
|
step=request.args.get('step',0,type=int) |
|
user=request.args.get('user','A') |
|
if request.method=='POST': |
|
if step==3: |
|
od_type=request.form.get('od_type','nocn') |
|
set('od_type',od_type,user) |
|
elif step==4: |
|
od_type=request.form.get('od_type','nocn') |
|
od_prefix=request.form.get('od_prefix') |
|
client_id=request.form.get('client_id') |
|
client_secret=request.form.get('client_secret') |
|
set('client_id',client_id,user) |
|
set('client_secret',client_secret,user) |
|
if od_type=='cn': |
|
set('app_url','https://{}-my.sharepoint.cn/'.format(od_prefix),user) |
|
login_url=GetLoginUrl(client_id=client_id,redirect_uri=GetConfig('redirect_uri'),od_type=od_type) |
|
else: |
|
client_secret=request.form.get('client_secret') |
|
client_id=request.form.get('client_id') |
|
code=request.form.get('code') |
|
od_type=request.form.get('od_type','nocn') |
|
#授权 |
|
headers={'Content-Type':'application/x-www-form-urlencoded'} |
|
headers.update(default_headers) |
|
data=AuthData.format(client_id=client_id,redirect_uri=urllib.quote(GetConfig('redirect_uri')),client_secret=urllib.quote(client_secret),code=code) |
|
if od_type=='cn': |
|
data+='&resource=00000003-0000-0ff1-ce00-000000000000' |
|
url=GetOAuthUrl(od_type) |
|
r=requests.post(url,data=data,headers=headers) |
|
Atoken=json.loads(r.text) |
|
if Atoken.get('access_token'): |
|
with open(os.path.join(config_dir,'data/{}_Atoken.json'.format(user)),'w') as f: |
|
json.dump(Atoken,f,ensure_ascii=False) |
|
refresh_token=Atoken.get('refresh_token') |
|
token=ReFreshToken(refresh_token,user) |
|
if token.get('error'): |
|
return jsonify(token) |
|
token['expires_on']=str(time.time()+3599) |
|
with open(os.path.join(config_dir,'data/{}_token.json'.format(user)),'w') as f: |
|
json.dump(token,f,ensure_ascii=False) |
|
with open(os.path.join(config_dir,'.install'),'w') as f: |
|
f.write('4.0') |
|
config_path=os.path.join(config_dir,'self_config.py') |
|
with open(config_path,'r') as f: |
|
text=f.read() |
|
redis_client.set('users',re.findall('od_users=([\w\W]*})',text)[0]) |
|
return make_response('<h1>授权成功!<br>请先在<B><a href="/{}/cache" target="_blank">后台-更新列表</a></B>,全量更新数据<br>然后<a href="/?t={}">点击进入首页</a></h1><br>'.format(GetConfig('admin_prefix'),time.time())) |
|
else: |
|
return jsonify(Atoken) |
|
if step==0: |
|
resp=MakeResponse(render_template('admin/install/install_mongo.html',step=step,cur_user=user)) |
|
elif step==1: |
|
resp=MakeResponse(render_template('admin/install/install_redis.html',step=step,cur_user=user)) |
|
elif step==2: |
|
resp=MakeResponse(render_template('admin/install/install_choose_type.html',step=step,cur_user=user)) |
|
elif step==3: |
|
resp=MakeResponse(render_template('admin/install/install_fetch_key.html',step=step,cur_user=user,od_type=od_type)) |
|
elif step==4: |
|
resp=render_template('admin/install/install_login.html',client_secret=client_secret,client_id=client_id,login_url=login_url,cur_user=user,od_type=od_type) |
|
return resp |
|
|
|
@admin.route('/install/test_config',methods=['POST']) |
|
def test_config(): |
|
soft=request.form.get('soft') |
|
host=request.form.get('host') |
|
port=request.form.get('port') |
|
user=request.form.get('user') |
|
password=request.form.get('password') |
|
db=request.form.get('db') |
|
resp={} |
|
if soft=='mongo': |
|
if check_mongo(host,port,user,password,db): |
|
resp['msg']='MongoDB信息检查正确!' |
|
resp['code']=1 |
|
set('MONGO_HOST',host) |
|
set('MONGO_PORT',port) |
|
set('MONGO_USER',user) |
|
set('MONGO_PASSWORD',password) |
|
set('MONGO_DB',db) |
|
|
|
else: |
|
resp['msg']='MongoDB信息错误!' |
|
resp['code']=0 |
|
else: |
|
if check_redis(host,port,password,db): |
|
resp['msg']='Redis信息检查正确!' |
|
resp['code']=1 |
|
set('REDIS_HOST',host) |
|
set('REDIS_PORT',port) |
|
set('REDIS_PASSWORD',password) |
|
set('REDIS_DB',db) |
|
else: |
|
resp['msg']='Redis信息错误!' |
|
resp['code']=0 |
|
return resp |
|
|
|
###########################################卸载 |
|
@admin.route('/uninstall',methods=['POST']) |
|
def uninstall(): |
|
type_=request.form.get('type') |
|
if type_=='mongodb': |
|
mon_db.items.remove() |
|
mon_db.down_db.remove() |
|
msg='删除mongodb数据成功' |
|
elif type_=='redis': |
|
redis_client.flushdb() |
|
msg='删除redis数据成功' |
|
elif type_=='directory': |
|
subprocess.Popen('rm -rf {}/data/*.json'.format(config_dir),shell=True) |
|
subprocess.Popen('rm -rf {}/.install'.format(config_dir),shell=True) |
|
msg='删除网站数据成功' |
|
else: |
|
msg='数据已清除!如果需要删除目录请运行:rm -rf {}'.format(config_dir) |
|
ret={'msg':msg} |
|
return jsonify(ret)
|
|
|