Exemple #1
0
    def post(self, request, *args, **kwargs):
        app_code = self.kwargs["app_code"]
        logger.info("[app:%s] 开始进行[删除]...", app_code)

        username = request.user.username

        app = App.objects.get(code=app_code)
        can_be_deleted, message = app.can_be_deleted(username)
        if not can_be_deleted:
            logger.info("[app:%s] %s", app_code, message)
            return FailJsonResponse(message)

        try:
            SecureInfo.objects.filter(app_code=app_code).delete()
            App.objects.filter(code=app_code).delete()
            # 将APP的发布记录保存为上一次,避免下次创建时显示冲突
            Record.objects.filter(app_code=app_code).update(version='last')
        except Exception:
            message = "删除失败!"
            logger.exception("[app:%s] %s", app_code, message)
            return FailJsonResponse(message)

        # 操作流水日志
        extra_data = {"username": username}
        _r(app_code, username, UserOperateTypeEnum.APP_DELETE.value,
           extra_data)

        message = "删除成功!"
        logger.info("[app:%s] %s", app_code, message)
        return OKJsonResponse(message)
Exemple #2
0
def check_expected_key(response, expected_key, is_list=True):
    try:
        if is_list:
            [n[expected_key] for n in response.json()]
        else:
            response.json()[expected_key]

    except ValueError:
        error_msg = "Got non-json from API server: {} status_code={}".format(
            response.reason, response.status_code)

        logger.error(error_msg)
        raise LNUtilError(error_msg)

    except KeyError:
        error_msg = "Got invalid schema from API server: {} status_code={} response_text={}".format(
            response.reason, response.status_code, response.text)

        logger.error(error_msg)
        raise LNUtilError(error_msg)
    except TypeError as e:
        error_msg = ((
            "Is is_list correct for check_expected_key? "
            "Got TypeError for a valid response from API "
            "server: {} status_code={} response_text={} exception={}").format(
                response.reason, response.status_code, response.text, e))

        logger.exception(e)
        logger.error(error_msg)
        raise LNUtilError(error_msg)
Exemple #3
0
def write_excel(head_list, records):
    wbk = xlwt.Workbook(encoding='gbk')
    # 设置 excel 文件格式
    sheet = wbk.add_sheet('Sheet1')
    for i in range(0, 22):
        sheet.col(i).width = 0x0d00 + 2000
    fnt = xlwt.Font()
    fnt.name = 'Arial'
    fnt.colour_index = 4
    fnt.bold = True
    style = xlwt.XFStyle()
    style.font = fnt
    # 标题栏
    for i, data in enumerate(head_list):
        sheet.write(0, i, data)
    # 查询库存数据
    try:
        for index, record in enumerate(records):
            for cell_index, cell_value in enumerate(record):
                sheet.write(index + 1, cell_index, cell_value)
    except Exception as e:
        logger.exception('export excel fail, error: {}'.format(e))
        return False, _("导出数据出现错误"), wbk

    return True, 'SUCCESS', wbk
Exemple #4
0
def _http_request(method, url, headers=None, data=None):
    try:
        if method == "GET":
            resp = requests.get(url=url, headers=headers, params=data, verify=False)
        elif method == "HEAD":
            resp = requests.head(url=url, headers=headers, verify=False)
        elif method == "POST":
            resp = requests.post(url=url, headers=headers, json=data, verify=False)
        elif method == "DELETE":
            resp = requests.delete(url=url, headers=headers, json=data, verify=False)
        elif method == "PUT":
            resp = requests.put(url=url, headers=headers, json=data, verify=False)
        else:
            return False, None
    except requests.exceptions.RequestException:
        logger.exception("login http request error! type: %s, url: %s, data: %s" % (method, url, str(data)))
        return False, None
    else:
        if resp.status_code != 200:
            content = resp.content[:100] if resp.content else ''
            logger.error(
                "login http request error! type: %s, url: %s, data: %s, response_status_code: %s, response_content: %s"  # noqa
                % (method, url, str(data), resp.status_code, content))
            return False, None

        return True, resp.json()
