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)
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
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))
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))
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))
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()
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
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})')
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
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
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
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
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)))
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)
def on_user_create_refresh_cache(sender, instance, created, **kwargs): if created: default_org = Organization.default() default_org.members.add(instance)
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