コード例 #1
0
    def post(self, request, *args, **kwargs):
        """
        同步插件模板
        :param request:
        :param args:
        :param kwargs:
        :return:
        """
        try:
            if not self.user.is_sys_admin:
                if not user_services.is_user_admin_in_current_enterprise(self.user, self.tenant.enterprise_id):
                    return Response(general_message(403, "current user is not enterprise admin", "非企业管理员无法进行此操作"),
                                    status=403)

            ent = enterprise_repo.get_enterprise_by_enterprise_id(self.tenant.enterprise_id)
            if ent and not ent.is_active:
                result = general_message(10407, "failed", "用户未跟云市认证")
                return Response(result, 500)

            plugin_data = request.data
            data = {
                'plugin_key': plugin_data["plugin_key"],
                'version': plugin_data['version']
            }

            market_plugin_service.sync_market_plugin_templates(self.user, self.tenant, data)
            result = general_message(200, "success", "同步成功")
            return Response(result, 200)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            return Response(result, 500)
コード例 #2
0
    def get(self, request, *args, **kwargs):
        """
        查询远端云市的应用
        ---
        parameters:
            - name: app_name
              description: 搜索的服务名
              required: false
              type: string
              paramType: query
            - name: is_complete
              description: 是否已下载
              required: false
              type: boolean
              paramType: query
            - name: page
              description: 当前页
              required: true
              type: string
              paramType: query
            - name: page_size
              description: 每页大小,默认为10
              required: true
              type: string
              paramType: query
        """
        page = request.GET.get("page", 1)
        page_size = request.GET.get("page_size", 10)
        app_name = request.GET.get("app_name", None)
        open_query = request.GET.get("open_query", False)
        try:
            if not open_query:
                ent = enterprise_repo.get_enterprise_by_enterprise_id(
                    self.tenant.enterprise_id)
                if ent and not ent.is_active:
                    result = general_message(10407, "failed", "用户未跟云市认证")
                    return Response(result, 500)
            total, apps = market_app_service.get_remote_market_apps(
                self.tenant, int(page), int(page_size), app_name)

            result = general_message(200,
                                     "success",
                                     "查询成功",
                                     list=apps,
                                     total=total,
                                     next_page=int(page) + 1)
        except HttpClient.CallApiError as e:
            logger.exception(e)
            if e.status == 403:
                return Response(general_message(10407, "no cloud permission",
                                                u"云端授权未通过"),
                                status=403)
            else:
                return Response(general_message(500, "call cloud api failure",
                                                u"云端获取应用列表失败"),
                                status=500)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
コード例 #3
0
 def add_service_perm(self, current_user, user_id, tenant, service,
                      identity):
     if current_user.user_id == user_id:
         return 409, u"不能给自己添加应用权限", None
     user = user_repo.get_user_by_user_id(user_id)
     if not user:
         return 404, "用户{0}不存在".format(user_id), None
     service_perm = service_perm_repo.get_service_perm_by_user_pk(
         service.ID, user_id)
     if service_perm:
         return 409, "用户{0}已有权限,无需添加".format(user.nick_name), None
     service_perm = service_perm_repo.add_service_perm(
         user_id, service.ID, identity)
     perm_tenant = perms_repo.get_user_tenant_perm(tenant.ID, user_id)
     enterprise = None
     try:
         enterprise = enterprise_repo.get_enterprise_by_enterprise_id(
             tenant.enterprise_id)
     except Exception as e:
         pass
     if not perm_tenant:
         perm_info = {
             "user_id": user.user_id,
             "tenant_id": tenant.ID,
             "identity": "access",
             "enterprise_id": enterprise.ID if enterprise else 0
         }
         perm_tenant = perms_repo.add_user_tenant_perm(perm_info)
     logger.debug("service_perm {0} , perm_tenant {1}".format(
         service_perm, perm_tenant))
     return 200, "已向用户{0}授权".format(user.nick_name), service_perm
コード例 #4
0
    def get(self, request, *args, **kwargs):
        """
        查询远端云市指定版本的应用

        """
        version = request.GET.get("version", None)
        app_name = request.GET.get("app_name", None)
        group_key = request.GET.get("group_key", None)
        if not group_key or not app_name or not version:
            result = general_message(400, "not config", "参数缺失")
            return Response(result, status=400)
        try:
            ent = enterprise_repo.get_enterprise_by_enterprise_id(
                self.tenant.enterprise_id)
            if ent and not ent.is_active:
                result = general_message(10407, "failed", "用户未跟云市认证")
                return Response(result, 500)

            total, apps = market_app_service.get_market_version_apps(
                self.tenant, app_name, group_key, version)

            result = general_message(200, "success", "查询成功", list=apps)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