Exemple #5
0
def get_config_item(request):
    req_data = json.loads(request.body)
    try:
        class_id = req_data['class_id']
        http = httplib2.Http()
        url = BK_PAAS_HOST + "/api/c/compapi/v2/cc/search_objects/"
        param = {
            "bk_app_code": APP_ID,
            "bk_app_secret": APP_TOKEN,
            "bk_username": "******",
            "bk_classification_id": class_id
        }
        headers = {'Content-type': 'application/json'}
        response, content = http.request(url,
                                         'POST',
                                         headers=headers,
                                         body=json.dumps(param))
        if response['status'] == "200":
            res_data = json.loads(content)
            item_list = [{
                'name': i['bk_obj_name'],
                'value': i['bk_obj_id']
            } for i in res_data['data']]
            if class_id == 'bk_host_manage':
                item_list = item_list[0:1]
                item_list[0]['name'] = "主机"
            return render_json({"result": True, "data": item_list})
        else:
            return render_json({"result": False, "msg": 'error'})
    except Exception as e:
        logger.exception("error:{0}".format(e.message))
        return render_json({"result": False, "msg": 'error'})
Exemple #6
0
def bp_access(request, cc_biz_id):
    """
    基础性能接入
    """
    args = request.POST
    hostid_list = args.get("hostid_list", "")
    ip_list = None
    if hostid_list:
        hostid_list = hostid_list.split(",")
        # 置顶ip列表接入
        ip_list = []
        for hostid in hostid_list:
            ip, plat_id = parse_host_id(hostid)
            ip_list.append({
                "ip": ip,
                "plat_id": plat_id,
            })
    try:
        result = access_performance(cc_biz_id, ip_list)
        if result.get("result"):
            return render_json(ok())
        else:
            return render_json(failed(u"基础性能接入失败:%s" % result.get("message")))
    except Exception as e:
        logger.exception(u"基础性能接入失败:%s" % e)
        return render_json(failed(u"基础性能接入失败,请联系管理员"))
Exemple #7
0
 def delete(self, request, app_code, var_id):
     try:
         AppEnvVar.objects.filter(id=var_id).delete()
     except Exception:
         logger.exception("删除app环境变量失败")
         return FailJsonResponse("删除app环境变量失败")
     return OKJsonResponse("删除成功")
Exemple #8
0
def call_endpoint(path, args={}, as_post=False, timeout=settings.API_TIMEOUT):
    if settings.READER_TO_WRITER_AUTH_TOKEN is not None:
        headers = {
            'Authorization':
            'Token {}'.format(settings.READER_TO_WRITER_AUTH_TOKEN)
        }
    else:
        headers = {}

    full_path = 'http://{}:8000/{}.json'.format(settings.WRITER_HOST, path)
    try:
        if as_post:
            return requests.post(full_path,
                                 headers=headers,
                                 data=args,
                                 timeout=timeout)
        else:
            return requests.get(full_path,
                                headers=headers,
                                params=args,
                                timeout=timeout)

    except requests.exceptions.ConnectionError as e:
        logger.exception(e)
        raise LNUtilError(
            "ConnectionError when connecting to {}".format(full_path))
Exemple #9
0
    def send_mail(self, kwargs):
        mail_sender = kwargs['sender']
        all_receiver = kwargs['receiver'] + kwargs['cc']

        if kwargs.get('mime_subtype'):
            msg = MIMEMultipart(kwargs['mime_subtype'])
        else:
            msg = MIMEMultipart()
        msg['Subject'] = Header(smart_str(kwargs['title']), 'utf-8')
        msg['From'] = mail_sender
        msg['To'] = COMMASPACE.join(kwargs['receiver'])
        msg['Cc'] = COMMASPACE.join(kwargs['cc'])

        # 添加邮件内容
        self.add_content_to_msg(msg, kwargs['content'],
                                kwargs.get('body_format'))

        # 加载附件
        self.add_attachment_to_msg(msg, kwargs.get('attachments'))

        try:
            smtp = self.get_smtp_client()
            smtp.sendmail(mail_sender, all_receiver, msg.as_string())
            smtp.quit()
        except Exception:
            logger.exception('%s send mail exception, server: %s:%s',
                             bk_error_codes.REQUEST_SMTP_ERROR.code,
                             self.smtp_host, self.smtp_port)
            return {'result': False, 'message': 'Failed to send mail'}
        else:
            return {'result': True, 'message': 'Succeeded to send mail'}
