def getFormObjAjax(request): ''' load service_object's form_object return: json author: Arthur ''' username = request.user.username postdata = getPostdata(request) result = {} if username: require_field = ['api_path'] checker = DataChecker(postdata, require_field) if checker.get('status') == 'success': flow_uuid = FlowActiveGlobalObject.APIgetUUID( postdata.get('api_path')) thisQuery = list( FlowActive.objects.filter(flow_uuid=flow_uuid, undeploy_flag=False).values( 'formobject', 'attachment')) if len(thisQuery): result = thisQuery[0] language = get_language() app_id = FlowActiveGlobalObject.UUIDSearch( flow_uuid).flow_app_id formobject = Translator('formobject', 'active', language, app_id, None).Do(result['formobject']) result['formobject'] = json.dumps(formobject) return ResponseAjax(statusEnum.success, _('讀取成功。'), result).returnJSON() else: error('%s get form_object with no permission' % username, request) return ResponseAjax(statusEnum.no_permission, _('您沒有權限進行此操作。')).returnJSON()
def loadDashboardAjax(request): ''' load user's dashboard settinomdashboardput: request return: json author: Arthur ''' #Server Side Rule Check checkMigrate() username = request.user.username result = {} if username: #static variable if OmDashboard.objects.filter(user=request.user).count() > 0: result = list( OmDashboard.objects.filter( user=request.user).values('content')) #result = list(OmDashboard.objects_d.filter('content',user=request.user)) else: result = [{ "content": '{"index":44,"list":{"3":{"id":3,"type":"box3","setting":{"setTitle":"","setColor":"box-default"}},"4":{"id":4,"type":"box3","setting":{"setTitle":"","setColor":"box-default"}},"5":{"id":5,"type":"box3","setting":{"setTitle":"","setColor":"box-default"}},"6":{"id":6,"type":"box3","setting":{"setTitle":"","setColor":"box-default"}},"7":{"id":7,"type":"box12","setting":{"setTitle":"全球產量分布","setColor":"box-primary"}},"9":{"id":9,"type":"box4","setting":{"setTitle":"","setColor":"box-default"}},"10":{"id":10,"type":"box4","setting":{"setTitle":"","setColor":"box-default"}},"11":{"id":11,"type":"box4","setting":{"setTitle":"","setColor":"box-default"}},"12":{"id":12,"type":"box4","setting":{"setTitle":"","setColor":"box-default"}},"15":{"id":15,"type":"word","setting":{"setTitle":"","setTip":"","setIcon":"fa fa-file-text","setColor":"bg-blue","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"16":{"id":16,"type":"word","setting":{"setTitle":"","setTip":"","setIcon":"fa fa-envelope","setColor":"bg-yellow","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"17":{"id":17,"type":"word","setting":{"setTitle":"","setTip":"","setIcon":"fa fa-thumbs-up","setColor":"bg-green","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"18":{"id":18,"type":"word","setting":{"setTitle":"","setTip":"","setIcon":"fa fa-line-chart","setColor":"bg-red","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"20":{"id":20,"type":"meter-bar","setting":{"setTitle":"","setTip":"台北","setColor":"progress-bar-blue","setMax":"100","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"21":{"id":21,"type":"meter-bar","setting":{"setTitle":"","setTip":"東京","setColor":"progress-bar-aqua","setMax":"100","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"22":{"id":22,"type":"meter-bar","setting":{"setTitle":"","setTip":"首爾","setColor":"progress-bar-green","setMax":"100","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"23":{"id":23,"type":"meter-bar","setting":{"setTitle":"","setTip":"紐約","setColor":"progress-bar-yellow","setMax":"100","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"24":{"id":24,"type":"meter-bar","setting":{"setTitle":"","setTip":"曼谷","setColor":"progress-bar-red","setMax":"100","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"25":{"id":25,"type":"meter-bar","setting":{"setTitle":"","setTip":"新加坡","setColor":"color-purple","setMax":"100","setUnit":"單位","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"26":{"id":26,"type":"tube","setting":{"setTitle":"","setTip":"","setIcon":"fa fa-heartbeat","setColor":"bg-red","setUnit":"單位","setMax":"100","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"27":{"id":27,"type":"tube","setting":{"setTitle":"","setTip":"","setIcon":"fa fa-leaf","setColor":"bg-green","setUnit":"單位","setMax":"100","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"28":{"id":28,"type":"tube","setting":{"setTitle":"","setTip":"","setIcon":"fa fa-car","setColor":"bg-blue","setUnit":"單位","setMax":"100","setForm":"","setColumn":[""],"setTime":"all","setType":["static"]}},"30":{"id":30,"type":"bar","setting":{"setTitle":"","setColor":"1","setHeight":"240","setYstart":"0","setForm":"","setColumn":[""],"setTime":"all","setType":["static"],"setGroup":[""]}},"31":{"id":31,"type":"box12","setting":{"setTitle":"","setColor":"box-default"}},"39":{"id":39,"type":"box4","setting":{"setTitle":"","setColor":"box-default"}},"40":{"id":40,"type":"box4","setting":{"setTitle":"","setColor":"box-default"}},"41":{"id":41,"type":"pie","setting":{"setTitle":"","setColor":"0","setUnit":"","setHeight":"320","setForm":"","setColumn":[""],"setTime":"all","setType":["static"],"setGroup":[""]}},"43":{"id":43,"type":"pie","setting":{"setTitle":"","setColor":"3","setUnit":"","setHeight":"320","setForm":"","setColumn":[""],"setTime":"all","setType":["static"],"setGroup":[""]}}},"tree":[{"id":"3","tree":[{"id":"15"}]},{"id":"4","tree":[{"id":"17"}]},{"id":"5","tree":[{"id":"16"}]},{"id":"6","tree":[{"id":"18"}]},{"id":"7","tree":[{"id":"9","tree":[{"id":"20"},{"id":"21"},{"id":"22"},{"id":"23"},{"id":"24"},{"id":"25"}]},{"id":"40","tree":[{"id":"41"}]},{"id":"39","tree":[{"id":"43"}]}]},{"id":"10","tree":[{"id":"26"}]},{"id":"11","tree":[{"id":"27"}]},{"id":"12","tree":[{"id":"28"}]},{"id":"31","tree":[{"id":"30"}]}]}' }] return ResponseAjax(statusEnum.success, _('讀取成功'), result).returnJSON() else: error('%s load Dashboard with no permission' % username, request) return ResponseAjax(statusEnum.no_permission, _('您沒有權限進行此操作。')).returnJSON()
def syncLDAP(): ''' Get parameters to sync LDAP input: execute LDAP functions return: result message author: Kolin Hsu,Pei Lin ''' result = {} try: ldpadatastr = SystemSetting.objects.get(name='ldap_config').value ldpadata_json = json.loads(ldpadatastr) ldap_client_server = ldpadata_json['ldap_client_server'] ldap_client_server_port = ldpadata_json['ldap_client_server_port'] ldap_base_dn = ldpadata_json['ldap_base_dn'] ldap_bind_user = ldpadata_json['ldap_bind_user'] ldap_bind_user_password = ldpadata_json['ldap_bind_user_password'] if ldap_client_server != "" and ldap_client_server_port != "" and ldap_base_dn != "" and ldap_bind_user != "" and ldap_bind_user_password != "": info('LDAP integration start.') create_LDAP_user(ldap_client_server,ldap_client_server_port,ldap_base_dn,ldap_bind_user,ldap_bind_user_password) create_LDAP_group(ldap_client_server,ldap_client_server_port,ldap_base_dn,ldap_bind_user,ldap_bind_user_password) mapping_group_user(ldap_client_server,ldap_client_server_port,ldap_base_dn,ldap_bind_user,ldap_bind_user_password) info('LDAP integration finish.') result['status'] = 'success' result['message'] = _('LDAP 同步完成') else: result['status'] = 'fail' result['message'] = _('LDAP 設定值為空') except Exception as e: error("LDAP integration error:"+e.__str__()) result['status'] = 'fail' result['message'] = _('LDAP 同步失敗 ,')+e.__str__() finally: GlobalObject.__statusObj__["ldapRunning"] = False return result
def threadsubmit(self): while True: #get pool queue size pool_qsize = self.threadPool._work_queue.qsize() #get queue size queue_size = self.threadQueue.qsize() if pool_qsize == 0 and queue_size > 0 and self.Monitor_Start: #get json form queue jsonObj = self.threadQueue.get(block=True) flow_uuid = jsonObj['param'].get('flow_uuid', '') fa = None if flow_uuid: fa = FlowActiveGlobalObject.UUIDSearch(flow_uuid) #import module try: module_name = jsonObj['module_name'] l = module_name.split('.') if l[0] == 'omformflow' and fa and self.name == 'FormFlow': if l[-2] != fa.version: module_name = 'omformflow.production.' + flow_uuid + '.' + str( fa.version) + '.main' module = import_module(module_name) #submit threads self.threadPool.submit(getattr(module, jsonObj['method']), jsonObj['param']) except Exception as e: try: if fa: error(_('找不到main.py') + str(e)) else: error(_('找不到流程') + str(e)) except: pass sleep(0.00001)
def handle_problems(*args, **kwargs): try: return fun(*args, **kwargs) except Exception as e: if not args: error(e) else: error(e, args[0]) return ResponseAjax(statusEnum.error, e.__str__()).returnJSON()
def searchConditionBuilder(search_conditions): try: lst = [] for con in search_conditions: field = con['column'] + getConsValue(con['condition']) q_obj = Q(**{field: con['value']}) lst.append(q_obj) except Exception as e: error('', e.__str__()) finally: return lst
def ldapCheckConnect(param): ''' use ldap3 check connection input: use bind_user to connect LDAP return: connection status author: Jia Liu ''' return_result = {} try: from ldap3 import Server, Connection, ALL postdata = param.POST ldap_client_server = postdata.get('ldap_client_server', '') ldap_client_server_port = postdata.get('ldap_client_server_port', '') ldap_bind_user = postdata.get('ldap_bind_user', '') ldap_bind_user_password = postdata.get('ldap_bind_user_password', '') ldap_server = Server(host=ldap_client_server, port=int(ldap_client_server_port), use_ssl=False, get_info=ALL, connect_timeout=2) ldap_connection = Connection(ldap_server, user=ldap_bind_user, password=ldap_bind_user_password, auto_bind='NONE', version=3, authentication='SIMPLE', client_strategy='SYNC', auto_referrals=True, check_names=True, read_only=False, lazy=False, raise_exceptions=False, receive_timeout=2) ldap_connection.bind() result = ldap_connection.result if result['description'] == 'success': return_result["status"] = "success" return_result["message"] = _('LDAP連線成功') info('LDAP server connection is successful.') elif result['description'] == 'invalidCredentials': return_result["status"] = "invalidCredentials" return_result["message"] = _('LDAP帳號密碼錯誤') info('"%s" Wrong username or password.' % ldap_bind_user) ldap_connection.unbind() return return_result except Exception as e: error(e, param) return_result["status"] = "error" return_result["message"] = _('AD伺服器無法使用') return return_result
def requestAjax(request): ''' send user's service request return: json author: Arthur ''' username = request.user.username postdata = request.POST.copy() files = request.FILES.getlist('files', '') result = {} #print(postdata) if username: require_field = ['api_path', 'service_id', 'formdata'] checker = DataChecker(postdata, require_field) if checker.get('status') == 'success': #判斷權限 postdata['flow_uuid'] = FlowActiveGlobalObject.APIgetUUID( postdata.get('api_path')) thisQuery = list( OmService.objects.filter( service_id=postdata.get('service_id'))) if len(thisQuery): service_obj = thisQuery[0] #print(service_obj.default_value) service_obj = json.loads(service_obj.default_value) postdata["formdata"] = json.loads(postdata["formdata"]) for default_col in service_obj: postdata["formdata"].append(default_col) postdata["formdata"] = json.dumps(postdata["formdata"]) else: info('%s update Service error' % username, request) return ResponseAjax(statusEnum.error, _('查無此服務。')).returnJSON() result = createOmData(postdata, request.user.username, files) if result['status']: return ResponseAjax(statusEnum.success, result['message']).returnJSON() else: return ResponseAjax(statusEnum.not_found, result['message']).returnJSON() else: return ResponseAjax(statusEnum.not_found, _('缺少必填欄位。')).returnJSON() else: error('%s request_service with no permission' % username, request) return ResponseAjax(statusEnum.no_permission, _('您沒有權限進行此操作。')).returnJSON()
def updateMissionLevel(flow_uuid, data_no, level): ''' create mission. input: param return: json author: Kolin Hsu ''' try: status = True Missions.objects.filter(flow_uuid=flow_uuid, data_no=data_no, history=False).update(level=level) except Exception as e: error('update mission error: %s' % e.__str__()) status = False finally: return status
def getFormListAjax(request): ''' load form_list return: json author: Arthur ''' #Server Side Rule Check username = request.user.username result = {} if username: #static variable #omdata_list = list(filter(lambda x: re.match("^Omdata_.{32}$", x.__name__), apps.get_models())) app = list( ActiveApplication.objects.filterformat('id', 'app_name', undeploy_flag=False)) flow = list( FlowActive.objects.filterformat('id', 'flow_uuid', 'api_path', 'flow_name', 'flow_app_id', undeploy_flag=False, parent_uuid=None)) result = {'app': app, 'flow': flow} #翻譯 lang = get_language() result['app'] = Translator('datatable_multi_app', 'active', lang, None, None).Do(result['app']) result['flow'] = Translator('datatable_multi_app', 'active', lang, None, None).Do(result['flow']) return ResponseAjax(statusEnum.success, _('讀取成功。'), result).returnJSON() else: error('%s load form_list with no permission' % username, request) return ResponseAjax(statusEnum.no_permission, _('您沒有權限進行此操作。')).returnJSON()
def loadServiceAjax(request): ''' load manager's service setting return: json author: Arthur ''' #Server Side Rule Check username = request.user.username postdata = getPostdata(request) result = {} if username: #static variable # result['structure'] = OmServiceDesign.objects.all() # if request.user.has_perm('omservice.OmServiceDesign_Manager'): # result['objects'] = OmService.objects.all() # else: # #等待修改 # user_role_list = list(request.user.groups.all().values_list('id', flat=True)) # for service_obj in OmService.objects.all(): # service_role_list = json.loads(service_obj.get('role','[]')) # if len(set(user_role_list) & set(service_role_list)): # result['objects'].append(service_obj) #print(OmServiceDesign.objects.all().count()) if OmServiceDesign.objects.all().count() > 0: max = OmServiceDesign.objects.all().aggregate( Max('id')).get('id__max') result = list( OmServiceDesign.objects.filter(id=max).values('content')) box_object = json.loads(result[0]["content"]) #檢查權限 if request.user.has_perm('omservice.OmServiceDesign_Manage'): pass else: Service_List = list(OmService.objects.all()) Group_List = list(request.user.groups.all().values_list( 'id', flat=True)) if len(Group_List): Group_List.append(-1) else: Group_List = [-1] for thisSer in Service_List: if len(set(json.loads(thisSer.role)) & set(Group_List)) == 0: del box_object["list"][str(thisSer.service_id)] #檢查是否過期 this_activeList = list( FlowActive.objects.filter( undeploy_flag=0, parent_uuid__isnull=True).values_list('flow_uuid', flat=True)) this_activeList = [o.hex for o in this_activeList] for idx in box_object["list"]: #print(box_object["list"][idx]) if box_object["list"][idx]["type"] == "service": if 'api_path' in box_object["list"][idx]: flow_uuid = FlowActiveGlobalObject.APIgetUUID( box_object["list"][idx]["api_path"]) else: flow_uuid = box_object["list"][idx]["flow_uuid"] box_object["list"][idx][ "api_path"] = FlowActiveGlobalObject.UUIDgetAPI( flow_uuid) if flow_uuid in this_activeList: box_object["list"][idx]["available"] = 1 else: box_object["list"][idx]["available"] = 0 #翻譯語言 if postdata.get('type') != "source": language_type = get_language() #print(FlowActiveGlobalObject.getSysLanDict('service')) lan_package = FlowActiveGlobalObject.getSysLanDict( 'service').get(language_type, None) if lan_package: for idx in box_object["list"]: this_service = box_object["list"][idx] if this_service["setting"]["setTitle"]: this_service["setting"]["setTitle"] = lan_package[ this_service["setting"] ["setTitle"]] if checkJsonKey( lan_package, this_service["setting"]["setTitle"] ) else this_service["setting"]["setTitle"] if this_service["type"] == "service": if this_service["setting"]["setTip"]: this_service["setting"]["setTip"] = lan_package[ this_service["setting"] ["setTip"]] if checkJsonKey( lan_package, this_service["setting"]["setTip"] ) else this_service["setting"]["setTip"] for sup_idx in this_service["service"]["list"]: this_step = this_service["service"]["list"][ sup_idx] if this_step["name"]: this_step["name"] = lan_package[ this_step["name"]] if checkJsonKey( lan_package, this_step["name"] ) else this_step["name"] if this_step["tip"]: this_step["tip"] = lan_package[ this_step["tip"]] if checkJsonKey( lan_package, this_step["tip"] ) else this_step["tip"] #print(result[0]["content"]) result[0]["content"] = json.dumps(box_object) return ResponseAjax(statusEnum.success, _('讀取成功。'), result).returnJSON() else: error('%s load Service with no permission' % username, request) return ResponseAjax(statusEnum.no_permission, _('您沒有權限進行此操作。')).returnJSON()
from omuser.models import OmGroup,OmUser from django.db.models import Count from omflow.syscom.default_logger import info,error,debug from django.utils.translation import gettext as _ from omflow.global_obj import GlobalObject from omflow.models import SystemSetting import json,ast,time from omflow.syscom.license import getUsers ldpadata_json = {} from omflow.syscom.common import check_app if check_app('omldap'): try: from ldap3 import Server, Connection, ALL except Exception as e: error("LDAP error:" + str(e)) def create_LDAP_user(ldap_client_server,ldap_client_server_port,ldap_base_dn,ldap_bind_user,ldap_bind_user_password): ''' use ldap3 create user input: connect LDAP objectClass=user return: create user time author: Jia Liu ''' start = time.time() server = Server(host=ldap_client_server,port=int(ldap_client_server_port),get_info=ALL,connect_timeout=2) conn = Connection(server, ldap_bind_user, ldap_bind_user_password, auto_bind=True,receive_timeout=2) conn.search(ldap_base_dn, '(&(objectCategory=person)(objectClass=user))', attributes=['distinguishedName','sAMAccountName','cn','userPrincipalName','userAccountControl','objectSID']) result = conn.entries AD_List = list(filter(lambda x: not "CN=Users" in str(x['distinguishedName']).split(','), result)) DN_User_List = [] AD_User_List= []
def listQueryBuilder(model, param, query=None): try: res = [] status = True message = _('查詢成功。') search_conditions = param.get('search_conditions', []) search_columns = param.get('search_columns', []) exclude_conditions = param.get('exclude_conditions', []) order_columns = param.get('order_columns', []) if not order_columns: order_columns = ['id'] limit = int(param.get('limit', 100)) start = int(param.get('start', 0)) sc = searchConditionBuilder(search_conditions) ec = searchConditionBuilder(exclude_conditions) if query: if sc: if ec: res = list( query.filter(reduce(operator.and_, sc)).exclude( reduce(operator.and_, ec)).order_by( *order_columns)[start:limit].values( *search_columns)) else: res = list( query.filter(reduce( operator.and_, sc)).order_by(*order_columns)[start:limit].values( *search_columns)) else: if ec: res = list(query.filter().exclude(reduce( operator.and_, ec)).order_by(*order_columns)[start:limit].values( *search_columns)) else: res = list(query.filter().order_by( *order_columns)[start:limit].values(*search_columns)) else: if sc: if ec: res = list( model.objects.filter(reduce( operator.and_, sc)).exclude(reduce(operator.and_, ec)).order_by( *order_columns)[start:limit].values( *search_columns)) else: res = list( model.objects.filter(reduce( operator.and_, sc)).order_by(*order_columns)[start:limit].values( *search_columns)) else: if ec: res = list(model.objects.filter().exclude( reduce( operator.and_, ec)).order_by(*order_columns)[start:limit].values( *search_columns)) else: res = list(model.objects.filter().order_by( *order_columns)[start:limit].values(*search_columns)) except Exception as e: status = False message = _('查詢失敗,錯誤訊息如下:') + e.__str__() error('', e.__str__()) finally: return {'status': status, 'message': message, 'result': res}