コード例 #5
0
 def get(self, request, enterprise_id, *args, **kwargs):
     enter = enterprise_repo.get_enterprise_by_enterprise_id(enterprise_id=enterprise_id)
     ent = enter.to_dict()
     if ent:
         ent.update(EnterpriseConfigService(enterprise_id).initialization_or_get_config)
     result = general_message(200, "success", "查询成功", bean=ent)
     return Response(result, status=result["code"])
コード例 #6
0
    def post(self, request, *args, **kwargs):
        """
        同步云市插件分享
        :param request:
        :param args:
        :param kwargs:
        :return:
        """
        try:
            if not self.user.is_sys_admin:
                if not user_services.is_user_admin_in_current_enterprise(self.user, self.tenant.enterprise_id):
                    return Response(
                        general_message(403, "current user is not enterprise admin", "非企业管理员无法进行此操作"), status=403
                    )

            ent = enterprise_repo.get_enterprise_by_enterprise_id(self.tenant.enterprise_id)
            if ent and not ent.is_active:
                result = general_message(10407, "failed", "用户未跟云市认证")
                return Response(result, 500)

            page = request.GET.get('page', 1)
            limit = request.GET.get('limit', 10)
            plugin_name = request.GET.get('plugin_name', '')

            plugins, total = market_plugin_service.sync_market_plugins(
                self.tenant, self.user, page, limit, plugin_name
            )
            result = general_message(200, "success", "同步成功", list=plugins, total=total)
            return Response(result, 200)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            return Response(result, 500)
コード例 #7
0
    def get(self, request, enterprise_id, *args, **kwargs):
        """
        查询远端云市指定版本的应用

        """
        version = request.GET.get("version", None)
        app_name = request.GET.get("app_name", None)
        app_id = request.GET.get("app_id", None)
        if not app_id or not app_name or not version:
            result = general_message(400, "not config", "参数缺失")
            return Response(result, status=400)
        try:
            ent = enterprise_repo.get_enterprise_by_enterprise_id(enterprise_id)
            if ent and not ent.is_active:
                result = general_message(10407, "failed", "用户未跟云市认证")
                return Response(result, 500)

            total, apps = market_app_service.get_market_version_apps(enterprise_id, app_name, app_id, version)

            result = general_message(200, "success", "查询成功", list=apps)
        except HttpClient.CallApiError as e:
            logger.exception(e)
            if e.status == 403:
                return Response(general_message(10407, "no cloud permission", u"云端授权未通过"), status=403)
            else:
                return Response(general_message(500, "call cloud api failure", u"云端获取应用列表失败"), status=500)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
コード例 #8
0
ファイル: base.py プロジェクト: goodrain/rainbond-console
 def initial(self, request, *args, **kwargs):
     super(EnterpriseHeaderView, self).initial(request, *args, **kwargs)
     eid = kwargs.get("eid", None)
     if not eid:
         raise ImportError("enterprise_id not found !")
     self.enterprise = enterprise_repo.get_enterprise_by_enterprise_id(eid)
     if not self.enterprise:
         raise NotFound("enterprise id: {};enterprise not found".format(eid))
コード例 #9
0
    def post(self, request, *args, **kwargs):
        """
        同步下载云市组详情模板到云帮
        ---
        parameters:
            - name: tenantName
              description: 团队名称
              required: true
              type: string
              paramType: path
            - name: body
              description: 需要同步的应用[{"group_key":"xxxxxxx","version":"xxxxxx","template_version":"xxxx"}]
              required: true
              type: string
              paramType: body
        """
        try:
            group_key = request.data.get("group_key", None)
            group_version = request.data.get("group_version", [])
            template_version = request.data.get("template_version", "v2")
            if not group_version or not group_key:
                return Response(general_message(400, "app is null",
                                                "请指明需要更新的应用"),
                                status=400)
            ent = enterprise_repo.get_enterprise_by_enterprise_id(
                self.tenant.enterprise_id)
            if ent and not ent.is_active:
                result = general_message(10407, "failed", "用户未跟云市认证")
                return Response(result, 500)

            if not self.user.is_sys_admin:
                if not user_services.is_user_admin_in_current_enterprise(
                        self.user, self.tenant.enterprise_id):
                    return Response(general_message(
                        403, "current user is not enterprise admin",
                        "非企业管理员无法进行此操作"),
                                    status=403)
            logger.debug("start synchronized market apps detail")
            enterprise = enterprise_services.get_enterprise_by_enterprise_id(
                self.tenant.enterprise_id)
            if not enterprise.is_active:
                return Response(general_message(10407,
                                                "enterprise is not active",
                                                "您的企业未激活"),
                                status=403)

            for version in group_version:
                market_sycn_service.down_market_group_app_detail(
                    self.user, self.tenant, group_key, version,
                    template_version)
            result = general_message(200, "success", "应用同步成功")
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
コード例 #10
0
 def get(self, request, *args, **kwargs):
     """
     查询企业信息
     """
     try:
         enterprise_id = request.GET.get("enterprise_id", None)
         if not enterprise_id:
             enter = enterprise_repo.get_enterprise_by_enterprise_id(
                 enterprise_id=self.user.enterprise_id)
             enterprise_id = enter.enterprise_id
         enterprise_info = enterprise_repo.get_enterprise_by_enterprise_id(
             enterprise_id=enterprise_id)
         result = general_message(200,
                                  "success",
                                  "查询成功",
                                  bean=enterprise_info.to_dict())
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
     return Response(result, status=result["code"])