Exemple #10
0
def down_cvs(request):
    try:
        instances = DbInstance.objects.filter(
            dbcluster__sysname__db_type='MySQL')
        data_list = []
        for i in instances:
            mysql_instance = MysqlInstance.objects.get(dbinstance=i)
            data_list.append([
                i.dbcluster.sysname.sys_name, i.dbcluster.sysname.sys_code,
                i.dbcluster.sysname.department, i.dbcluster.cluster_name,
                i.instance_name, i.ip, i.port, i.role,
                mysql_instance.mysql_version, i.base_dir,
                mysql_instance.param_dir, mysql_instance.backup_path,
                mysql_instance.is_read_only
            ])
        f = codecs.open('MySQL-Info.csv', 'wb', "gbk")
        writer = csv.writer(f)
        writer.writerow([
            u"系统名", u"系统简称", u"所属产品线", u"集群名", u"实例名", u"IP地址", u"端口", u"主从角色",
            u"数据库版本", u"安装目录", u"参数路径", u"备份路径", u"是否只读"
        ])
        writer.writerows(data_list)
        f.close()
        file_path = "{0}/MySQL-Info.csv".format(PROJECT_ROOT).replace(
            "\\", "/")
        file_name = "MySQL-Info.csv"
        return download_file(file_path, file_name)
    except Exception as e:
        logger.exception('download cvs file error:{0}'.format(e.message))
        return False
Exemple #11
0
    def _request(self, method, request, system_name, component_name):
        components_manager = get_components_manager()
        comp_cls = components_manager.get_comp_by_compname(
            system_name, component_name)
        if not comp_cls:
            raise error_codes.COMPONENT_NOT_FOUND.format_prompt(
                'system_name: %s, component_name: %s' %
                (system_name.upper(), component_name))  # noqa
        comp = comp_cls()
        self.patch_request_common(request)
        comp.set_request(CompRequest(wsgi_request=request))
        try:
            response = comp.invoke()
        except APIError as e:
            response = e.code.as_dict()
        except:
            logger.exception('Request exception, request_id=%s, path=%s' %
                             (request.g.request_id, request.path))
            response = CommonAPIError(
                'Component error, please contact the component developer'
            ).code.as_dict()

        response['request_id'] = request.g.request_id
        response = format_resp_dict(response)
        return JsonResponse(response)
Exemple #12
0
 def ip_port(self):
     try:
         server_info = json.loads(self.server_info)
         return server_info.get('ip_port', '')
     except Exception:
         logger.exception("获取服务器端口信息异常: server_info=%s", self.server_info)
         return ''
Exemple #13
0
 def ip_address(self):
     try:
         server_info = json.loads(self.server_info)
         return server_info.get('ip_address', '')
     except Exception:
         logger.exception("获取服务器IP信息异常: server_info=%s", self.server_info)
         return ''
Exemple #14
0
 def my_listener(event):
     """事件监听"""
     if event.exception:
         logger.exception('========== The job crashed :( ==========')
         logger.exception(str(event.exception))
     else:
         logger.info('============ The job worked :) ===========')
