예제 #1
0
def on_user_created_set_default_org(sender, instance, created, **kwargs):
    if not created:
        return
    if instance.orgs.count() > 0:
        return
    with tmp_to_org(Organization.default()):
        Organization.default().add_member(instance)
예제 #2
0
    def generate_fake(cls, count=100):
        from random import seed, choice
        from django.db import IntegrityError
        from .node import Node
        from orgs.utils import get_current_org
        from orgs.models import Organization
        org = get_current_org()
        if not org or not org.is_real():
            Organization.default().change_to()

        nodes = list(Node.objects.all())
        seed()
        for i in range(count):
            ip = [str(i) for i in random.sample(range(255), 4)]
            asset = cls(ip='.'.join(ip),
                        hostname='.'.join(ip),
                        admin_user=choice(AdminUser.objects.all()),
                        created_by='Fake')
            try:
                asset.save()
                asset.protocols = 'ssh/22'
                if nodes and len(nodes) > 3:
                    _nodes = random.sample(nodes, 3)
                else:
                    _nodes = [Node.default_node()]
                asset.nodes.set(_nodes)
                asset.system_users = [
                    choice(SystemUser.objects.all()) for i in range(3)
                ]
                logger.debug('Generate fake asset : %s' % asset.ip)
            except IntegrityError:
                print('Error continue')
                continue
예제 #3
0
    def generate_fake(cls, count=100):
        import random
        org = get_current_org()
        if not org or not org.is_real():
            Organization.default().change_to()

        for i in range(count):
            node = random.choice(cls.objects.all())
            node.create_child('Node {}'.format(i))
예제 #4
0
파일: node.py 프로젝트: wangwd123/neu-jump
    def generate_fake(cls, count=100):
        import random
        org = get_current_org()
        if not org or not org.is_real():
            Organization.default().change_to()
        nodes = list(cls.objects.all())
        if count > 100:
            length = 100
        else:
            length = count

        for i in range(length):
            node = random.choice(nodes)
            child = node.create_child('Node {}'.format(i))
            print("{}. {}".format(i, child))
예제 #5
0
    def modify_other_org_root_node_key(cls):
        """
        解决创建 default 节点失败的问题,
        因为在其他组织下存在 default 节点,故在 DEFAULT 组织下 get 不到 create 失败
        """
        logger.info("Modify other org root node key")

        with tmp_to_org(Organization.root()):
            node_key1 = cls.objects.filter(key='1').first()
            if not node_key1:
                logger.info("Not found node that `key` = 1")
                return
            if node_key1.org_id == '':
                node_key1.org_id = str(Organization.default().id)
                node_key1.save()
                return

        with transaction.atomic():
            with tmp_to_org(node_key1.org):
                org_root_node_new_key = cls.get_next_org_root_node_key()
                for n in cls.objects.all():
                    old_key = n.key
                    key_list = n.key.split(':')
                    key_list[0] = org_root_node_new_key
                    new_key = ':'.join(key_list)
                    n.key = new_key
                    n.save()
                    logger.info('Modify key ( {} > {} )'.format(
                        old_key, new_key))
예제 #6
0
    def correct_default_node_if_need(cls):
        with tmp_to_root_org():
            wrong_default_org = cls.objects.filter(key='1',
                                                   value='Default').first()
            if not wrong_default_org:
                return

            if wrong_default_org.has_children_or_has_assets():
                return

            default_org = Organization.default()
            right_default_org = cls.objects.filter(
                value=default_org.name).first()
            if not right_default_org:
                return

            if right_default_org.date_create > wrong_default_org.date_create:
                return

            with atomic():
                logger.warn(
                    f'Correct default node: '
                    f'old={wrong_default_org.value}-{wrong_default_org.key} '
                    f'new={right_default_org.value}-{right_default_org.key}')
                wrong_default_org.delete()
                right_default_org.key = '1'
                right_default_org.save()
예제 #7
0
 def default_node(cls):
     default_org = Organization.default()
     with tmp_to_org(default_org):
         defaults = {'value': default_org.name}
         obj, created = cls.objects.get_or_create(defaults=defaults,
                                                  key=cls.default_key)
         return obj
예제 #8
0
    def generate_fake(cls, count=100, org=None):
        import uuid
        import datetime
        from orgs.models import Organization
        from common.utils import random_string

        if not org:
            org = Organization.default()

        d = datetime.datetime.now() - datetime.timedelta(days=1)
        commands = [
            cls(**{
                'user': random_string(6),
                'asset': random_string(10),
                'system_user': random_string(6),
                'session': str(uuid.uuid4()),
                'input': random_string(16),
                'output': random_string(64),
                'timestamp': int(d.timestamp()),
                'org_id': str(org.id)
            })
            for i in range(count)
        ]
        cls.objects.bulk_create(commands)
        print(f'Create {len(commands)} commands of org ({org})')
