示例#1
0
文件: sql.py 项目: myhighland/zato
def index(req):
    """ Lists all the SQL connections.
    """
    items = []
    create_form = CreateForm(req)
    edit_form = EditForm(req, prefix='edit')
    change_password_form = ChangePasswordForm()
    meta = None

    if req.zato.cluster_id and req.method == 'GET':

        request = {
            'cluster_id': req.zato.cluster_id,
            'paginate': True,
            'cur_page': req.GET.get('cur_page', 1)
        }

        data, meta = parse_response_data(
            req.zato.client.invoke('zato.outgoing.sql.get-list', request))

        for item in data:

            _item = SQLConnectionPool()

            for name in ('id', 'name', 'is_active', 'engine', 'host', 'port',
                         'db_name', 'username', 'pool_size',
                         'engine_display_name'):
                value = getattr(item, name)
                setattr(_item, name, value)

            _item.extra = item.extra or ''
            items.append(_item)

    return_data = {
        'zato_clusters': req.zato.clusters,
        'cluster_id': req.zato.cluster_id,
        'search_form': req.zato.search_form,
        'items': items,
        'create_form': create_form,
        'edit_form': edit_form,
        'change_password_form': change_password_form,
        'paginate': True,
        'meta': meta,
        'req': req,
    }

    return TemplateResponse(req, 'zato/outgoing/sql.html', return_data)
示例#2
0
文件: wss.py 项目: znavy/zato
def index(req):
    items = []
    create_form = CreateForm()
    edit_form = EditForm(prefix='edit')
    change_password_form = ChangePasswordForm()
    meta = None

    if req.zato.cluster_id and req.method == 'GET':

        request = {
            'cluster_id': req.zato.cluster_id,
            'paginate': True,
            'cur_page': req.GET.get('cur_page', 1)
        }

        data, meta = parse_response_data(
            req.zato.client.invoke('zato.security.wss.get-list', request))

        for item in data:
            wss = WSSDefinition(item.id,
                                item.name,
                                item.is_active,
                                item.username,
                                None,
                                ZATO_WSS_PASSWORD_TYPES[item.password_type],
                                item.reject_empty_nonce_creat,
                                item.reject_stale_tokens,
                                item.reject_expiry_limit,
                                item.nonce_freshness_time,
                                password_type_raw=item.password_type)

            items.append(wss)

    return_data = {
        'zato_clusters': req.zato.clusters,
        'cluster_id': req.zato.cluster_id,
        'search_form': req.zato.search_form,
        'items': items,
        'create_form': create_form,
        'edit_form': edit_form,
        'change_password_form': change_password_form,
        'paginate': True,
        'meta': meta,
        'req': req,
    }

    return TemplateResponse(req, 'zato/security/wss.html', return_data)
示例#3
0
def index(req):
    items = []
    create_form = CreateForm()
    edit_form = EditForm(prefix='edit')
    meta = None

    if req.zato.cluster_id and req.method == 'GET':
        def_ids = get_definition_list(req.zato.client, req.zato.cluster,
                                      'jms-wmq')
        create_form.set_def_id(def_ids)
        edit_form.set_def_id(def_ids)

        request = {
            'cluster_id': req.zato.cluster_id,
            'paginate': True,
            'cur_page': req.GET.get('cur_page', 1)
        }

        data, meta = parse_response_data(
            req.zato.client.invoke('zato.outgoing.jms-wmq.get-list', request))

        for item in data:
            _item = OutgoingWMQ(item.id, item.name, item.is_active,
                                item.delivery_mode, item.priority,
                                item.expiration, item.def_id,
                                delivery_friendly_name[item.delivery_mode],
                                item.def_name)
            items.append(_item)

    return_data = {
        'zato_clusters': req.zato.clusters,
        'cluster_id': req.zato.cluster_id,
        'search_form': req.zato.search_form,
        'items': items,
        'create_form': create_form,
        'edit_form': edit_form,
        'paginate': True,
        'meta': meta,
        'req': req,
    }

    return TemplateResponse(req, 'zato/outgoing/jms-wmq.html', return_data)