def get_module_item_list(request):
    try:
        module_id = request.GET['module_id']
        os_type = CheckModule.objects.get(id=int(module_id)).os_type
        sys_module_id = CheckModule.objects.get(created_by='system', base_module_id=0, os_type=os_type).id
        value_list = CheckItemValue.objects.filter(check_module_id=module_id).exclude(check_item__item_type='info')
        return_data = []
        id_list = []
        for i in value_list:
            tmp = {'menu_one': i.check_item.first_menu_name, 'menu_two': i.check_item.menu_name, 'name': i.check_item.name, 
               'cn_name': i.check_item.cn_name, 'value': i.value, 'compare_way': i.check_item.compare_way, 'can_modified': i.check_item.enabled_change, 
               'is_checked': True, 'check_item_id': i.check_item.id}
            id_list.append(i.check_item_id)
            return_data.append(tmp)

        custom_item_list = get_custom_item_list(module_id)
        no_check_item_list = CheckItemValue.objects.filter(check_module_id=sys_module_id).exclude(check_item_id__in=id_list).exclude(check_item__item_type='info')
        return_data += [ {'menu_one': i.check_item.first_menu_name, 'menu_two': i.check_item.menu_name, 'name': i.check_item.name, 'cn_name': i.check_item.cn_name, 'value': i.value, 'compare_way': i.check_item.compare_way, 'can_modified': i.check_item.enabled_change, 'is_checked': False, 'check_item_id': i.check_item.id} for i in no_check_item_list
                       ]
        return_data.sort(lambda x, y: cmp(x['check_item_id'], y['check_item_id']))
        menus = ItemMenu.objects.all().values('name').order_by('order').distinct()
        menu_list = []
        for i in menus:
            menu_two = ItemMenu.objects.filter(name=i['name']).order_by('child_order')
            menu_two_list = [ {'name': u.child_name, 'isShow': True, 'is_checked': True} for u in menu_two ]
            menu_list.append({'menu_one': i['name'], 'isShow': True, 'is_checked': True, 'menu_two': menu_two_list})

        return render_json({'result': True, 'data': return_data, 'menu_list': menu_list, 'custom_item_list': custom_item_list})
    except Exception as e:
        logger.exception(e)
        return render_json({'result': False, 'data': [u'\u7cfb\u7edf\u5f02\u5e38\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01']})
Exemple #16
0
def url_split(url):
    obj = {}
    if url:
        r = urlparse.urlparse(url.lower())
        obj = {
            'scheme': r.scheme,
            'hostname': r.hostname,
            'path': r.path,
            'params': {}
        }

        if r.query:
            for q in re.split('&', r.query):
                if q:
                    #处理url中的中文
                    try:
                        q = targetDecode(
                            q)  #urlparse.unquote(q).decode('utf-8')
                    except Exception as e:
                        logger.debug(q)
                        logger.exception(e.message)

                    pa = re.split('=', q)
                    if pa[0]:
                        obj['params'][pa[0].strip()] = pa[1].strip(
                        ) if len(pa) > 1 else ''

    return obj
Exemple #17
0
    def post(self, request):
        """添加/编辑第三方服务信息
        """
        form = ExternalServerForm(request.POST)
        if not form.is_valid():
            message = first_error_message(form)
            raise BadRequestException(message)

        server_id = form.cleaned_data["server_id"]
        server_ip = form.cleaned_data["server_ip"]
        server_port = form.cleaned_data["server_port"]
        server_cate = form.cleaned_data["server_cate"]
        username = form.cleaned_data["username"]
        password = form.cleaned_data["password"]

        if ThirdServer.objects.is_server_exists(server_id, server_ip,
                                                server_port):
            message = "IP为[{ip}], 端口为 [{port}] 的服务器已经存在".format(
                ip=server_ip, port=server_port)
            return FailJsonResponse(message)

        try:
            data = ThirdServer.objects.update_or_create_server(
                server_id, server_ip, server_port, username, password,
                server_cate)
            return OKJsonResponse("保存成功", data=data)
        except Exception as e:
            logger.exception("保存服务信息异常:%s", e)
            return FailJsonResponse("保存出错", data={})
Exemple #18
0
def get_config_class(request):
    try:
        http = httplib2.Http()
        url = BK_PAAS_HOST + "/api/c/compapi/v2/cc/search_classifications/"
        param = {
            "bk_app_code": APP_ID,
            "bk_app_secret": APP_TOKEN,
            "bk_username": '******'
        }
        headers = {'Content-type': 'application/json'}
        response, content = http.request(url,
                                         'POST',
                                         headers=headers,
                                         body=json.dumps(param))
        if response['status'] == "200":
            res_data = json.loads(content)
            class_list = [{
                'name': i['bk_classification_name'],
                'value': i['bk_classification_id']
            } for i in res_data['data']]
            # name_list = [i['bk_classification_name'] for i in res_data['data']]
            class_list = class_list[3:]
            class_list.insert(0, {"name": "主机管理", "value": "bk_host_manage"})
            return render_json({"result": True, "data": class_list})
        else:
            return render_json({"result": False, "msg": 'error'})
    except Exception as e:
        logger.exception("error:{0}".format(e.message))
        return render_json({"result": False, "msg": 'error'})
