Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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
Exemple #4
0
 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)
Exemple #5
0
 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()
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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()
Exemple #9
0
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
Exemple #10
0
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()
Exemple #11
0
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()
Exemple #12
0
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= []
Exemple #13
0
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}