示例#4
0
def index(req):
    try:
        jobs = []
        meta = None

        # Build a list of schedulers for a given Zato cluster.
        if req.zato.cluster_id and req.method == 'GET':

            # We have a cluster to pick the schedulers from, try to invoke it now.

            request = {
                'cluster_id': req.zato.cluster_id,
                'paginate': True,
                'cur_page': req.GET.get('cur_page', 1),
                'query': req.GET.get('query', '')
            }

            data, meta = parse_response_data(req.zato.client.invoke('zato.scheduler.job.get-list', request))

            for job_elem in data:

                id = job_elem.id
                name = job_elem.name
                is_active = job_elem.is_active
                job_type = job_elem.job_type
                start_date = job_elem.start_date
                service_name = job_elem.service_name
                extra = job_elem.extra
                job_type_friendly = job_type_friendly_names[job_type]

                job = Job(id, name, is_active, job_type,
                          from_utc_to_user(start_date+'+00:00', req.zato.user_profile),
                          extra, service_name=service_name,
                          job_type_friendly=job_type_friendly)

                if job_type == SCHEDULER.JOB_TYPE.ONE_TIME:
                    definition_text=_one_time_job_def(req.zato.user_profile, start_date)

                elif job_type == SCHEDULER.JOB_TYPE.INTERVAL_BASED:
                    definition_text = _interval_based_job_def(req.zato.user_profile,
                        _get_start_date(job_elem.start_date),
                        job_elem.repeats, job_elem.weeks, job_elem.days,
                        job_elem.hours, job_elem.minutes, job_elem.seconds)

                    weeks = job_elem.weeks or ''
                    days = job_elem.days or ''
                    hours = job_elem.hours or ''
                    minutes = job_elem.minutes or ''
                    seconds = job_elem.seconds or ''
                    repeats = job_elem.repeats or ''

                    ib_job = IntervalBasedJob(None, None, weeks, days, hours, minutes, seconds, repeats)
                    job.interval_based = ib_job

                elif job_type == SCHEDULER.JOB_TYPE.CRON_STYLE:
                    cron_definition = job_elem.cron_definition or ''
                    definition_text=_cron_style_job_def(req.zato.user_profile, start_date, cron_definition)

                    cs_job = CronStyleJob(None, None, cron_definition)
                    job.cron_style = cs_job

                else:
                    msg = 'Unrecognized job type, name:[{0}], type:[{1}]'.format(name, job_type)
                    logger.error(msg)
                    raise ZatoException(msg)

                job.definition_text = definition_text
                jobs.append(job)

        if req.method == 'POST':

            action = req.POST.get('zato_action', '')
            if not action:
                msg = 'req.POST contains no [zato_action] parameter.'
                logger.error(msg)
                return HttpResponseServerError(msg)

            job_type = req.POST.get('job_type', '')
            if action != 'execute' and not job_type:
                msg = 'req.POST contains no [job_type] parameter.'
                logger.error(msg)
                return HttpResponseServerError(msg)

            job_name = req.POST['{0}-{1}-name'.format(action, job_type)]

            # Try to match the action and a job type with an action handler..
            handler_name = '_' + action
            if action != 'execute':
                handler_name += '_' + job_type

            handler = globals().get(handler_name)
            if not handler:
                msg = ('No handler found for action [{0}], job_type:[{1}], '
                       'req.POST:[{2}], req.GET:[{3}].'.format(action, job_type,
                          pprint(req.POST), pprint(req.GET)))

                logger.error(msg)
                return HttpResponseServerError(msg)

            # .. invoke the action handler.
            try:
                response = handler(req.zato.client, req.zato.user_profile, req.zato.cluster, req.POST)
                response = response if response else ''
                if response:
                    response['message'] = _get_success_message(action, job_type, job_name)
                    response = dumps(response)
                return HttpResponse(response, content_type='application/javascript')
            except Exception:
                msg = 'Could not invoke action `{}`, job_type:`{}`, e:`{}` req.POST:`{}`, req.GET:`{}'.format(
                    action, job_type, format_exc(), pprint(req.POST), pprint(req.GET))

                logger.error(msg)
                return HttpResponseServerError(msg)

        return_data = {'zato_clusters':req.zato.clusters,
            'cluster_id':req.zato.cluster_id,
            'search_form':req.zato.search_form,
            'jobs':jobs,
            'friendly_names':job_type_friendly_names.items(),
            'create_one_time_form':OneTimeSchedulerJobForm(create_one_time_prefix, req),
            'create_interval_based_form':IntervalBasedSchedulerJobForm(create_interval_based_prefix, req),
            'create_cron_style_form':CronStyleSchedulerJobForm(create_cron_style_prefix, req),
            'edit_one_time_form':OneTimeSchedulerJobForm(edit_one_time_prefix, req),
            'edit_interval_based_form':IntervalBasedSchedulerJobForm(edit_interval_based_prefix, req),
            'edit_cron_style_form':CronStyleSchedulerJobForm(edit_cron_style_prefix, req),
            'sample_dt': get_sample_dt(req.zato.user_profile),
            'paginate':True,
            'meta': meta,
            'req': req,
            }

        return_data.update(get_js_dt_format(req.zato.user_profile))

        return TemplateResponse(req, 'zato/scheduler.html', return_data)
    except Exception:
        msg = '<pre>Method could not be invoked, e:`{}`</pre>'.format(format_exc())
        logger.error(msg)
        return HttpResponseServerError(msg)
示例#5
0
def index(req):
    connection = req.GET.get('connection')
    transport = req.GET.get('transport')
    query = req.GET.get('query', '')
    items = []
    _security = SecurityList()

    if not all((connection, transport)):
        log_msg = "Redirecting to / because at least one of ('connection', 'transport') GET parameters was missing"
        logger.debug(log_msg)
        return HttpResponseRedirect('/')

    create_form = None
    edit_form = None
    meta = None

    colspan = 17

    if transport == 'soap':
        colspan += 2

    if req.zato.cluster_id:
        for def_item in req.zato.client.invoke('zato.security.get-list', {'cluster_id': req.zato.cluster.id}):
            if connection == 'outgoing':
                if transport == URL_TYPE.PLAIN_HTTP and def_item.sec_type not in (
                    SEC_DEF_TYPE.BASIC_AUTH, SEC_DEF_TYPE.TLS_KEY_CERT, SEC_DEF_TYPE.APIKEY):
                    continue
                elif transport == URL_TYPE.SOAP and def_item.sec_type not in (
                    SEC_DEF_TYPE.BASIC_AUTH, SEC_DEF_TYPE.NTLM, SEC_DEF_TYPE.WSS):
                    continue

            _security.append(def_item)

        _soap_versions = SOAP_CHANNEL_VERSIONS if connection == 'channel' else SOAP_VERSIONS

        tls_ca_cert_list = get_tls_ca_cert_list(req.zato.client, req.zato.cluster)

        cache_list = []

        for cache_type in (CACHE.TYPE.BUILTIN, CACHE.TYPE.MEMCACHED):
            service_name = 'zato.cache.{}.get-list'.format(cache_type)
            response = req.zato.client.invoke(service_name, {'cluster_id': req.zato.cluster.id})

            for item in sorted(response, key=itemgetter('name')):
                cache_list.append({'id':item.id, 'name':'{}/{}'.format(CACHE_TYPE[cache_type], item.name)})

        create_form = CreateForm(_security, tls_ca_cert_list, cache_list, _soap_versions, req=req)
        edit_form = EditForm(_security, tls_ca_cert_list, cache_list, _soap_versions, prefix='edit', req=req)

        input_dict = {
            'cluster_id': req.zato.cluster_id,
            'connection': connection,
            'transport': transport,
            'paginate': True,
            'cur_page': req.GET.get('cur_page', 1),
            'query': req.GET.get('query', ''),
        }

        data, meta = parse_response_data(req.zato.client.invoke('zato.http-soap.get-list', input_dict))

        for item in data:
            if query not in item.name:
                continue

            _security_name = item.security_name
            if _security_name:
                security_name = '{0}<br/>{1}'.format(SEC_DEF_TYPE_NAME[item.sec_type], _security_name)
            else:
                if item.sec_use_rbac:
                    security_name = DELEGATED_TO_RBAC
                else:
                    security_name = '<span class="form_hint">---</span>'

            security_id = get_http_channel_security_id(item)

            if item.cache_id:
                cache_name = '{}/{}'.format(CACHE_TYPE[item.cache_type], item.cache_name)
            else:
                cache_name = None

            # New in 3.0, hence optional
            match_slash = item.get('match_slash')
            if match_slash == '':
                match_slash = True

            # New in 3.1
            http_accept = item.get('http_accept') or ''

            http_soap = HTTPSOAP(item.id, item.name, item.is_active, item.is_internal, connection,
                    transport, item.host, item.url_path, item.method, item.soap_action,
                    item.soap_version, item.data_format, item.ping_method,
                    item.pool_size, item.merge_url_params_req, item.url_params_pri, item.params_pri,
                    item.serialization_type, item.timeout, item.sec_tls_ca_cert_id, service_id=item.service_id,
                    service_name=item.service_name, security_id=security_id, has_rbac=item.has_rbac,
                    security_name=security_name, content_type=item.content_type,
                    cache_id=item.cache_id, cache_name=cache_name, cache_type=item.cache_type, cache_expiry=item.cache_expiry,
                    content_encoding=item.content_encoding, match_slash=match_slash, http_accept=http_accept)

            for name in 'is_rate_limit_active', 'rate_limit_type', 'rate_limit_def', 'rate_limit_check_parent_def':
                setattr(http_soap, name, item.get(name))

            items.append(http_soap)

    return_data = {'zato_clusters':req.zato.clusters,
        'cluster_id':req.zato.cluster_id,
        'search_form':SearchForm(req.zato.clusters, req.GET),
        'items':items,
        'create_form':create_form,
        'edit_form':edit_form,
        'connection':connection,
        'transport':transport,
        'connection_label':CONNECTION[connection],
        'connection_label_plural':CONNECTION_PLURAL[connection],
        'transport_label':TRANSPORT[transport],
        'colspan': colspan,
        'default_http_ping_method':DEFAULT_HTTP_PING_METHOD,
        'default_http_pool_size':DEFAULT_HTTP_POOL_SIZE,
        'default_http_timeout':MISC.DEFAULT_HTTP_TIMEOUT,
        'paginate':True,
        'meta': meta,
        'req':req
        }

    return TemplateResponse(req, 'zato/http_soap/index.html', return_data)