Exemple #19
0
    def post(self, request):
        server_id = request.POST.get('server_id', '')
        try:
            server = ThirdServer.objects.get(id=server_id)
        except Exception:
            logger.exception("服务信息[id:%s]不存在", server_id)
            return FailJsonResponse("服务信息不存在,请重新添加")

        if server.is_active:
            return FailJsonResponse("服务已激活")

        # V1 版本 判断只能激活一台服务器
        active_server = ThirdServer.objects.category_has_active_server(
            server.category, server_id)
        if active_server:
            message = "已经有一台 {} 服务被激活<br><br>不能再激活其他 {} 服务".format(
                active_server.get_category_display(),
                active_server.get_category_display())
            return FailJsonResponse(message)

        ok, message = activate_service(server.category, server_id)
        if not ok:
            return FailJsonResponse("服务激活失败: {}".format(message))

        return OKJsonResponse("服务已激活")
def _http_request(method, url, headers=None, data=None):
    try:
        if method == "GET":
            resp = requests.get(url=url,
                                headers=headers,
                                params=data,
                                verify=False)
        elif method == "HEAD":
            resp = requests.head(url=url, headers=headers)
        elif method == "POST":
            resp = requests.post(url=url,
                                 headers=headers,
                                 json=data,
                                 verify=False)
        elif method == "DELETE":
            resp = requests.delete(url=url,
                                   headers=headers,
                                   json=data,
                                   verify=False)
        elif method == "PUT":
            resp = requests.put(url=url,
                                headers=headers,
                                json=data,
                                verify=False)
        else:
            return False, None
    except requests.exceptions.RequestException, e:
        logger.exception(
            "login http request error! type: %s, url: %s, data: %s" %
            (method, url, str(data)))
        return False, None
Exemple #21
0
    def post(self, request):
        """添加/编辑AppServer信息
        """
        form = ServerForm(request.POST)
        if not form.is_valid():
            message = first_error_message(form)
            raise BadRequestException(message)

        server_id = form.cleaned_data["server_id"]
        server_ip = form.cleaned_data["server_ip"]
        server_port = form.cleaned_data["server_port"]
        app_port = form.cleaned_data["app_port"]
        server_cate = form.cleaned_data["server_cate"]

        # 验证 ip & port 是否重复
        if BkServer.objects.is_server_exists(server_id, server_ip,
                                             server_port):
            message = "IP为[{ip}], 端口为 [{port}] 的服务器已经存在".format(
                ip=server_ip, port=server_port)
            return FailJsonResponse(message)

        # 编辑信息
        try:
            data = BkServer.objects.update_or_create_server(
                server_id, server_ip, server_port, app_port, server_cate)
            return OKJsonResponse("保存成功", data=data)
        except Exception as e:
            logger.exception("保存应用服务器信息异常:%s", e)
            return FailJsonResponse("保存出错", data={})
Exemple #22
0
def get_host_property_list(request, cc_biz_id):
    """
    获取业务主机属性
    """
    property_list = [{'id': '0', 'text': u'全部'}]
    property_tag = (
        ("standard", u"标准属性"),
        ("customer", u"自定义属性"),
    )
    try:
        result = CCBiz.host_property_list(cc_biz_id)
        for tag, tag_name in property_tag:
            property_info = result.get(tag)
            if property_info:
                children = list()
                for _id, desc in property_info.iteritems():
                    if desc == "Cpu":
                        desc = desc.upper()
                    children.append({'id': _id, 'text': desc})
                if tag == "standard":
                    children = filter(
                        lambda c: c['id'] in DISPLAY_STANDARD_PROPERTY_LIST,
                        children)
                    children.sort(key=lambda x: DISPLAY_STANDARD_PROPERTY_LIST.
                                  index(x['id']))
                property_list.append({"text": tag_name, "children": children})
    except Exception as e:
        logger.exception(u"获取主机属性列表失败,错误详情:%s" % e)
    finally:
        return render_json({'result': True, 'data': property_list})
