Commit 6a858248 authored by wanli's avatar wanli

update

parent 51fbe51a
......@@ -74,6 +74,13 @@ class SignalManager(object):
actionGetAppLogsList = PySignal()
actionUpdateAppLogs = PySignal()
# 用户登录日志
actionAddLoginLogs = PySignal()
actionDeleteLoginLogs = PySignal()
actionGetLoginLogs = PySignal()
actionGetLoginLogsList = PySignal()
actionUpdateLoginLogs = PySignal()
# 系统菜单
actionAddMenu = PySignal()
actionDeleteMenu = PySignal()
......
......@@ -13,6 +13,7 @@ from .apps_manager import appsManager
from .menu_manager import menuManager
from .device_manager import deviceManager
from .download_manager import downloadManager
from .login_logs_manager import loginLogsManager
from .app_logs_manager import appLogsManager
from .build_logs_manager import buildLogsManager
......@@ -49,6 +50,13 @@ def initConnect():
signalManager.actionGetBuildLogList.connect(buildLogsManager.getList)
signalManager.actionUpdateBuildLog.connect(buildLogsManager.update)
# 用户登录记录
signalManager.actionAddLoginLogs.connect(loginLogsManager.add)
signalManager.actionDeleteLoginLogs.connect(loginLogsManager.delete)
signalManager.actionGetLoginLogs.connect(loginLogsManager.get)
signalManager.actionGetLoginLogsList.connect(loginLogsManager.getList)
signalManager.actionUpdateLoginLogs.connect(loginLogsManager.update)
# 用户模块
signalManager.actionAddUser.connect(userManager.add)
signalManager.actionDeleteUser.connect(userManager.delete)
......
......@@ -11,21 +11,50 @@ import logging
import traceback
import shutil
from collections import OrderedDict
from urllib.parse import urlparse, urljoin
import urllib
from urllib import parse, request
from urllib.parse import urlparse, urljoin, urlencode
from datetime import datetime
from pony.orm import *
from flask import request
from flask import request as flask_request
from app.setting import config, conf
from model import fullStackDB
from model.download import AppDownload
from model.device import Device
from model.apps import Apps
from model.user import User
from utils import sql_filter
from utils import sql_filter, ThreadMaker
from utils.tools_epk import EpkApp
logger = logging.getLogger("DownloadManager")
@ThreadMaker
def update_download_information(ip, id):
params = { 'ak': 'aZEAgYG8wKuLd6DS9BmCloGtfnGGkRMn', 'coor': 'bd09ll' }
parameters = urllib.parse.urlencode(params)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'
}
if ip != '127.0.0.1':
params.update({'ip': ip})
parameters = urllib.parse.urlencode(params)
url = 'http://api.map.baidu.com/location/ip'
req = request.Request(url='%s%s%s' % (url, '?', parameters), headers=headers)
ret = request.urlopen(req).read()
jsonData = json.loads(ret)
logger.info(jsonData)
if (0 != jsonData['status']):
return None
with db_session:
down = AppDownload.get(id=id)
if down:
down.set(address=jsonData['address'], remarks=json.dumps(jsonData['content'], ensure_ascii=False))
commit()
def convert_url_to_local_path(url):
parsed_result = urlparse(url)
......@@ -38,13 +67,13 @@ class DownloadManager(object):
def __init__(self):
super(DownloadManager, self).__init__()
def add(self, data):
def add(self, user, data):
with db_session:
app = Apps.get(id=data.get("app"), is_delete=False)
if not app:
return False, "app does not found"
editor = User.get(id=request.current_user.get("id"))
editor = User.get(id=user)
if not editor:
return False, "current user is not exists"
......@@ -59,9 +88,9 @@ class DownloadManager(object):
commit()
return result, "add dictionary {}.".format("success" if result else "fail")
def delete(self, uuid):
def delete(self, user, uuid):
with db_session:
editor = User.get(id=request.current_user.get("id"))
editor = User.get(id=user)
if not editor:
return False, "current user is not exists"
......@@ -96,31 +125,36 @@ class DownloadManager(object):
app = None
with db_session:
# 根据IMEI查找设备
device = Device.select().where(imei=data.get("imei")).first()
logger.info(data)
if not device:
return False, "device not found"
# device = Device.select().where(imei=data.get("imei")).first()
# logger.info(data)
# if not device:
# return False, "device not found"
# if not device.create_by:
# return False, "create user is null"
if not device.create_by:
return False, "create user is null"
app = Apps.select(app_name=data.get("id")).order_by(desc(Apps.create_at))
if len(app) > 1:
app = Apps.select(lambda p: p.app_name == data.get("id") and p.create_by.account == 'evm').order_by(desc(Apps.create_at))
app = Apps.select(app_name=data.get("id"), create_by=device.create_by).order_by(desc(Apps.create_at)).first()
if not app:
return False, "app not found"
app = app[:]
epk_path = ""
if app.app_build_log:
epk_path = os.sep.join([os.getcwd(), app.app_build_log.app_path])
if app[0].app_build_log:
epk_path = os.sep.join([os.getcwd(), app[0].app_build_log.app_path])
if not os.path.exists(epk_path):
return False, "epk file not found"
if app:
AppDownload(app=app, imei=data.get("imei"))
commit()
down = AppDownload(app=app[0], imei=data.get("imei"))
commit()
if down:
ip = flask_request.remote_addr
update_download_information(ip, down.id)
return epk_path, "get dictionary {}.".format("success" if epk_path else "no data")
def getList(self, data):
def getList(self, user, data):
if not data or len(data) <= 0:
return False, 0, "parameters can not be null."
......@@ -157,14 +191,14 @@ class DownloadManager(object):
return result, count, "get dictionary {}.".format("success" if result else "fail")
def update(self, uuid, data):
def update(self, user, uuid, data):
# 当参数为空时,直接返回错误
if len(data) <= 0 or (len(data.keys()) == 1 and "id" in data):
return False, "parameters can not be null."
with db_session:
# 查询请求者是否存在
editor = User.get(id=request.current_user.get("id"))
editor = User.get(id=user)
if not editor:
return False, "current user is not exists"
......
......@@ -7,18 +7,51 @@ import types
import json
import logging
import traceback
import urllib
from urllib import parse, request
from urllib.parse import urlparse, urljoin, urlencode
from datetime import datetime
from threading import Thread
from werkzeug.security import check_password_hash
from flask import request as flask_request
from pony.orm import *
from model import fullStackDB
from model.user import User
from model.login_logs import LoginLogs
from fullstack.login import Auth
from fullstack.response import ResponseCode
from utils import md5_salt
from utils import md5_salt, ThreadMaker
logger = logging.getLogger("LoginManager")
@ThreadMaker
def update_login_information(ip, user_id):
params = { 'ak': 'aZEAgYG8wKuLd6DS9BmCloGtfnGGkRMn', 'coor': 'bd09ll' }
parameters = urllib.parse.urlencode(params)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'
}
if ip != '127.0.0.1':
params.update({'ip': ip})
parameters = urllib.parse.urlencode(params)
url = 'http://api.map.baidu.com/location/ip'
req = request.Request(url='%s%s%s' % (url, '?', parameters), headers=headers)
ret = request.urlopen(req).read()
jsonData = json.loads(ret)
logger.info(jsonData)
if (0 != jsonData['status']):
return None
with db_session:
user = User.get(id=user_id)
if not user:
return
LoginLogs(username=user.username, address=jsonData['address'], create_by=user, remarks=json.dumps(jsonData['content'], ensure_ascii=False))
commit()
class LoginManager(object):
'''
......@@ -51,6 +84,9 @@ class LoginManager(object):
if result.is_delete:
return False, ResponseCode.ACCOUNT_DISABLED
update_login_information(flask_request.remote_addr, result.id)
# 返回token
token = Auth.encode_auth_token(result.id, result.username) # 生成 token
# setattr(result, 'token', token)
......
......@@ -15,6 +15,7 @@ class AppDownload(db.Entity):
uuid = Required(uuid.UUID, unique=True, default=uuid.uuid1, index=True)
app = Optional("Apps", reverse="app_download")
imei = Required(str)
address = Optional(str)
download_at = Required(datetime, default=datetime.now)
is_delete = Required(bool, default=False)
sort = Optional(int, size=32, default=0)
......
......@@ -31,6 +31,7 @@ class User(db.Entity):
sort = Optional(int, size=32, default=0)
remarks = Optional(str, max_len=255, default="", nullable=True)
app_logs_creater = Set('AppLogs', reverse='create_by')
login_logs_creater = Set('LoginLogs', reverse='create_by')
annex_creator = Set('Annex', reverse='create_by')
annex_updater = Set('Annex', reverse='update_by')
annex_deleter = Set('Annex', reverse='delete_by')
......
......@@ -21,7 +21,8 @@ download_api = Blueprint("download_api", __name__, url_prefix="/api/v1/%s/downlo
@Auth.auth_required
def add():
try:
isSuccess, message = signalManager.actionAddDownload.emit(request.schema_data)
user = request.current_user.get("id")
isSuccess, message = signalManager.actionAddDownload.emit(user, request.schema_data)
if isSuccess:
return response_result(ResponseCode.OK, msg=message)
else:
......@@ -37,7 +38,8 @@ def add():
@Auth.auth_required
def delete(id):
try:
isSuccess, message = signalManager.actionDeleteDownload.emit(id)
user = request.current_user.get("id")
isSuccess, message = signalManager.actionDeleteDownload.emit(user, id)
if isSuccess:
return response_result(ResponseCode.OK, msg=message)
else:
......@@ -72,7 +74,8 @@ def get():
@Auth.auth_required
def get_list():
try:
result, count, message = signalManager.actionGetDownloadList.emit(request.schema_data)
user = request.current_user.get("id")
result, count, message = signalManager.actionGetDownloadList.emit(user, request.schema_data)
if result:
return response_result(ResponseCode.OK, data=result, msg=message, count=count)
else:
......@@ -88,7 +91,8 @@ def get_list():
@Auth.auth_required
def update(id):
try:
isSuccess, message = signalManager.actionUpdateDownload.emit(id, request.schema_data)
user = request.current_user.get("id")
isSuccess, message = signalManager.actionUpdateDownload.emit(user, id, request.schema_data)
if isSuccess:
return response_result(ResponseCode.OK, msg=message)
else:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment