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)
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"])
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
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"])
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"])
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)
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"])
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))
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"])
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"])
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)
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
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"])
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
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)
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
def get_enterprise_by_enterprise_id(self, enterprise_id): enterprise = enterprise_repo.get_enterprise_by_enterprise_id( enterprise_id=enterprise_id) return enterprise