Exemple #23
0
    def post(self, request):
        server_id = request.POST.get('server_id', '')
        try:
            server = BkServer.objects.get(id=server_id)
        except Exception:
            logger.exception("服务器信息[id:%s]不存在", server_id)
            return FailJsonResponse("服务器信息不存在,请重新添加")

        if server.is_active:
            return OKJsonResponse("服务器已激活")

        # V1 版本 判断 测试环境/正式环境 分别只能激活一台服务器
        active_server = BkServer.objects.category_has_active_server(
            server.category, server_id)
        if active_server:
            message = "已经有一台{} [IP:{}, 端口:{}] 被激活<br><br>不能再激活其他{}".format(
                active_server.get_category_display(), active_server.ip_address,
                active_server.ip_port, active_server.get_category_display())
            return FailJsonResponse(message)

        ok, message = activate_agent(server_id)
        if not ok:
            return FailJsonResponse("服务器激活失败: {}".format(message))

        return OKJsonResponse("服务器已激活")
Exemple #24
0
 def get_settings(self):
     try:
         settings = json.loads(self.settings)
     except Exception:
         settings = {}
         logger.exception("应用配置信息解析异常")
     return settings
Exemple #25
0
 def get_hc_info(self, dc_moId):
     try:
         si = self._connect_vc()
         content = si.RetrieveContent()
         dc = self._get_obj_bymoId(content, [vim.Datacenter], dc_moId)
         container = content.viewManager.CreateContainerView(
             dc.hostFolder, [vim.ComputeResource], True)
         hc_data = []
         for i in container.view:
             if isinstance(i, vim.ClusterComputeResource):
                 hc_data.append({
                     "hc_moId": i._moId,
                     "hc_name": i.name,
                     "type": "ClusterComputer"
                 })
             else:
                 hc_data.append({
                     "hc_moId": i._moId,
                     "hc_name": i.name,
                     "type": "Computer"
                 })
         return {"result": True, "data": hc_data}
     except Exception, e:
         logger.exception("get_hc_info")
         return {"result": False, "message": str(e)}
Exemple #26
0
    def post_request(self, host, path, data=None, headers_json=True, **kwargs):
        headers = {}
        if not headers_json:
            headers = {'Content-type': 'application/x-www-form-urlencoded'}
            data = urllib.urlencode(data)
        response = self.request('POST',
                                host,
                                path,
                                data=data,
                                headers=headers,
                                **kwargs)
        try:
            code = str(response['code'])
        except Exception:
            logger.exception('response: %s', response)
            raise CommonAPIError(
                'An error occurred while requesting CC interface, '
                'the response content does not contain code field.')

        if code != '0':
            return {
                'result': False,
                'message': response.get('extmsg') or response.get('msg')
                or 'An unknown error occurred',
                'error': {
                    'error_data': {
                        'api_spec': response
                    }
                }
            }
        else:
            return {'result': True, 'data': response.get('data')}
Exemple #27
0
def _http_request(method, url, headers=None, data=None):
    try:
        if method == "GET":
            resp = requests.get(url=url, headers=headers, params=data)
        elif method == "HEAD":
            resp = requests.head(url=url, headers=headers)
        elif method == "POST":
            resp = requests.post(url=url, headers=headers, json=data)
        elif method == "DELETE":
            resp = requests.delete(url=url, headers=headers, json=data)
        elif method == "PUT":
            resp = requests.put(url=url, headers=headers, json=data)
        else:
            return False, None
    except requests.exceptions.RequestException:
        logger.exception("login http request error! type: %s, url: %s, data: %s" % (method, url, str(data)))
        return False, None
    else:
        if resp.status_code != 200:
            content = resp.content[:100] if resp.content else ''
            logger.error("login http request error! type: %s, url: %s, data: %s, response_status_code: %s, response_content: %s"  # noqa
                         % (method, url, str(data), resp.status_code, content))
            return False, None

        return True, resp.json()
