def delete_file(request): """ """ cr = webapi.SuccCallReturn() try: if request.method != 'DELETE': return webapi.FailCallReturn( lemon.errors.ErrorDefs.ParameterIllegal).httpResponse() file_id = webapi.GET(request, 'id') rs = core.AppUserFile.objects.filter(user__id=request.user.get('id'), access_id=file_id) if not rs: return webapi.FailCallReturn( lemon.errors.ErrorDefs.ObjectNotExisted) auf = rs[0] storage_id = auf.storage_id r = storage_delete_file(request, storage_id) if r: auf.delete() log = core.LogAppUserAction( user=request.user.get('user_id'), user_role=request.user.get('node_type'), issue_time=datetime.datetime.now(), action=cloudfish.base.AppUserActionType.CLIENT_USER_DELETE_FILE, target=auf.file_name, detail=u'file:%s size:%s' % (auf.file_name, auf.file_size)) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn(lemon.errors.ErrorDefs.InternalException) return cr.httpResponse()
def changePassword(req): """ 更改当前登录用户密码 """ cr = webapi.SuccCallReturn() callback =None try: oldpasswd = webapi.GET(req,'oldpasswd') newpasswd = webapi.GET(req,'newpasswd') callback = webapi.GET(req,'callback') cr.setCallBackJsonp(callback) #MD加密 oldpasswd = lemon.encrypt.md5(oldpasswd) newpasswd = lemon.encrypt.md5(newpasswd) log = service.common.logging.createLog(cloudfish.base.AdminUserActionType.ChangePassword,request=req) r = core.AdminUser.objects.get(id = lemon.webapi.sessionValue(req,'user_id')) if r.password != oldpasswd: log.result = 1 log.detail = u'密码错误' log.save() return webapi.FailCallReturn(ErrorDefs.PasswdIncorret).httpResponse() r.password = newpasswd r.save() log.result = 0 log.detail = str(req.META['REMOTE_ADDR']) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn(ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def updateApp(req): """ 修改应用 :param req: :return: """ cr = webapi.SuccCallReturn() try: id = webapi.GET(req, 'id') app_id = webapi.GET(req, 'app_id') name = webapi.GET(req, 'name') comment = webapi.GET(req, 'comment') status = webapi.GET(req, 'status') app_id = app_id.strip() name = name.strip() status = status.strip() if not app_id or not name or not name: return webapi.FailCallReturn( ErrorDefs.ParameterIllegal).httpResponse() callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) creator_id = webapi.sessionValue(req, 'user_id') creator = core.AdminUser.objects.get(id=(int(creator_id))) app = core.Application.objects.get(id=int(id)) #应用标识不能更新 # if app_id: # appforid = core.Application.objects.filter(app_id = app_id) # if appforid: # return webapi.FailCallReturn(ErrorDefs.AppExisted).httpResponse() # app.app_id = app_id[:40] if name: app.name = name[:40] if comment: app.comment = comment[:200] if status: app.status = int(status) app.creator = creator #app.create_time = datetime.datetime.now() app.save() log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.UpdateApplicate, request=req) log.result = 0 log.target = app.name log.detail = str(req.META['REMOTE_ADDR']) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def updateAppServer(req): """ 修改应用服务器 """ cr = webapi.SuccCallReturn() try: id = webapi.GET(req, 'id') name = webapi.GET(req, 'name') ip_addr = webapi.GET(req, 'ip_addr') app_id = webapi.GET(req, 'app_id') is_addr_restricted = webapi.GET(req, 'is_addr_restricted') status = webapi.GET(req, 'status') name = name.strip() ip_addr = ip_addr.strip() if not name or not ip_addr: return webapi.FailCallReturn( ErrorDefs.ParameterIllegal).httpResponse() callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) appServer = core.AppServer.objects.get(id=int(id)) app = core.Application.objects.get(id=int(app_id)) appServer.app = app if name: appServer.name = name[:40] if ip_addr: appServer.ip_addr = ip_addr[:30] if is_addr_restricted == '1': is_addr_restricted = True if is_addr_restricted == '2': is_addr_restricted = False appServer.is_addr_restricted = is_addr_restricted if status: appServer.status = int(status) appServer.save() log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.UpdateAppServer, request=req) log.result = 0 log.target = appServer.name log.detail = str(req.META['REMOTE_ADDR']) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def updateNotice(r): """ 更新系统通知消息 """ cr = webapi.SuccCallReturn() callback = None try: notice_id = webapi.GET(r, 'id') title = webapi.GET(r, 'title') content = webapi.GET(r, 'content') alert = webapi.GET(r, 'alert', 0) end_alert_time = webapi.GET(r, 'end_alert_time', None) alert = int(alert) if alert: alert = True else: alert = False if end_alert_time: end_alert_time = lemon.utils.misc.mk_datetime(end_alert_time) callback = webapi.GET(r, 'callback') cr.setCallBackJsonp(callback) if not notice_id: return webapi.FailCallReturn( errors.ErrorDefs.ParameterIllegal).httpResponse() user_id = webapi.sessionValue(r, 'user_id') admin = core.AdminUser.objects.get(id=int(user_id)) notice = core.Notice.objects.get(id=int(notice_id)) notice.issuer = admin if title != None: notice.title = title[:255] if content != None: notice.content = content[:2000] notice.modify_time = datetime.datetime.now() notice.alert = alert notice.end_alert_time = end_alert_time notice.save() cr.result = notice.id log = service.common.logging.createLog( lemon.basetype.LogActionType.L313, notice.title, request=r) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn( errors.ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def getAppList(req): """ 获取应用列表 """ cr = webapi.SuccCallReturn() try: callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) begin, end = webapi.getDataPagingParams(req) rs = doQueryApp(req) total = rs.count() rs = rs.order_by('-create_time')[begin:end] result = [] for r in rs: #app = core.Application.objects.get(id= r.id) appusers = core.AppUser.objects.filter(app_id=int(r.id)) ids = [] for appuser in appusers: ids.append(appuser.id) file_size = core.AppUserFile.objects.filter( user_id__in=ids).aggregate(Sum('file_size')) filesize = file_size.get('file_size__sum') if filesize == None: filesize = 0 if filesize < 1048576: filesizestr = str(filesize / 1024) + 'K' if 1048576 < filesize < 1073741824: filesizestr = str(filesize / 1024) + 'M' if filesize > 1073741824: filesizestr = str(filesize / 1024) + 'G' result.append({ 'id': r.id, 'name': r.name, 'app_id': r.app_id, 'create_time': lemon.utils.misc.maketimestamp(r.create_time), 'status': r.status, 'creator': r.creator.name, 'file_size': filesizestr }) cr.assign(result) cr.setPageCtrlValue('total', total) except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def getAppServerDetail(req): """ 获取应用服务器详情 """ cr = webapi.SuccCallReturn() try: id = webapi.GET(req, 'id') callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) appServer = core.AppServer.objects.get(id=int(id)) if appServer.is_addr_restricted == True: is_addr_restricted = 1 if appServer.is_addr_restricted == False: is_addr_restricted = 2 result = { 'id': appServer.id, 'name': appServer.name, 'ip_addr': appServer.ip_addr, 'app_id': appServer.app.id, 'app_name': appServer.app.name, 'is_addr_restricted': is_addr_restricted, 'status': appServer.status, 'access_token': appServer.access_token, 'secret_key': appServer.secret_key } cr.assign(result) except: traceback.print_exc() cr = webapi.FailCallReturn(ErrorDefs.InternalException) return cr.httpResponse()
def getNoticeDetail(r): """ 获取通知消息详情 """ cr = webapi.SuccCallReturn() try: notice_id = webapi.GET(r, 'id') notice_id = int(notice_id) callback = webapi.GET(r, 'callback') cr.setCallBackJsonp(callback) r = core.Notice.objects.get(id=notice_id) result = { 'id': r.id, 'title': r.title, 'content': r.content, 'create_time': lemon.utils.misc.maketimestamp(r.create_time), 'issuer': r.issuer.name, 'issuer_id': r.issuer.id, 'alert': lemon.base.IntValOfBoolean(r.alert), 'end_alert_time': lemon.utils.misc.maketimestamp(r.end_alert_time) } cr.assign(result) except: traceback.print_exc() cr = webapi.FailCallReturn(errors.ErrorDefs.InternalException) return cr.httpResponse()
def _wrapper(request, *args, **kwargs): token = webapi.HEADER(request, 'token') if not token: return webapi.FailCallReturn( cloudfish.errors.ErrorDefs.UnAuthorizedAccess).httpResponse() user = Token.decryptUserToken(token) if not user: return webapi.FailCallReturn( cloudfish.errors.ErrorDefs.UnAuthorizedAccess).httpResponse() # token expired if user.get('expire_time', 0) < int(time.time()): return webapi.FailCallReturn( cloudfish.errors.ErrorDefs.UnAuthorizedAccess).httpResponse() request.user = user return func(request, *args, **kwargs)
def share_file(request): """ """ cr = webapi.SuccCallReturn() try: file_id = webapi.GET(request, 'id') client_id = webapi.GET(request, 'client_id') rs = core.AppUser.objects.filter(name=client_id, app__id=request.user.get('app_id')) if not rs: return webapi.FailCallReturn( lemon.errors.ErrorDefs.ObjectNotExisted).httpResponse() target_user = rs[0] if core.AppUserFile.objects.filter(user__id=target_user.id, access_id=file_id).count(): return cr.httpResponse() # succ ,passed rs = core.AppUserFile.objects.filter(user__id=request.user.get('id'), access_id=file_id) if not rs: return webapi.FailCallReturn( lemon.errors.ErrorDefs.ObjectNotExisted).httpResponse() auf = rs[0] log = core.LogAppUserAction( user=request.user.get('user_id'), user_role=request.user.get('node_type'), issue_time=datetime.datetime.now(), action=cloudfish.base.AppUserActionType.CLIENT_USER_CREATE_FILE, target=auf.file_name, detail=u'share to: %s ,file:%s size:%s' % (target_user.name, auf.file_name, auf.file_size)) log.save() # allocate new instance auf.pk = None auf.user = target_user auf.save() except: traceback.print_exc() cr = webapi.FailCallReturn(lemon.errors.ErrorDefs.InternalException) return cr.httpResponse()
def getCurrentUserInfo(req): cr = webapi.SuccCallReturn() callback =None try: callback = webapi.GET(req,'callback') cr.setCallBackJsonp(callback) r = core.AdminUser.objects.get(id = lemon.webapi.sessionValue(req,'user_id')) cr.assign({'user':r.login,'role':r.role}) except: traceback.print_exc() cr = webapi.FailCallReturn(ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def _wrapper(request, *args, **kwargs): cr = webapi.SuccCallReturn() access_token = webapi.GET(request, 'access_token') secret_key = webapi.GET(request, 'secret_key') rs = core.AppServer.objects.filter( access_token=access_token, secret_key=secret_key, status=cloudfish.base.STATUS_TYPE_ENABLED, app__status=cloudfish.base.STATUS_TYPE_ENABLED) if not rs: return webapi.FailCallReturn( cloudfish.errors.ErrorDefs.ADDRESS_RESTRICTED).httpResponse() server = rs[0] if server.is_addr_restricted: if server.ip_addr != request.META['REMOTE_ADDR']: return webapi.FailCallReturn( cloudfish.errors.ErrorDefs.ADDRESS_RESTRICTED ).httpResponse() request.server = server return func(request, *args, **kwargs)
def changeAppStatus(req): """ 更改应用状态 """ cr = webapi.SuccCallReturn() callback = None try: json_ids = webapi.GET(req, 'ids') status = webapi.GET(req, 'status') callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) ids = json.loads(json_ids) #空数组 if not ids: apps = core.Application.objects.all() for app in apps: app.status = status app.save() if ids: for app_id in ids: id = ','.join(app_id) app = core.Application.objects.get(id=int(id)) app.status = status app.save() log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.EnableApplicate, request=req) if status == '1': log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.EnableApplicate, request=req) if status == '2': log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.DisableApplicate, request=req) log.target = app.name log.result = 0 log.detail = str(req.META['REMOTE_ADDR']) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn(ErrorDefs.InternalException) return cr.httpResponse()
def get_file(request): """ """ cr = webapi.SuccCallReturn() try: file_id = webapi.GET(request, 'id') rs = core.AppUserFile.objects.filter(user__id=request.user.get('id'), access_id=file_id) if not rs: return webapi.FailCallReturn( lemon.errors.ErrorDefs.ObjectNotExisted).httpResponse() auf = rs[0] filename = storage_get_file(request, auf.storage_id) passwd = get_encrypt_password(request.user.get('id')) enable = BaseAppServer.instance().getConfig().get( 'encrypt_enable', False) if enable: filename = decrypt_file(filename, passwd) log = core.LogAppUserAction( user=request.user.get('user_id'), user_role=request.user.get('node_type'), issue_time=datetime.datetime.now(), action=cloudfish.base.AppUserActionType.CLIENT_USER_GET_FILE, target=auf.file_name, detail=u'file:%s size:%s' % (auf.file_name, auf.file_size)) log.save() # fp = FileObject(filename,'rb') fp = open(filename, 'rb') wrapper = FileWrapper(fp) content_type = mimetypes.guess_type(auf.file_name)[0] response = StreamingHttpResponse(wrapper, content_type=content_type) #response['Content-Disposition'] = u"attachment; filename=%s" % auf.file_name response['Content-Disposition'] = u"attachment; filename=_unkown_file_" return response except: traceback.print_exc() # return webapi.FailCallReturn( lemon.errors.ErrorDefs.InternalException).httpResponse() return HttpResponseForbidden()
def getAppDetail(req): """ 获取应用详情 """ cr = webapi.SuccCallReturn() try: id = webapi.GET(req, 'id') callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) app = core.Application.objects.get(id=int(id)) appusers = core.AppUser.objects.filter(app_id=int(id)) ids = [] for appuser in appusers: ids.append(appuser.id) file_size = core.AppUserFile.objects.filter(user_id__in=ids).aggregate( Sum('file_size')) filesize = file_size.get('file_size__sum') if filesize == None: filesize = 0 if filesize < 1048576: filesizestr = str(filesize / 1024) + 'K' if 1048576 < filesize < 1073741824: filesizestr = str(filesize / 1024) + 'M' if filesize > 1073741824: filesizestr = str(filesize / 1024) + 'G' result = { 'id': app.id, 'app_id': app.app_id, 'name': app.name, 'access_token': app.access_token, 'secret_key': app.secret_key, 'comment': app.comment, 'file_size': filesizestr, 'status': app.status } cr.assign(result) except: traceback.print_exc() cr = webapi.FailCallReturn(ErrorDefs.InternalException) return cr.httpResponse()
def getAppServerList(req): """ 获取应用服务器列表 """ cr = webapi.SuccCallReturn() try: callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) begin, end = webapi.getDataPagingParams(req) rs = doQueryAppServer(req) total = rs.count() rs = rs.order_by('-create_time')[begin:end] result = [] for r in rs: result.append({ 'id': r.id, 'name': r.name, 'ip_addr': r.ip_addr, 'app_name': r.app.name, 'create_time': lemon.utils.misc.maketimestamp(r.create_time), 'status': r.status }) cr.assign(result) cr.setPageCtrlValue('total', total) except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def getAllApp(req): """ 获取全部应用 """ cr = webapi.SuccCallReturn() try: callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) apps = core.Application.objects.all() result = [] for app in apps: result.append({'id': app.id, 'name': app.name}) cr.assign(result) except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def removeNotice(req): """ 删除系统通知消息 """ cr = webapi.SuccCallReturn() callback = None try: notice_id = webapi.GET(req, 'id') callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) notice = core.Notice.objects.get(id=int(notice_id)) core.Notice.objects.filter(id=int(notice_id)).delete() log = service.common.logging.createLog( lemon.basetype.LogActionType.L314, notice.title, request=req) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn( errors.ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def getAccountDetail(req): """ 获取应用详情 """ cr = webapi.SuccCallReturn() try: id = webapi.GET(req, 'id') callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) appUser = core.AppUser.objects.get(id=int(id)) file_size = core.AppUserFile.objects.filter(user_id=int(id)).aggregate( Sum('file_size')) filesize = file_size.get('file_size__sum') if filesize == None: filesize = 0 if filesize < 1048576: filesizestr = str(filesize / 1024) + 'K' if 1048576 < filesize < 1073741824: filesizestr = str(filesize / 1024) + 'M' if filesize > 1073741824: filesizestr = str(filesize / 1024) + 'G' result = { 'id': appUser.id, 'app_id': appUser.app.id, 'app_name': appUser.app.name, 'name': appUser.name, 'username': appUser.username, 'passwd': appUser.passwd, 'phone': appUser.phone, 'address': appUser.address, 'file_size': filesizestr, 'status': appUser.status } cr.assign(result) except: traceback.print_exc() cr = webapi.FailCallReturn(ErrorDefs.InternalException) return cr.httpResponse()
def getNoticeList(r): """ 获取通知消息列表 """ cr = webapi.SuccCallReturn() callback = None try: start, end = webapi.getDataPagingParams(r) callback = webapi.GET(r, 'callback') cr.setCallBackJsonp(callback) rs = core.Notice.objects.all().order_by('-modify_time')[start:end] result = [] for r in rs: result.append({ 'id': r.id, 'title': r.title, 'content': r.content, 'create_time': lemon.utils.misc.maketimestamp(r.create_time), 'issuer': r.issuer.name, 'issuer_id': r.issuer.id, 'alert': lemon.base.IntValOfBoolean(r.alert), 'end_alert_time': lemon.utils.misc.maketimestamp(r.end_alert_time) }) cr.assign(result) cr.setPageCtrlValue('total', core.Notice.objects.all().count()) except: traceback.print_exc() cr = webapi.FailCallReturn(errors.ErrorDefs.InternalException) return cr.httpResponse()
def userLogout(request): """ 服务器发送用户登出 :param request: :return: """ cr = webapi.SuccCallReturn() try: user = core.AppUser.objects.get(id=request.user.get('id')) # 日志记录 log = core.LogAppUserAction( user=user.name, user_role=request.user.get('node_type'), issue_time=datetime.datetime.now(), action=cloudfish.base.AppUserActionType.CLIENT_USER_LOGOUT, target=None, ) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn(lemon.errors.ErrorDefs.InternalException, traceback.format_exc()) return cr.httpResponse()
def getSignImage(req): ''' 获取验证码信息 1.generate vcode image 2.put into cache-server vcode_vcode_id: vcode_val :param r: :return: {id,image_base64} ''' import lemon.utils.image.vcode cr = webapi.SuccCallReturn() try: image,chars = lemon.utils.image.vcode.create_validate_code() req.session['sign_chars'] = chars cr.assign(image) except: traceback.print_exc() cr = webapi.FailCallReturn(errors.ErrorDefs.InternalException) return cr.httpResponse()
def createAppServer(req): """ 添加应用服务器 @params: @return: {status,errcode,result} """ cr = webapi.SuccCallReturn() callback = None try: name = webapi.GET(req, 'name') ip_addr = webapi.GET(req, 'ip_addr') app_id = webapi.GET(req, 'app_id') is_addr_restricted = webapi.GET(req, 'is_addr_restricted') status = webapi.GET(req, 'status') name = name.strip() ip_addr = ip_addr.strip() if not name or not ip_addr: return webapi.FailCallReturn( ErrorDefs.ParameterIllegal).httpResponse() callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) appServer = core.AppServer() app = core.Application.objects.get(id=int(app_id)) appServer.app = app if name: appServer.name = name[:40] if ip_addr: appServer.ip_addr = ip_addr[:30] if is_addr_restricted == '1': is_addr_restricted = True if is_addr_restricted == '2': is_addr_restricted = False appServer.is_addr_restricted = is_addr_restricted if status: appServer.status = int(status) appServer.create_time = datetime.datetime.now() #调用生成服务器访问令牌和访问口令(判断token是否存在) # while True: # access_token = lemon.utils.misc.genUUID() # if not core.AppServer.objects.objects.filter(access_token= access_token).exits(): # break appServer.access_token = lemon.utils.misc.genUUID() appServer.secret_key = lemon.utils.misc.random_password() appServer.save() result = { 'id': appServer.id, 'access_token': appServer.access_token, 'secret_key': appServer.name } cr.assign(result) log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.CreateAppServer, request=req) log.result = 0 log.target = appServer.name log.detail = str(req.META['REMOTE_ADDR']) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def create_file(request): """ load file encrypt file save to swift return storage_id """ cr = webapi.SuccCallReturn() try: tmpdir = BaseAppServer.instance().getConfig().get("tmpdir") for name, file in request.FILES.items(): upload_filename = file.name filename = lemon.utils.misc.genUUID() filename = u'%s/%s' % (tmpdir, filename.decode('utf-8')) # fw = FileObject(open(filename,'wb'),'wb') fw = open(filename, 'wb') file_size = 0 # c = file.read() for chunk in file.chunks(): file_size += len(chunk) fw.write(chunk) fw.close() digest = calc_file_digest(filename) passwd = get_encrypt_password(request.user.get('id')) enable = BaseAppServer.instance().getConfig().get( 'encrypt_enable', False) if enable: filename = encrypt_file(filename, passwd) if not filename: return webapi.FailCallReturn( lemon.errors.ErrorDefs.InternalException, u'encrypt file failed') storage_id = storage_post_file(request, filename) user = core.AppUser.objects.get(id=request.user.get('id')) auf = core.AppUserFile() auf.user = user auf.create_time = datetime.datetime.now() auf.storage_id = storage_id auf.file_name = upload_filename auf.file_size = file_size auf.digest = digest auf.access_salt = new_salt() auf.access_id = get_user_file_access_id(auf) auf.save() cr.assign(auf.access_id) log = core.LogAppUserAction( user=request.user.get('user_id'), user_role=request.user.get('node_type'), issue_time=datetime.datetime.now(), action=cloudfish.base.AppUserActionType. CLIENT_USER_CREATE_FILE, target=auf.file_name, detail=u'file:%s size:%s' % (auf.file_name, auf.file_size)) log.save() break except: traceback.print_exc() cr = webapi.FailCallReturn(lemon.errors.ErrorDefs.InternalException) return cr.httpResponse()
查询管理员平台操作日志 """ cr = webapi.SuccCallReturn() callback = None try: callback = webapi.GET(req,'callback') cr.setCallBackJsonp(callback) case = webapi.GET(req,'case') if case : case = json.loads(case) else: case ={} begin,end = webapi.getDataPagingParams(req) action_ids = case.get('action_ids') if not action_ids: return webapi.FailCallReturn(ErrorDefs.ParameterIllegal).httpResponse() rs = doQueryAdminUserActionLog(req) total = rs.count() rs = rs.order_by('-issue_time')[begin:end] result =[] for r in rs: result.append({ 'act_name':cloudfish.base.AdminUserActionType.nameValue(r.action), 'user':r.user, 'user_role': cloudfish.base.AdminUserType.nameValue(r.user_role), 'issue_time': lemon.utils.misc.maketimestamp(r.issue_time), 'target':r.target, 'result': cloudfish.base.ResultType.nameValue(r.result), 'detail': r.detail
def createApp(req): """ 添加应用 @params: @return: {status,errcode,result} """ cr = webapi.SuccCallReturn() callback = None try: app_id = webapi.GET(req, 'app_id') name = webapi.GET(req, 'name') comment = webapi.GET(req, 'comment') status = webapi.GET(req, 'status') app_id = app_id.strip() name = name.strip() status = status.strip() if not app_id or not name: return webapi.FailCallReturn( ErrorDefs.ParameterIllegal).httpResponse() callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) creator_id = webapi.sessionValue(req, 'user_id') creator = core.AdminUser.objects.get(id=(int(creator_id))) app = core.Application() if app_id: appforid = core.Application.objects.filter(app_id=app_id) if appforid: return webapi.FailCallReturn( ErrorDefs.AppExisted).httpResponse() app.app_id = app_id[:40] if name: app.name = name[:40] if comment: app.comment = comment[:200] if status: app.status = int(status) app.creator = creator app.create_time = datetime.datetime.now() app.access_token = lemon.utils.misc.genUUID() app.secret_key = lemon.utils.misc.random_password() app.save() result = app.id cr.assign(result) log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.CreateApplicate, request=req) log.result = 0 log.target = app.name log.detail = str(req.META['REMOTE_ADDR']) log.save() except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def login(req): """ login @params: @return: {status,errcode,result} """ cr = webapi.SuccCallReturn() callback =None log = None try: username = webapi.GET(req,'user') password = webapi.GET(req,'password') signcode = webapi.GET(req,'signcode') callback = webapi.GET(req,'callback') cr.setCallBackJsonp(callback) log = service.common.logging.createLog(cloudfish.base.AdminUserActionType.Login) log.user = username if not username or not password : # log.result = 1 # log.detail = u'用户名或密码错误' # log.user_role = 0 # log.save() return lemon.webapi.FailCallReturn(ErrorDefs.UserNameNotExisted).httpResponse() #验证码 # if signcode.lower() != req.session['sign_chars'].lower(): # # log.result = 1 # # log.detail = u'验证码错误' # # log.save() # return lemon.webapi.FailCallReturn(ErrorDefs.SignCodeIncorret).httpResponse() #MD加密 password = lemon.encrypt.md5(password) rs = core.AdminUser.objects.filter(login=username,password=password) if not rs: log.result = 1 log.detail = u'用户名或密码错误' log.user_role = 0 log.save() return lemon.webapi.FailCallReturn(ErrorDefs.UserNameNotExisted).httpResponse() r = rs[0] req.session['user_id'] = r.id req.session['user_role'] = r.role ar = service.lemon_impl.AuthResult_t() ar.user_id = r.id ar.user_name = username ar.login_time = int(time.time()) ar.expire_time = ar.login_time + 3600*5 #默认 5天过期 token = lemon.encrypt.encryptUserToken(ar) cr.assign(token) # {result: token} log = service.common.logging.createLog(cloudfish.base.AdminUserActionType.Login,request=req) log.result = 0 log.user_role = r.role log.detail = str(req.META['REMOTE_ADDR']) except: traceback.print_exc() cr = webapi.FailCallReturn(ErrorDefs.InternalException).setCallBackJsonp(callback) log.save() return cr.httpResponse()
def createAccount(req): """ 添加应用 @params: @return: {status,errcode,result} """ cr = webapi.SuccCallReturn() callback = None try: app_id = webapi.GET(req, 'app_id') name = webapi.GET(req, 'name') username = webapi.GET(req, 'username') passwd = webapi.GET(req, 'passwd') phone = webapi.GET(req, 'phone') address = webapi.GET(req, 'address') status = webapi.GET(req, 'status') name = name.strip() if not name: return webapi.FailCallReturn( ErrorDefs.ParameterIllegal).httpResponse() appusername = core.AppUser.objects.filter(name=name) if (appusername.exists()): return webapi.FailCallReturn( ErrorDefs.AccountExisted).httpResponse() callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) app = core.Application.objects.get(id=int(app_id)) appUser = core.AppUser() appUser.app = app appUser.salt = genPassword(10) if name: appUser.name = name[:40] if username: appUser.username = username[:20] if passwd: appUser.passwd = lemon.encrypt.md5(appUser.salt + passwd[:20]) if phone: appUser.phone = phone[:20] if address: appUser.address = address[:80] if status: appUser.status = int(status) appUser.create_time = datetime.datetime.now() appUser.save() result = appUser.id cr.assign(result) log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.CreateAppUser, request=req) log.result = 0 log.target = appUser.name log.detail = str(req.META['REMOTE_ADDR']) log.user_role = req.session['user_role'] log.save() except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def updateAccount(req): cr = webapi.SuccCallReturn() try: id = webapi.GET(req, 'id') app_id = webapi.GET(req, 'app_id') name = webapi.GET(req, 'name') username = webapi.GET(req, 'username') phone = webapi.GET(req, 'phone') address = webapi.GET(req, 'address') #is_backend = webapi.GET(req,'is_backend') status = webapi.GET(req, 'status') name = name.strip() if not name: return webapi.FailCallReturn( ErrorDefs.ParameterIllegal).httpResponse() callback = webapi.GET(req, 'callback') cr.setCallBackJsonp(callback) app = core.Application.objects.get(id=int(app_id)) appUser = core.AppUser.objects.get(id=int(id)) #如果修改app,则会查询对应授权数 if app != appUser.app: #判断应用授权数量 #已用数量 cert_num = core.AppUser.objects.filter(cert__isnull=False, app=app).count() if cert_num >= app.max_lic_num: return webapi.FailCallReturn(ErrorDefs.AppNoLic).httpResponse() appUser.app = app if name: appUser.name = name[:40] if username: appUser.username = username[:20] if phone: appUser.phone = phone[:20] else: appUser.phone = phone if address: appUser.address = address[:80] else: appUser.address = address if status: appUser.status = int(status) #不能修改用户是否前后端 # if is_backend=='1': # is_backend = True # appUser.cert = app.cert # # if is_backend=='2': # is_backend = False # rs = core.AppCertificate.objects.filter(status = 1) # if rs: # appUser.cert = rs[0] # else: # appUser.cert = None # # appUser.is_backend = is_backend appUser.save() log = service.common.logging.createLog( cloudfish.base.AdminUserActionType.UpdateAppUser, request=req) log.result = 0 log.target = appUser.name log.detail = str(req.META['REMOTE_ADDR']) log.user_role = req.session['user_role'] log.save() except: traceback.print_exc() cr = webapi.FailCallReturn( ErrorDefs.InternalException).setCallBackJsonp(callback) return cr.httpResponse()
def process_request(self, req): """ session 检查 - 超时或用户身份为鉴定,提示用户登录 webapi权限调用检查 - 业务用户与管理员api调用控制 - 不同权限用户的api调用控制 :param request: :return: """ if model.django.project.settings.DEBUG: print 'PATH:', req.path print 'GET:', req.GET print 'POST:', req.POST print 'USER_ID:', webapi.sessionValue(req, 'user_id') print 'USER_ROLE:', webapi.sessionValue(req, 'user_role') print 'USER_TYPE:', webapi.sessionValue(req, 'user_type') real_ip = req.META.get('HTTP_X_REAL_IP') if real_ip: req.META['REMOTE_ADDR'] = real_ip prefix = '/webapi/' # if req.path[-1]!='/': # req.path +='/' # return # if req.path.find('/api/fileserver/') != -1: return if req.path.find('/static/') != -1: return #此处必须判别 当前登录的用户类型 admin/user, if req.path.find(prefix) != -1: IGNAL_LIST = ('/login', '/logout', '/getSignImage', '/', '/getIdentity') match = False for path in IGNAL_LIST: if req.path.find(path) != -1: match = True break if match: return user_id = webapi.sessionValue(req, 'user_id') # user_role = webapi.sessionValue(req,'user_id') # user_type = webapi.sessionValue(req,'user_type') # user or admin_user if not user_id: return webapi.FailCallReturn( errors.ErrorDefs.SessionExpired).httpResponse() else: user_type = webapi.sessionValue(req, 'user_type') # if req.path.find('/webapi/ras/')!=-1 and user_type!=basetype.LoginUserType.USER: # print 'error: cross user privillages access! (current user is not USER)' # return webapi.FailCallReturn(errors.ErrorDefs.PermissionDenied) # if req.path.find('/webapi/admin/')!=-1 and user_type!=basetype.LoginUserType.ADMIN: # print 'error: cross user privillages access! (current user is not ADMIN)' # return webapi.FailCallReturn(errors.ErrorDefs.PermissionDenied) # todo # 启用身份状态识别,导致 文件下载 错误: user_id 不存在 ???? # 可能是 /ras时注销了用户会话?? if 1: user_id = webapi.sessionValue(req, 'user_id') if not user_id: # if req.path=='/admin/': return render_to_response('adminLogin.html') # else: # return render_to_response('adminIndex.html') return