def get(self, request, *args, **kwargs): context = self.get_context() response = redirect( get_redirect_url( "/apps/{0}/{1}/detail/".format(self.tenantName, self.serviceAlias), request)) try: docker_c_id = request.COOKIES.get('docker_c_id', '') docker_h_id = request.COOKIES.get('docker_h_id', '') docker_s_id = request.COOKIES.get('docker_s_id', '') if docker_c_id != "" and docker_h_id != "" and docker_s_id != "" and docker_s_id == self.service.service_id: t_docker_h_id = docker_h_id.lower() context["tenant_id"] = self.service.tenant_id context["service_id"] = docker_s_id context["ctn_id"] = docker_c_id context["md5"] = md5fun(self.service.tenant_id + "_" + docker_s_id + "_" + docker_c_id) context["ws_uri"] = self.make_docker_ws_uri( settings.DOCKER_WSS_URL, t_docker_h_id) response = TemplateResponse(self.request, "www/console.html", context) response.delete_cookie('docker_c_id') response.delete_cookie('docker_h_id') response.delete_cookie('docker_s_id') except Exception as e: logger.exception(e) return response
def get(self, request, *args, **kwargs): self.tenantName = kwargs.get('tenantName', None) self.serviceAlias = kwargs.get('serviceAlias', None) tenant = team_repo.get_team_by_team_name(self.tenantName) if tenant: self.tenant = tenant else: raise http.Http404 service = service_repo.get_service_by_tenant_and_alias( self.tenant.tenant_id, self.serviceAlias) if service: self.service = service else: raise http.Http404 context = dict() response = redirect( get_redirect_url( "/#/app/{0}/overview".format(self.service.service_alias), request)) try: docker_c_id = request.COOKIES.get('docker_c_id', '') docker_h_id = request.COOKIES.get('docker_h_id', '') docker_s_id = request.COOKIES.get('docker_s_id', '') if docker_c_id != "" and docker_h_id != "" and docker_s_id != "" and docker_s_id == self.service.service_id: t_docker_h_id = docker_h_id.lower() context["tenant_id"] = self.service.tenant_id context["service_id"] = docker_s_id context["ctn_id"] = docker_c_id context["md5"] = md5fun(self.service.tenant_id + "_" + docker_s_id + "_" + docker_c_id) main_url = region_services.get_region_wsurl( self.service.service_region) if main_url == "auto": context[ "ws_uri"] = '{}://{}:6060/docker_console?nodename={}'.format( settings.DOCKER_WSS_URL["type"], settings.DOCKER_WSS_URL[ self.service.service_region], t_docker_h_id) else: context[ "ws_uri"] = "{0}/docker_console?nodename={1}".format( main_url, t_docker_h_id) response = TemplateResponse(self.request, "www/console.html", context) response.delete_cookie('docker_c_id') response.delete_cookie('docker_h_id') response.delete_cookie('docker_s_id') except Exception as e: logger.exception(e) return response
def get(self, request, *args, **kwargs): """ 获取console TTY页面 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 组件别名 required: true type: string paramType: path """ response = redirect(get_redirect_url("/index#/index", request)) try: docker_c_id = request.COOKIES.get('docker_c_id', '') docker_h_id = request.COOKIES.get('docker_h_id', '') docker_s_id = request.COOKIES.get('docker_s_id', '') bean = dict() if docker_c_id != "" and docker_h_id != "" and docker_s_id != "" and docker_s_id == self.service.service_id: t_docker_h_id = docker_h_id.lower() bean["tenant_id"] = self.service.tenant_id bean["service_id"] = docker_s_id bean["ctn_id"] = docker_c_id bean["md5"] = md5fun(self.service.tenant_id + "_" + docker_s_id + "_" + docker_c_id) main_url = region_services.get_region_wsurl( self.service.service_region) if main_url == "auto": bean[ "ws_uri"] = '{}://{}:6060/docker_console?nodename={}'.format( settings.DOCKER_WSS_URL["type"], settings.DOCKER_WSS_URL[ self.service.service_region], t_docker_h_id) else: bean["ws_uri"] = "{0}/docker_console?nodename={1}".format( main_url, t_docker_h_id) response = Response(general_message(200, "success", "信息获取成功"), status=200, template_name="www/console.html") except Exception as e: logger.exception(e) return response
def get(self, request, *args, **kwargs): context = self.get_context() response = redirect( get_redirect_url( "/apps/{0}/{1}/detail/".format(self.tenantName, self.serviceAlias), request)) try: docker_c_id = request.COOKIES.get('docker_c_id', '') docker_h_id = request.COOKIES.get('docker_h_id', '') docker_s_id = request.COOKIES.get('docker_s_id', '') if docker_c_id != "" and docker_h_id != "" and docker_s_id != "" and docker_s_id == self.service.service_id: t_docker_h_id = docker_h_id.lower() context["tenant_id"] = self.service.tenant_id context["service_id"] = docker_s_id context["ctn_id"] = docker_c_id context["md5"] = md5fun(self.service.tenant_id + "_" + docker_s_id + "_" + docker_c_id) main_url = region_services.get_region_wsurl( self.service.service_region) if main_url == "auto": context[ "ws_uri"] = '{}://{}:6060/docker_console?nodename={}'.format( settings.DOCKER_WSS_URL["type"], settings.DOCKER_WSS_URL[ self.service.service_region], t_docker_h_id) else: context[ "ws_uri"] = "{0}/docker_console?nodename={1}".format( main_url, t_docker_h_id) response = TemplateResponse(self.request, "www/console.html", context) response.delete_cookie('docker_c_id') response.delete_cookie('docker_h_id') response.delete_cookie('docker_s_id') except Exception as e: logger.exception(e) return response
def get(self, request, *args, **kwargs): import datetime # 获取cookie中的csrf csrftoken = request.COOKIES.get('csrftoken') if csrftoken is None: csrftoken = "csrf" # 获取statue state = request.GET.get("state") # 解码toke, type logger.debug("account.wechat", state) logger.debug("account.wechat", "is_weixin:{0}".format(str(is_weixin(request)))) # 查询数据库 err_url = settings.WECHAT_CALLBACK.get("index") try: wechat_state = WeChatState.objects.get(pk=state) except Exception as e: logger.exception("account.wechat", e) logger.error("account.wechat", "wechatstate is missing,id={0}".format(state)) return self.redirect_to(err_url) cry_state = wechat_state.state state_array = AuthCode.decode(str(cry_state), 'we_chat_login').split(',') oldcsrftoken = state_array[0] origin = state_array[1] next_url = state_array[2] config = state_array[3] origin_url = None if len(state_array) == 5: origin_url = state_array[4] logger.debug("account.wechat", oldcsrftoken) logger.debug("account.wechat", origin) logger.debug("account.wechat", next_url) logger.debug("account.wechat", config) logger.debug("account.wechat", origin_url) if csrftoken != oldcsrftoken: return self.redirect_to(err_url) # 获取的code code = request.GET.get("code") logger.info(code) if code is None: return self.redirect_to(err_url) # 根据code获取access_token wechat_config = WeChatConfig.objects.get(config=config) access_token, open_id = OpenWeChatAPI.access_token_oauth2_static( wechat_config.app_id, wechat_config.app_secret, code) logger.info(access_token) if access_token is None: # 登录失败,跳转到失败页面 return self.redirect_to(err_url) # 检查用户的open_id是否已经存在 need_new = False wechat_user = None try: wechat_user = WeChatUser.objects.get(open_id=open_id) except WeChatUser.DoesNotExist: logger.warning( "account.wechat", "open_id is first to access console. now regist...") need_new = True # 添加wechatuser if need_new: jsondata = OpenWeChatAPI.query_userinfo_static( open_id, access_token) nick_name = jsondata.get("nickname") if nick_name: nick_name = nick_name.encode("utf-8") wechat_user = WeChatUser(open_id=jsondata.get("openid"), nick_name=nick_name, union_id=jsondata.get("unionid"), sex=jsondata.get("sex"), city=jsondata.get("city"), province=jsondata.get("province"), country=jsondata.get("country"), headimgurl=jsondata.get("headimgurl"), config=config) wechat_user.save() # 根据微信的union_id判断用户是否已经注册 need_new = False user = None try: user = Users.objects.get(union_id=wechat_user.union_id) except Users.DoesNotExist: logger.warning( "account.wechat", "union id is first to access console. now create user...") need_new = True # 用户表中不存在对应用户,判断是否已经解绑 if need_new: try: binding = WeChatUnBind.objects.get( union_id=wechat_user.union_id, status=0) user = Users.objects.get(pk=binding.user_id) user.union_id = wechat_user.union_id user.save() need_new = False except WeChatUnBind.DoesNotExist: pass # 创建租户 if need_new: union_id = wechat_user.union_id tmp_union_id = md5fun(union_id) begin_index = len(tmp_union_id) - 8 tenant_name = tmp_union_id[begin_index:] tenant_name = tenant_name.replace("_", "-").lower() email = tenant_name + "@wechat.com" logger.debug( "account.wechat", "new wx regist user.email:{0} tenant_name:{1}".format( email, tenant_name)) # 创建用户,邮箱为openid后8位@wechat.comemail=email, # 统计当前wx数量 count = Users.objects.filter(rf="open_wx").count() count += 1989 nick_name = "wxgd0" + str(count) user = Users(nick_name=nick_name, phone="", client_ip=get_client_ip(request), rf="open_wx", status=2, union_id=union_id) user.set_password("wechatpwd") user.save() monitorhook.registerMonitor(user, 'register') # 创建租户,默认为alish region = RegionInfo.register_choices()[0][0] # add by tanm regions = [region] enterprise_svc.create_and_init_tenant(user.user_id, tenant_name, regions, user.enterprise_id) # create gitlab user if user.email is not None and user.email != "": codeRepositoriesService.createUser(user, email, password, nick_name, nick_name) logger.info(user) if user is None: logger.error("account.wechat", "微信用户登录失败!") return self.redirect_to(err_url) # 微信用户登录 user = authenticate(union_id=user.union_id) login(request, user) self.user = request.user # 回跳到云市 if next_url is not None \ and next_url != "" \ and next_url != "none" \ and next_url != "None": if origin == "app": logger.debug("account.wechat", "now return to cloud market login..") if origin_url is None or origin_url == "redirect_url" or origin_url == "": origin_url = settings.APP_SERVICE_API.get("url") if not origin_url.startswith("http://"): origin_url = "http://" + origin_url # 返回参数 payload = { "nick_name": user.nick_name, "user_id": str(user.user_id), "next_url": next_url, "action": "register" if need_new else "login" } if wechat_user is not None: payload["wechat_name"] = wechat_user.nick_name ticket = AuthCode.encode(json.dumps(payload), "goodrain") next_url = "{0}/login/{1}/success?ticket={2}".format( origin_url, sn.instance.cloud_assistant, ticket) # next_url = settings.APP_SERVICE_API.get("url") + '/login/goodrain/success?ticket=' + ticket logger.debug("account.wechat", next_url) return redirect(next_url) return self.redirect_view()