コード例 #11
0
ファイル: team.py プロジェクト: yangkaa/rainbond-console
 def get(self, request, team_name, *args, **kwargs):
     page = int(request.GET.get("page", 1))
     page_size = int(request.GET.get("page_size", 10))
     query = request.GET.get("query")
     tenant = team_repo.get_tenant_by_tenant_name(team_name)
     if not tenant:
         result = general_message(404, "not found", "团队不存在")
         return Response(data=result, status=404)
     enterprise = enterprise_repo.get_enterprise_by_enterprise_id(tenant.enterprise_id)
     user_list = team_services.get_not_join_users(enterprise, tenant, query)
     total = len(user_list)
     data = user_list[(page - 1) * page_size:page * page_size]
     result = general_message(200, None, None, list=data, page=page, page_size=page_size, total=total)
     return Response(data=result, status=200)
コード例 #12
0
 def update_appstore_info(self, eid, data):
     ent = enterprise_repo.get_enterprise_by_enterprise_id(eid)
     # raise TenantEnterpriseToken.DoesNotExist
     tet = TenantEnterpriseToken.objects.get(enterprise_id=ent.ID)
     access_url = data["access_url"]
     tet.access_url = access_url
     tet.access_id = ""
     tet.access_token = ""
     tet.save()
     setattr(ent, "access_url", access_url)
     appstore_name = ""
     if "api.goodrain.com" in tet.access_url:
         appstore_name = "好雨科技公有应用市场(默认)"
     setattr(ent, "appstore_name", appstore_name)
     return ent
コード例 #13
0
ファイル: team.py プロジェクト: yangkaa/rainbond-console
    def get(self, request, *args, **kwargs):
        """
        查询企业信息
        """
        enter = enterprise_repo.get_enterprise_by_enterprise_id(enterprise_id=self.team.enterprise_id)
        ent = enter.to_dict()
        is_ent = False
        try:
            res, body = region_api.get_api_version_v2(self.team.tenant_name, self.response_region)
            if res.status == 200 and body is not None and "enterprise" in body["raw"]:
                is_ent = True
        except region_api.CallApiError as e:
            logger.warning("数据中心{0}不可达,无法获取相关信息: {1}".format(self.response_region.region_name, e.message))
        ent["is_enterprise"] = is_ent

        result = general_message(200, "success", "查询成功", bean=ent)
        return Response(result, status=result["code"])
コード例 #14
0
    def add_user_service_perm(self, current_user, user_list, tenant, service,
                              perm_list):
        """添加用户在一个应用中的权限"""
        if current_user.user_id in user_list:
            return 409, u"不能给自己添加应用权限", None
        for user_id in user_list:
            user = user_repo.get_user_by_user_id(user_id)
            if not user:
                return 404, "用户{0}不存在".format(user_id), None

            service_perm = service_perm_repo.get_service_perm_by_user_pk_service_pk(
                service_pk=service.ID, user_pk=user_id)
            if service_perm:
                return 409, "用户{0}已有权限,无需添加".format(user.nick_name), None

        service_perm_repo.add_user_service_perm(user_ids=user_list,
                                                service_pk=service.ID,
                                                perm_ids=perm_list)

        enterprise = None
        try:
            enterprise = enterprise_repo.get_enterprise_by_enterprise_id(
                tenant.enterprise_id)
        except Exception as e:
            logger.exception(e)
            pass

        for user_id in user_list:
            perm_tenant = perms_repo.get_user_tenant_perm(tenant.ID, user_id)

            if not perm_tenant:
                perm_info = {
                    "user_id": user_id,
                    "tenant_id": tenant.ID,
                    "role_id": role_repo.get_role_id_by_role_name("viewer"),
                    "enterprise_id": enterprise.ID if enterprise else 0
                }
                perm_tenant = perms_repo.add_user_tenant_perm(perm_info)

        return 200, "添加用户应用权限成功", None