예제 #9
0
파일: node.py 프로젝트: zhoudl/jumpserver
 def default_node(cls):
     with tmp_to_org(Organization.default()):
         defaults = {'value': cls.default_value}
         obj, created = cls.objects.get_or_create(
             defaults=defaults,
             key=cls.default_key,
         )
         return obj
예제 #10
0
    def generate_fake(cls, count=100):
        from ..hands import User, Node, SystemUser
        import random

        org = get_current_org()
        if not org or not org.is_real():
            Organization.default().change_to()

        nodes = list(Node.objects.all())
        assets = list(Asset.objects.all())
        system_users = list(SystemUser.objects.all())
        users = User.objects.filter(username='******')

        for i in range(count):
            name = "fake_perm_to_admin_{}".format(str(uuid.uuid4())[:6])
            perm = cls(name=name)
            try:
                perm.save()
                perm.users.set(users)
                if system_users and len(system_users) > 3:
                    _system_users = random.sample(system_users, 3)
                elif system_users:
                    _system_users = [system_users[0]]
                else:
                    _system_users = []
                perm.system_users.set(_system_users)

                if nodes and len(nodes) > 3:
                    _nodes = random.sample(nodes, 3)
                else:
                    _nodes = [Node.default_node()]
                perm.nodes.set(_nodes)

                if assets and len(assets) > 3:
                    _assets = random.sample(assets, 3)
                elif assets:
                    _assets = [assets[0]]
                else:
                    _assets = []
                perm.assets.set(_assets)

                logger.debug('Generate fake perm: %s' % perm.name)

            except Exception as e:
                print('Error continue')
                continue
예제 #11
0
    def generate_fake(cls, count=100, is_finished=True):
        import random
        from orgs.models import Organization
        from users.models import User
        from assets.models import Asset, SystemUser
        from orgs.utils import get_current_org
        from common.utils.random import random_datetime, random_ip

        org = get_current_org()
        if not org or org.is_root():
            Organization.default().change_to()
        i = 0
        users = User.objects.all()[:100]
        assets = Asset.objects.all()[:100]
        system_users = SystemUser.objects.all()[:100]
        while i < count:
            user_random = random.choices(users, k=10)
            assets_random = random.choices(assets, k=10)
            system_users = random.choices(system_users, k=10)

            ziped = zip(user_random, assets_random, system_users)
            sessions = []
            now = timezone.now()
            month_ago = now - timezone.timedelta(days=30)
            for user, asset, system_user in ziped:
                ip = random_ip()
                date_start = random_datetime(month_ago, now)
                date_end = random_datetime(
                    date_start, date_start + timezone.timedelta(hours=2))
                data = dict(
                    user=str(user),
                    user_id=user.id,
                    asset=str(asset),
                    asset_id=asset.id,
                    system_user=str(system_user),
                    system_user_id=system_user.id,
                    remote_addr=ip,
                    date_start=date_start,
                    date_end=date_end,
                    is_finished=is_finished,
                )
                sessions.append(Session(**data))
            cls.objects.bulk_create(sessions)
            i += 10
예제 #12
0
파일: node.py 프로젝트: xbd666/jumpserver
 def default_node(cls):
     with tmp_to_org(Organization.default()):
         defaults = {'value': cls.default_value}
         try:
             obj, created = cls.objects.get_or_create(
                 defaults=defaults, key=cls.default_key,
             )
         except IntegrityError as e:
             logger.error("Create default node failed: {}".format(e))
             cls.modify_other_org_root_node_key()
             obj, created = cls.objects.get_or_create(
                 defaults=defaults, key=cls.default_key,
             )
         return obj
예제 #13
0
def import_ldap_user():
    logger.info("Start import ldap user task")
    util_server = LDAPServerUtil()
    util_import = LDAPImportUtil()
    users = util_server.search()
    if settings.XPACK_ENABLED:
        org_id = settings.AUTH_LDAP_SYNC_ORG_ID
        default_org = None
    else:
        # 社区版默认导入Default组织
        org_id = Organization.DEFAULT_ID
        default_org = Organization.default()
    org = Organization.get_instance(org_id, default=default_org)
    errors = util_import.perform_import(users, org)
    if errors:
        logger.error("Imported LDAP users errors: {}".format(errors))
    else:
        logger.info('Imported {} users successfully'.format(len(users)))
예제 #14
0
def on_user_created_set_default_org(sender, instance, created, **kwargs):
    if not created:
        return
    if instance.orgs.count() > 0:
        return
    Organization.default().members.add(instance)
예제 #15
0
def on_user_create_refresh_cache(sender, instance, created, **kwargs):
    if created:
        default_org = Organization.default()
        default_org.members.add(instance)
예제 #16
0
 def switch_org(self, org_id):
     o = Organization.get_instance(org_id, default=Organization.default())
     if o:
         o.change_to()
     print('Current org is: {}'.format(o))
     return o