Commit 6a858248 authored by wanli's avatar wanli

update

parent 51fbe51a
...@@ -74,6 +74,13 @@ class SignalManager(object): ...@@ -74,6 +74,13 @@ class SignalManager(object):
actionGetAppLogsList = PySignal() actionGetAppLogsList = PySignal()
actionUpdateAppLogs = PySignal() actionUpdateAppLogs = PySignal()
# 用户登录日志
actionAddLoginLogs = PySignal()
actionDeleteLoginLogs = PySignal()
actionGetLoginLogs = PySignal()
actionGetLoginLogsList = PySignal()
actionUpdateLoginLogs = PySignal()
# 系统菜单 # 系统菜单
actionAddMenu = PySignal() actionAddMenu = PySignal()
actionDeleteMenu = PySignal() actionDeleteMenu = PySignal()
......
...@@ -13,6 +13,7 @@ from .apps_manager import appsManager ...@@ -13,6 +13,7 @@ from .apps_manager import appsManager
from .menu_manager import menuManager from .menu_manager import menuManager
from .device_manager import deviceManager from .device_manager import deviceManager
from .download_manager import downloadManager from .download_manager import downloadManager
from .login_logs_manager import loginLogsManager
from .app_logs_manager import appLogsManager from .app_logs_manager import appLogsManager
from .build_logs_manager import buildLogsManager from .build_logs_manager import buildLogsManager
...@@ -49,6 +50,13 @@ def initConnect(): ...@@ -49,6 +50,13 @@ def initConnect():
signalManager.actionGetBuildLogList.connect(buildLogsManager.getList) signalManager.actionGetBuildLogList.connect(buildLogsManager.getList)
signalManager.actionUpdateBuildLog.connect(buildLogsManager.update) 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.actionAddUser.connect(userManager.add)
signalManager.actionDeleteUser.connect(userManager.delete) signalManager.actionDeleteUser.connect(userManager.delete)
......
...@@ -11,21 +11,50 @@ import logging ...@@ -11,21 +11,50 @@ import logging
import traceback import traceback
import shutil import shutil
from collections import OrderedDict 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 datetime import datetime
from pony.orm import * from pony.orm import *
from flask import request from flask import request as flask_request
from app.setting import config, conf from app.setting import config, conf
from model import fullStackDB from model import fullStackDB
from model.download import AppDownload from model.download import AppDownload
from model.device import Device from model.device import Device
from model.apps import Apps from model.apps import Apps
from model.user import User from model.user import User
from utils import sql_filter from utils import sql_filter, ThreadMaker
from utils.tools_epk import EpkApp from utils.tools_epk import EpkApp
logger = logging.getLogger("DownloadManager") 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): def convert_url_to_local_path(url):
parsed_result = urlparse(url) parsed_result = urlparse(url)
...@@ -38,13 +67,13 @@ class DownloadManager(object): ...@@ -38,13 +67,13 @@ class DownloadManager(object):
def __init__(self): def __init__(self):
super(DownloadManager, self).__init__() super(DownloadManager, self).__init__()
def add(self, data): def add(self, user, data):
with db_session: with db_session:
app = Apps.get(id=data.get("app"), is_delete=False) app = Apps.get(id=data.get("app"), is_delete=False)
if not app: if not app:
return False, "app does not found" return False, "app does not found"
editor = User.get(id=request.current_user.get("id")) editor = User.get(id=user)
if not editor: if not editor:
return False, "current user is not exists" return False, "current user is not exists"
...@@ -59,9 +88,9 @@ class DownloadManager(object): ...@@ -59,9 +88,9 @@ class DownloadManager(object):
commit() commit()
return result, "add dictionary {}.".format("success" if result else "fail") return result, "add dictionary {}.".format("success" if result else "fail")
def delete(self, uuid): def delete(self, user, uuid):
with db_session: with db_session:
editor = User.get(id=request.current_user.get("id")) editor = User.get(id=user)
if not editor: if not editor:
return False, "current user is not exists" return False, "current user is not exists"
...@@ -96,31 +125,36 @@ class DownloadManager(object): ...@@ -96,31 +125,36 @@ class DownloadManager(object):
app = None app = None
with db_session: with db_session:
# 根据IMEI查找设备 # 根据IMEI查找设备
device = Device.select().where(imei=data.get("imei")).first() # device = Device.select().where(imei=data.get("imei")).first()
logger.info(data) # logger.info(data)
if not device: # if not device:
return False, "device not found" # return False, "device not found"
# if not device.create_by:
# return False, "create user is null"
if not device.create_by: app = Apps.select(app_name=data.get("id")).order_by(desc(Apps.create_at))
return False, "create user is null" 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: if not app:
return False, "app not found" return False, "app not found"
app = app[:]
epk_path = "" epk_path = ""
if app.app_build_log: if app[0].app_build_log:
epk_path = os.sep.join([os.getcwd(), app.app_build_log.app_path]) epk_path = os.sep.join([os.getcwd(), app[0].app_build_log.app_path])
if not os.path.exists(epk_path): if not os.path.exists(epk_path):
return False, "epk file not found" return False, "epk file not found"
if app: down = AppDownload(app=app[0], imei=data.get("imei"))
AppDownload(app=app, imei=data.get("imei")) commit()
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") 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: if not data or len(data) <= 0:
return False, 0, "parameters can not be null." return False, 0, "parameters can not be null."
...@@ -157,14 +191,14 @@ class DownloadManager(object): ...@@ -157,14 +191,14 @@ class DownloadManager(object):
return result, count, "get dictionary {}.".format("success" if result else "fail") 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): if len(data) <= 0 or (len(data.keys()) == 1 and "id" in data):
return False, "parameters can not be null." return False, "parameters can not be null."
with db_session: with db_session:
# 查询请求者是否存在 # 查询请求者是否存在
editor = User.get(id=request.current_user.get("id")) editor = User.get(id=user)
if not editor: if not editor:
return False, "current user is not exists" return False, "current user is not exists"
......
...@@ -7,18 +7,51 @@ import types ...@@ -7,18 +7,51 @@ import types
import json import json
import logging import logging
import traceback import traceback
import urllib
from urllib import parse, request
from urllib.parse import urlparse, urljoin, urlencode
from datetime import datetime from datetime import datetime
from threading import Thread from threading import Thread
from werkzeug.security import check_password_hash from werkzeug.security import check_password_hash
from flask import request as flask_request
from pony.orm import * from pony.orm import *
from model import fullStackDB from model import fullStackDB
from model.user import User from model.user import User
from model.login_logs import LoginLogs
from fullstack.login import Auth from fullstack.login import Auth
from fullstack.response import ResponseCode from fullstack.response import ResponseCode
from utils import md5_salt from utils import md5_salt, ThreadMaker
logger = logging.getLogger("LoginManager") 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): class LoginManager(object):
''' '''
...@@ -51,6 +84,9 @@ class LoginManager(object): ...@@ -51,6 +84,9 @@ class LoginManager(object):
if result.is_delete: if result.is_delete:
return False, ResponseCode.ACCOUNT_DISABLED return False, ResponseCode.ACCOUNT_DISABLED
update_login_information(flask_request.remote_addr, result.id)
# 返回token # 返回token
token = Auth.encode_auth_token(result.id, result.username) # 生成 token token = Auth.encode_auth_token(result.id, result.username) # 生成 token
# setattr(result, 'token', token) # setattr(result, 'token', token)
......
...@@ -15,6 +15,7 @@ class AppDownload(db.Entity): ...@@ -15,6 +15,7 @@ class AppDownload(db.Entity):
uuid = Required(uuid.UUID, unique=True, default=uuid.uuid1, index=True) uuid = Required(uuid.UUID, unique=True, default=uuid.uuid1, index=True)
app = Optional("Apps", reverse="app_download") app = Optional("Apps", reverse="app_download")
imei = Required(str) imei = Required(str)
address = Optional(str)
download_at = Required(datetime, default=datetime.now) download_at = Required(datetime, default=datetime.now)
is_delete = Required(bool, default=False) is_delete = Required(bool, default=False)
sort = Optional(int, size=32, default=0) sort = Optional(int, size=32, default=0)
......
...@@ -31,6 +31,7 @@ class User(db.Entity): ...@@ -31,6 +31,7 @@ class User(db.Entity):
sort = Optional(int, size=32, default=0) sort = Optional(int, size=32, default=0)
remarks = Optional(str, max_len=255, default="", nullable=True) remarks = Optional(str, max_len=255, default="", nullable=True)
app_logs_creater = Set('AppLogs', reverse='create_by') app_logs_creater = Set('AppLogs', reverse='create_by')
login_logs_creater = Set('LoginLogs', reverse='create_by')
annex_creator = Set('Annex', reverse='create_by') annex_creator = Set('Annex', reverse='create_by')
annex_updater = Set('Annex', reverse='update_by') annex_updater = Set('Annex', reverse='update_by')
annex_deleter = Set('Annex', reverse='delete_by') annex_deleter = Set('Annex', reverse='delete_by')
......
...@@ -21,7 +21,8 @@ download_api = Blueprint("download_api", __name__, url_prefix="/api/v1/%s/downlo ...@@ -21,7 +21,8 @@ download_api = Blueprint("download_api", __name__, url_prefix="/api/v1/%s/downlo
@Auth.auth_required @Auth.auth_required
def add(): def add():
try: 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: if isSuccess:
return response_result(ResponseCode.OK, msg=message) return response_result(ResponseCode.OK, msg=message)
else: else:
...@@ -37,7 +38,8 @@ def add(): ...@@ -37,7 +38,8 @@ def add():
@Auth.auth_required @Auth.auth_required
def delete(id): def delete(id):
try: try:
isSuccess, message = signalManager.actionDeleteDownload.emit(id) user = request.current_user.get("id")
isSuccess, message = signalManager.actionDeleteDownload.emit(user, id)
if isSuccess: if isSuccess:
return response_result(ResponseCode.OK, msg=message) return response_result(ResponseCode.OK, msg=message)
else: else:
...@@ -72,7 +74,8 @@ def get(): ...@@ -72,7 +74,8 @@ def get():
@Auth.auth_required @Auth.auth_required
def get_list(): def get_list():
try: 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: if result:
return response_result(ResponseCode.OK, data=result, msg=message, count=count) return response_result(ResponseCode.OK, data=result, msg=message, count=count)
else: else:
...@@ -88,7 +91,8 @@ def get_list(): ...@@ -88,7 +91,8 @@ def get_list():
@Auth.auth_required @Auth.auth_required
def update(id): def update(id):
try: 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: if isSuccess:
return response_result(ResponseCode.OK, msg=message) return response_result(ResponseCode.OK, msg=message)
else: 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