コード例 #15
0
 def get_enterprise_by_enterprise_id(self, enterprise_id, exception=True):
     return enterprise_repo.get_enterprise_by_enterprise_id(enterprise_id=enterprise_id, exception=exception)
コード例 #16
0
    def create_plugin_share_info(self, share_record, share_info, user_id,
                                 tenant, region_name):
        tenant_id = tenant.tenant_id
        tenant_name = tenant.tenant_name

        sid = transaction.savepoint()

        try:
            PluginShareRecordEvent.objects.filter(
                record_id=share_record.ID).delete()
            RainbondCenterPlugin.objects.filter(
                record_id=share_record.ID).delete()

            plugin_info = share_info.get("share_plugin_info")
            if isinstance(plugin_info, unicode):
                plugin_info = json.loads(plugin_info)

            if plugin_info.get('scope') == 'goodrain':
                ent = enterprise_repo.get_enterprise_by_enterprise_id(
                    tenant.enterprise_id)
                if ent and not ent.is_active:
                    return 10407, "用户未跟云市认证", None

            plugin_id = plugin_info.get("plugin_id")

            plugin_version = plugin_svc.get_tenant_plugin_newest_versions(
                region_name, tenant, plugin_id)

            if not plugin_version or plugin_version[
                    0].build_status != "build_success":
                return 400, "插件未构建", None

            plugin_version = plugin_version.first()

            tenant_plugin = plugin_repo.get_plugin_by_plugin_id(
                tenant_id, plugin_id)

            plugin_template = {
                "plugin_id": plugin_info.get("plugin_id"),
                "plugin_key": plugin_info.get("plugin_key"),
                "plugin_name": plugin_info.get("plugin_name"),
                "plugin_version": plugin_info.get("version"),
                "code_repo": tenant_plugin.code_repo,
                "build_source": tenant_plugin.build_source,
                "image": tenant_plugin.image,
                "category": tenant_plugin.category
            }

            if plugin_version.plugin_version_status != "fixed":
                plugin_version.plugin_version_status = "fixed"
                plugin_version.save()

            plugin_template["build_version"] = plugin_version.to_dict()

            plugin_info["plugin_image"] = app_store.get_image_connection_info(
                plugin_info["scope"], tenant_name)
            if not plugin_info["plugin_image"]:
                if sid:
                    transaction.savepoint_rollback(sid)
                return 400, "获取镜像上传地址错误", None

            event = PluginShareRecordEvent(
                record_id=share_record.ID,
                team_name=tenant_name,
                team_id=tenant_id,
                plugin_id=plugin_info['plugin_id'],
                plugin_name=plugin_info['plugin_name'],
                event_status='not_start')
            event.save()

            RainbondCenterPlugin.objects.filter(
                version=plugin_info["version"],
                plugin_id=share_record.group_id).delete()

            plugin_info["source"] = "local"
            plugin_info["record_id"] = share_record.ID

            plugin_template['share_plugin_info'] = plugin_info

            plugin = RainbondCenterPlugin(
                plugin_key=plugin_info.get("plugin_key"),
                plugin_name=plugin_info.get("plugin_name"),
                plugin_id=plugin_info.get("plugin_id"),
                record_id=share_record.ID,
                version=plugin_info.get("version"),
                build_version=plugin_info.get('build_version'),
                pic=plugin_info.get("pic", ""),
                scope=plugin_info.get("scope"),
                source="local",
                share_user=user_id,
                share_team=tenant_name,
                desc=plugin_info.get("desc"),
                enterprise_id=tenant.enterprise_id,
                plugin_template=json.dumps(plugin_template),
                category=plugin_info.get('category'))

            plugin.save()

            share_record.step = 2
            share_record.update_time = datetime.now()
            share_record.save()

            transaction.savepoint_commit(sid)

            return 200, "分享信息处理成功", plugin.to_dict()
        except Exception as e:
            logger.exception(e)
            if sid:
                transaction.savepoint_rollback(sid)
            return 500, "插件分享处理发生错误", None
コード例 #17
0
ファイル: team_services.py プロジェクト: ysice/rainbond-ui
 def get_enterprise_by_enterprise_id(self, enterprise_id):
     enterprise = enterprise_repo.get_enterprise_by_enterprise_id(
         enterprise_id=enterprise_id)
     return enterprise