Exemplo n.º 1
0
    def create(self, data):
        # no re-password
        self.check_params(data["nick_name"], data["email"], data["password"], data["password"])
        # check nick name
        try:
            data["eid"] = data["enterprise_id"]
            user_repo.get_enterprise_user_by_username(data["eid"], data["nick_name"])
            raise UserExistError("{} already exists.".format(data["nick_name"]))
        except Users.DoesNotExist:
            pass
        if data.get("email", ""):
            user = user_repo.get_user_by_email(data["email"])
            if user is not None:
                raise EmailExistError("{} already exists.".format(data["email"]))
        if data.get("phone", ""):
            user = user_repo.get_user_by_phone(data["phone"])
            if user is not None:
                raise PhoneExistError("{} already exists.".format(data["phone"]))

        user = {
            "nick_name": data["nick_name"],
            "password": encrypt_passwd(data["email"] + data["password"]),
            "email": data.get("email", ""),
            "phone": data.get("phone", ""),
            "enterprise_id": data["eid"],
            "is_active": data.get("is_active", True),
            "create_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        }

        return Users.objects.create(**user)
Exemplo n.º 2
0
 def get_or_create_user_and_enterprise(self, oauth_user):
     try:
         user = user_repo.get_enterprise_user_by_username(
             oauth_user.enterprise_id, oauth_user.name)
     except Users.DoesNotExist:
         user_info = dict()
         user_info["email"] = oauth_user.email
         user_info["nick_name"] = oauth_user.name
         user_info["client_ip"] = oauth_user.client_ip
         user_info["phone"] = oauth_user.phone
         user_info["real_name"] = oauth_user.real_name
         user_info["is_active"] = 1
         password = "******"
         user_info["enterprise_center_user_id"] = oauth_user.id
         user = Users(**user_info)
         user.set_password(password)
         user.save()
     enterprise = enterprise_services.get_enterprise_by_enterprise_id(
         oauth_user.enterprise_id)
     if not enterprise:
         enterprise = enterprise_services.create_oauth_enterprise(
             oauth_user.enterprise_domain, oauth_user.enterprise_name,
             oauth_user.enterprise_id)
         user_services.make_user_as_admin_for_enterprise(
             user.user_id, enterprise.enterprise_id)
     user.enterprise_id = enterprise.enterprise_id
     user.save()
     return user
Exemplo n.º 3
0
 def get_user_by_user_name(self, eid, user_name):
     user = user_repo.get_enterprise_user_by_username(eid,
                                                      username=user_name)
     if not user:
         return None
     else:
         return user
Exemplo n.º 4
0
    def sync_market_plugin_templates(self, tenant, plugin_data):
        plugin_template = market_api.get_plugin_templates(tenant.tenant_id, plugin_data.get('plugin_key'),
                                                          plugin_data.get('version'))
        market_plugin = plugin_template.get('plugin')
        if not market_plugin:
            return True
        rcps = RainbondCenterPlugin.objects.filter(
            plugin_key=market_plugin.get('plugin_key'),
            version=market_plugin.get('major_version'),
            enterprise_id__in=[tenant.enterprise_id, "public"])

        rcp = None
        if rcps:
            # 优先获取企业的插件
            enter_rcp = rcps.filter(enterprise_id=tenant.enterprise_id)
            if enter_rcp:
                rcp = enter_rcp[0]
            else:
                rcp = rcps[0]
        if rcp:
            rcp.share_user = 0
            user_name = market_plugin.get('share_user')
            if user_name:
                try:
                    user = user_repo.get_enterprise_user_by_username(tenant.enterprise_id, user_name)
                    rcp.share_user = user.user_id
                except Exception as e:
                    logger.exception(e)

            rcp.plugin_template = market_plugin.get("template").get('template_content')
            rcp.pic = market_plugin.get('logo')
            rcp.desc = market_plugin.get('intro')
            rcp.version = market_plugin.get('major_version')
            rcp.details = market_plugin.get("desc", "")
            rcp.is_complete = True
            rcp.save()
            return True
        else:
            enterprise_id = tenant.enterprise_id
            rcp = RainbondCenterPlugin(
                plugin_key=market_plugin.get('plugin_key'),
                plugin_name=market_plugin.get('name'),
                version=market_plugin.get('major_version'),
                desc=market_plugin.get('intro'),
                pic=market_plugin.get('logo'),
                build_version=market_plugin.get('build_version'),
                record_id=0,
                category=market_plugin.get('category'),
                scope='goodrain',
                source='market',
                share_user=0,
                share_team='',
                enterprise_id=enterprise_id,
                plugin_template=market_plugin.get("template").get('template_content'),
                is_complete=True,
                details=market_plugin.get("desc", ""))
            rcp.save()
            return True
Exemplo n.º 5
0
    def set_oauth_user_relation(self,
                                api,
                                oauth_service,
                                oauth_user,
                                access_token,
                                refresh_token,
                                code,
                                user=None):
        oauth_user.id = str(oauth_user.id)
        if api.is_communication_oauth():
            logger.debug(oauth_user.name)
            user = user_repo.get_enterprise_user_by_username(
                oauth_user.enterprise_id, oauth_user.name)
        authenticated_user = oauth_user_repo.user_oauth_exists(
            service_id=oauth_service.ID, oauth_user_id=oauth_user.id)
        if authenticated_user is not None:
            authenticated_user.oauth_user_id = oauth_user.id
            authenticated_user.oauth_user_name = oauth_user.name
            authenticated_user.oauth_user_email = oauth_user.email
            authenticated_user.access_token = access_token
            authenticated_user.refresh_token = refresh_token
            authenticated_user.code = code
            if user:
                authenticated_user.user_id = user.user_id
            authenticated_user.save()
            if authenticated_user.user_id is not None:
                login_user = user_repo.get_by_user_id(
                    authenticated_user.user_id)
                payload = jwt_payload_handler(login_user)
                token = jwt_encode_handler(payload)
                response = Response({"data": {
                    "bean": {
                        "token": token
                    }
                }},
                                    status=200)
                if api_settings.JWT_AUTH_COOKIE:
                    expiration = (datetime.datetime.now() +
                                  datetime.timedelta(days=30))
                    response.set_cookie(api_settings.JWT_AUTH_COOKIE,
                                        token,
                                        expires=expiration)
                return response

            else:
                rst = {
                    "oauth_user_name": oauth_user.name,
                    "oauth_user_id": oauth_user.id,
                    "oauth_user_email": oauth_user.email,
                    "service_id": authenticated_user.service_id,
                    "oauth_type": oauth_service.oauth_type,
                    "is_authenticated": authenticated_user.is_authenticated,
                    "code": code,
                }
                msg = "user is not authenticated"
                return Response(
                    {"data": {
                        "bean": {
                            "result": rst,
                            "msg": msg
                        }
                    }},
                    status=200)
        else:
            usr = oauth_user_repo.save_oauth(
                oauth_user_id=oauth_user.id,
                oauth_user_name=oauth_user.name,
                oauth_user_email=oauth_user.email,
                user_id=(user.user_id if user else None),
                code=code,
                service_id=oauth_service.ID,
                access_token=access_token,
                refresh_token=refresh_token,
                is_authenticated=True,
                is_expired=False,
            )
            rst = {
                "oauth_user_name": usr.oauth_user_name,
                "oauth_user_id": usr.oauth_user_id,
                "oauth_user_email": usr.oauth_user_email,
                "service_id": usr.service_id,
                "oauth_type": oauth_service.oauth_type,
                "is_authenticated": usr.is_authenticated,
                "code": code,
            }
            if user:
                payload = jwt_payload_handler(user)
                token = jwt_encode_handler(payload)
                response = Response({"data": {
                    "bean": {
                        "token": token
                    }
                }},
                                    status=200)
                if api_settings.JWT_AUTH_COOKIE:
                    expiration = (datetime.datetime.now() +
                                  api_settings.JWT_EXPIRATION_DELTA)
                    response.set_cookie(api_settings.JWT_AUTH_COOKIE,
                                        token,
                                        expires=expiration,
                                        httponly=True)
                return response
            msg = "user is not authenticated"
            return Response({"data": {
                "bean": {
                    "result": rst,
                    "msg": msg
                }
            }},
                            status=200)
Exemplo n.º 6
0
 def get_enterprise_user_by_username(self, user_name, eid):
     return user_repo.get_enterprise_user_by_username(eid, user_name)