示例#6
0
def index(req):
    connection = req.GET.get('connection')
    transport = req.GET.get('transport')
    items = []
    _security = SecurityList()

    if not all((connection, transport)):
        log_msg = "Redirecting to / because at least one of ('connection', 'transport') GET parameters was missing"
        logger.debug(log_msg)
        return HttpResponseRedirect('/')

    create_form = None
    edit_form = None
    meta = None

    colspan = 17

    if transport == 'soap':
        colspan += 2

    if req.zato.cluster_id:
        for def_item in req.zato.client.invoke(
                'zato.security.get-list', {'cluster_id': req.zato.cluster.id}):
            if connection == 'outgoing':
                if transport == URL_TYPE.PLAIN_HTTP and def_item.sec_type not in (
                        SEC_DEF_TYPE.BASIC_AUTH, SEC_DEF_TYPE.TLS_KEY_CERT):
                    continue
                elif transport == URL_TYPE.SOAP and def_item.sec_type not in (
                        SEC_DEF_TYPE.BASIC_AUTH, SEC_DEF_TYPE.NTLM,
                        SEC_DEF_TYPE.WSS):
                    continue

            _security.append(def_item)

        _soap_versions = SOAP_CHANNEL_VERSIONS if connection == 'channel' else SOAP_VERSIONS

        create_form = CreateForm(_security,
                                 get_tls_ca_cert_list(req.zato.client,
                                                      req.zato.cluster),
                                 _soap_versions,
                                 req=req)
        edit_form = EditForm(_security,
                             get_tls_ca_cert_list(req.zato.client,
                                                  req.zato.cluster),
                             _soap_versions,
                             prefix='edit',
                             req=req)

        input_dict = {
            'cluster_id': req.zato.cluster_id,
            'connection': connection,
            'transport': transport,
            'paginate': True,
            'cur_page': req.GET.get('cur_page', 1)
        }

        data, meta = parse_response_data(
            req.zato.client.invoke('zato.http-soap.get-list', input_dict))

        for item in data:

            _security_name = item.security_name
            if _security_name:
                security_name = '{0}<br/>{1}'.format(
                    SEC_DEF_TYPE_NAME[item.sec_type], _security_name)
            else:
                if item.sec_use_rbac:
                    security_name = DELEGATED_TO_RBAC
                else:
                    security_name = 'No security definition'

            _security_id = item.security_id
            if _security_id:
                security_id = '{0}/{1}'.format(item.sec_type, _security_id)
            else:
                if item.sec_use_rbac:
                    security_id = ZATO_SEC_USE_RBAC
                else:
                    security_id = ZATO_NONE

            item = HTTPSOAP(item.id,
                            item.name,
                            item.is_active,
                            item.is_internal,
                            connection,
                            transport,
                            item.host,
                            item.url_path,
                            item.method,
                            item.soap_action,
                            item.soap_version,
                            item.data_format,
                            item.ping_method,
                            item.pool_size,
                            item.merge_url_params_req,
                            item.url_params_pri,
                            item.params_pri,
                            item.serialization_type,
                            item.timeout,
                            item.sec_tls_ca_cert_id,
                            service_id=item.service_id,
                            service_name=item.service_name,
                            security_id=security_id,
                            has_rbac=item.has_rbac,
                            security_name=security_name,
                            content_type=item.content_type)
            items.append(item)

    return_data = {
        'zato_clusters': req.zato.clusters,
        'cluster_id': req.zato.cluster_id,
        'search_form': SearchForm(req.zato.clusters, req.GET),
        'items': items,
        'create_form': create_form,
        'edit_form': edit_form,
        'connection': connection,
        'transport': transport,
        'connection_label': CONNECTION[connection],
        'connection_label_plural': CONNECTION_PLURAL[connection],
        'transport_label': TRANSPORT[transport],
        'colspan': colspan,
        'default_http_ping_method': DEFAULT_HTTP_PING_METHOD,
        'default_http_pool_size': DEFAULT_HTTP_POOL_SIZE,
        'default_http_timeout': MISC.DEFAULT_HTTP_TIMEOUT,
        'paginate': True,
        'meta': meta,
        'req': req
    }

    return TemplateResponse(req, 'zato/http_soap/index.html', return_data)