Exemple #28
0
def get_item_list(request):
    try:
        filter_obj = eval(request.body)
        if not filter_obj['os_type']:
            custom_items = CustomItem.objects.filter(
                cn_name__icontains=filter_obj['name']).order_by(
                    '-id').values()
        else:
            custom_items = CustomItem.objects.filter(
                cn_name__icontains=filter_obj['name'],
                os_type=str(filter_obj['os_type'])).order_by('-id').values()
        return_data = list(custom_items)
        for item_obj in return_data:
            item_obj['os_name'] = 'SUSE' if str(
                item_obj['os_type']) == '2' else 'CentOS\xe3\x80\x81Redhat'

        return render_json({'result': True, 'data': return_data})
    except Exception as e:
        logger.exception(e)
        return render_json({
            'result':
            False,
            'data': [
                u'\u7cfb\u7edf\u5f02\u5e38\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01'
            ]
        })
Exemple #29
0
    def get(self, request, *args, **kwargs):

        initial = dict()

        if "memo" in kwargs:
            memo = json_util.deserialize_memo(kwargs["memo"])

            if "parent_post_id" in memo:
                expected_memo_keys = ["parent_post_id", "post_type", "content"]
                self.form_class = ShortForm
            else:
                expected_memo_keys = [
                    "title", "post_type", "tag_val", "content"
                ]

            for key in expected_memo_keys:
                initial[key] = memo[key]
        else:
            # Attempt to prefill from GET parameters
            for key in "title post_type tag_val content".split():
                value = request.GET.get(key)
                if value:
                    initial[key] = value

        try:
            context = self.get_context_data(**kwargs)
        except Exception as e:
            logger.exception(e)
            raise

        context['form'] = self.form_class(initial=initial)
        context['errors_detected'] = False

        return render(request, self.template_name, context)
Exemple #30
0
    def format_response(self, response):
        try:
            response = json.loads(response)
        except Exception:
            return {
                'result': False,
                'code': 1306000,
                'message': 'Request interface error, response: %s' % response,
            }
        try:
            bk_error_code = response['bk_error_code']
        except Exception:
            logger.exception('response: %s', response)
            raise CommonAPIError(
                'An exception occurred while requesting CC interface, '
                'please contact the component developer to handle it.')

        if bk_error_code == 0:
            return {
                'result': True,
                'code': 0,
                'data': response.get('data'),
                'message': response.get('bk_error_msg') or '',
            }
        else:
            return {
                'result': False,
                'code': bk_error_code,
                'data': response.get('data'),
                'message': response.get('bk_error_msg') or '',
            }
Exemple #31
0
    def post(self, request, *args, **kwargs):
        try:
            context = self.get_context_data(**kwargs)
        except Exception as e:
            logger.exception(e)
            raise

        invoice_pre_validation = request.POST.get("invoice")
        sign_pre_validation = request.POST.get("signature")

        if not invoice_pre_validation:
            # Invoice not provided, back to first form to get invoice

            form1 = self.form_class1(request.POST)
            context['invoice_form'] = form1
            context['errors_detected'] = True

        elif not sign_pre_validation:
            # Time to sign
            form2 = self.form_class2(initial={
                "invoice": invoice_pre_validation,
                "signature": ""
            })
            context['sign_form'] = form2
            context['invoice'] = invoice_pre_validation

        elif invoice_pre_validation and sign_pre_validation:
            # Got everything
            form2 = self.form_class2(request.POST)
            context['sign_form'] = form2
            context['invoice'] = invoice_pre_validation

            error_summary_list = []

            if not form2.is_valid():
                context['errors_detected'] = True
            else:
                # make API call and report back the results, potentially populating error_summary_list
                award_id = int(context["award_id"])
                node_id = int(context["node_id"])

                result = ln.payaward(node_id=node_id,
                                     award_id=award_id,
                                     invoice=invoice_pre_validation,
                                     sig=sign_pre_validation)

                if result["payment_successful"] == True:
                    return render(request, "payment_successful.html", context)
                else:
                    error_summary_list.append("Payment failed: {}".format(
                        result["failure_message"]))

                    context['errors_detected'] = True
                    context["show_error_summary"] = True
                    context["error_summary_list"] = error_summary_list

        else:
            raise ln.LNUtilError("Invalid state")

        return render(request, self.template_name, context)