def create_user(self, email=None, **kwargs): if not email: email = uuid4().hex + '@example.com' kwargs.setdefault('username', email) kwargs.setdefault('is_staff', True) kwargs.setdefault('is_active', True) kwargs.setdefault('is_superuser', False) user = User(email=email, **kwargs) user.set_password('admin') user.save() # UserEmail is created by a signal UserEmail.objects.filter( user=user, email=email, ).update(is_verified=True) return user
def get(self, request): org = Organization(id=1, slug="default", name="Default") user = User(name="Rick Swan") context = { "organization_name": org.name, "inviter_name": user.get_salutation_name, "email": "*****@*****.**", "pending_requests_link": absolute_uri( reverse("sentry-organization-members-requests", args=[org.slug])), } return MailPreview( html_template="sentry/emails/organization-invite-request.html", text_template="sentry/emails/organization-invite-request.txt", context=context, ).render(request)
def setUp(self) -> None: self.user = User(id=1) self.project = Project(id=123) self.group = Group(id=456, project=self.project) self.notification_settings = [ NotificationSetting( provider=ExternalProviders.SLACK.value, type=NotificationSettingTypes.WORKFLOW.value, value=NotificationSettingOptionValues.ALWAYS.value, target=self.user.actor, scope_type=NotificationScopeType.PROJECT.value, scope_identifier=self.project.id, ), NotificationSetting( provider=ExternalProviders.SLACK.value, type=NotificationSettingTypes.WORKFLOW.value, value=NotificationSettingOptionValues.ALWAYS.value, target=self.user.actor, scope_type=NotificationScopeType.USER.value, scope_identifier=self.user.id, ), ]
def handle(self, **options): email = options['email'] is_superuser = options['is_superuser'] password = None if not options['noinput']: try: if not email: email = self.get_email() if not options['nopassword']: password = self.get_password() if is_superuser is None: is_superuser = self.get_superuser() except KeyboardInterrupt: self.stderr.write("\nOperation cancelled.") sys.exit(1) if not email: raise CommandError('Invalid or missing email address') if not options['nopassword'] and not password: raise CommandError('No password set and --no-password not passed') user = User( email=email, username=email, is_superuser=is_superuser, is_staff=is_superuser, is_active=True, ) if password: user.set_password(password) user.save() self.stdout.write('User created: %s' % (email, ))
def set_admin(args): try: user = User.objects.get(username=args.email) user.set_password(args.password) user.save() return True except: pass try: user = User( email=args.email, username=args.email, is_superuser=True, is_staff=True, is_active=True, ) user.set_password(args.password) user.save() return True except: pass return False
def parse_query(project, query, user): # TODO(dcramer): handle query being wrapped in quotes tokens = tokenize_query(query) results = {'tags': {}, 'query': []} for key, token_list in six.iteritems(tokens): for value in token_list: if key == 'query': results['query'].append(value) elif key == 'is': if value == 'unassigned': results['unassigned'] = True elif value == 'assigned': results['unassigned'] = False else: try: results['status'] = STATUS_CHOICES[value] except KeyError: raise InvalidQuery(u"'is:' had unknown status code '{}'.".format(value)) elif key == 'assigned': if value == 'me': results['assigned_to'] = user else: try: results['assigned_to'] = find_users(value)[0] except IndexError: # XXX(dcramer): hacky way to avoid showing any results when # an invalid user is entered results['assigned_to'] = User(id=0) elif key == 'bookmarks': if value == 'me': results['bookmarked_by'] = user else: try: results['bookmarked_by'] = find_users(value)[0] except IndexError: # XXX(dcramer): hacky way to avoid showing any results when # an invalid user is entered results['bookmarked_by'] = User(id=0) elif key == 'first-release': results['first_release'] = parse_release(project, value) elif key == 'release': results['tags']['sentry:release'] = parse_release(project, value) elif key == 'user': if ':' in value: comp, value = value.split(':', 1) else: comp = 'id' results['tags']['sentry:user'] = get_user_tag( project, comp, value) elif key == 'has': if value == 'user': value = 'sentry:user' elif value == 'release': value = 'sentry:release' results['tags'][value] = ANY elif key == 'age': results.update(get_date_params(value, 'age_from', 'age_to')) elif key.startswith('user.'): results['tags']['sentry:user'] = get_user_tag( project, key.split('.', 1)[1], value) elif key == 'event.timestamp': results.update(get_date_params(value, 'date_from', 'date_to')) else: results['tags'][key] = value results['query'] = ' '.join(results['query']) return results
def setUp(self): self.user = User(id=1)
def test_validate_user_defined_type(self): user = Param("sentry.models.User") assert user.validate(None, "user", User())
def setUp(self) -> None: self.user = User(id=1)
def createuser(email, password, superuser, no_password, no_input): "Create a new user." if not no_input: if not email: email = _get_email() if not (password or no_password): password = _get_password() if superuser is None: superuser = _get_superuser() if superuser is None: superuser = False if not email: raise click.ClickException('Invalid or missing email address.') # TODO(mattrobenolt): Accept password over stdin? if not no_password and not password: raise click.ClickException( 'No password set and --no-password not passed.') from sentry import roles from sentry.models import User from django.conf import settings user = User( email=email, username=email, is_superuser=superuser, is_staff=superuser, is_active=True, ) if password: user.set_password(password) user.save() click.echo('User created: %s' % (email, )) # TODO(dcramer): kill this when we improve flows if settings.SENTRY_SINGLE_ORGANIZATION: from sentry.models import (Organization, OrganizationMember, OrganizationMemberTeam, Team) org = Organization.get_default() if superuser: role = roles.get_top_dog().id else: role = org.default_role member = OrganizationMember.objects.create( organization=org, user=user, role=role, ) # if we've only got a single team let's go ahead and give # access to that team as its likely the desired outcome teams = list(Team.objects.filter(organization=org)[0:2]) if len(teams) == 1: OrganizationMemberTeam.objects.create( team=teams[0], organizationmember=member, ) click.echo('Added to organization: %s' % (org.slug, ))
def test_superuser_is_true(self): user = User(id=100000, is_superuser=True) self.assertTrue(can_set_public_projects(user))
react_project = Project.objects.filter(name='React').first() if not react_project: react_project = Project() react_project.team = team react_project.name = 'React' react_project.organization = organization react_project.save() react_project.add_team(team) react_project.save() user = User.objects.filter(username='******').first() if not user: user = User() user.username = '******' user.email = 'admin@localhost' user.is_superuser = True user.set_password('admin') user.save() member = OrganizationMember.objects.create( organization=organization, user=user, role='owner', ) OrganizationMemberTeam.objects.create( organizationmember=member, team=team,
def setUp(self): self.user = User(username="******", email="*****@*****.**") self.user.set_password("bar") self.user.save()
def parse_query(project, query, user): # TODO(dcramer): handle query being wrapped in quotes tokens = query.split(' ') results = {'tags': {}, 'query': []} tokens_iter = iter(tokens) for token in tokens_iter: # ignore empty tokens if not token: continue if ':' not in token: results['query'].append(token) continue key, value = token.split(':', 1) if not value: results['query'].append(token) continue if value[0] == '"': nvalue = value while nvalue[-1] != '"': try: nvalue = tokens_iter.next() except StopIteration: break value = '%s %s' % (value, nvalue) if value.endswith('"'): value = value[1:-1] else: value = value[1:] if key == 'is': try: results['status'] = STATUS_CHOICES[value] except KeyError: pass elif key == 'assigned': if value == 'me': results['assigned_to'] = user else: try: results['assigned_to'] = find_users(value)[0] except IndexError: # XXX(dcramer): hacky way to avoid showing any results when # an invalid user is entered results['assigned_to'] = User(id=0) elif key == 'first-release': results['first_release'] = value elif key == 'release': results['tags']['sentry:release'] = value elif key == 'user': if ':' in value: comp, value = value.split(':', 1) else: comp = 'id' results['tags']['sentry:user'] = get_user_tag(project, comp, value) elif key.startswith('user.'): results['tags']['sentry:user'] = get_user_tag( project, key.split('.', 1)[1], value) else: results['tags'][key] = value results['query'] = ' '.join(results['query']) return results
def test_requires_username_if_not_matches_email(self): user = User(username='******', email='*****@*****.**') form = AccountSettingsForm(user=user) assert 'username' in form.fields
def user(self): user = User(username="******", email="admin@localhost", is_staff=True, is_superuser=True) user.set_password('admin') user.save() return user
def test_users(self): user = User(id=1) self.request.session = {} self.request.user = user assert (get_rate_limit_key(self.view, self.request) == f"user:OrganizationGroupIndexEndpoint:GET:{user.id}")
def get(self, request): org = Organization(id=1, slug="organization", name="My Company") projects = [ Project(id=1, organization=org, slug="project", name="My Project"), Project(id=2, organization=org, slug="another-project", name="Another Project"), Project(id=3, organization=org, slug="yet-another-project", name="Yet Another Project"), ] release = Release( organization_id=org.id, version="6c998f755f304593a4713abd123eaf8833a2de5e", date_added=datetime.datetime(2016, 10, 12, 15, 39, tzinfo=pytz.utc), ) deploy = Deploy( release=release, organization_id=org.id, environment_id=1, date_finished=datetime.datetime(2016, 10, 12, 15, 39, tzinfo=pytz.utc), ) release_links = [ absolute_uri("/organizations/{}/releases/{}/?project={}".format( org.slug, release.version, p.id)) for p in projects ] repos = [ { "name": "getsentry/getsentry", "commits": [ ( Commit( key="48b86fcd677da3dba5679d7a738240ce6fb74b20", date_added=datetime.datetime(2016, 10, 11, 15, 39, tzinfo=pytz.utc), ), None, ), ( Commit( key="a53a2756bb8d111b43196210b34df90b87ed336b", message="Fix billing", author=CommitAuthor(name="David Cramer", email="*****@*****.**"), date_added=datetime.datetime(2016, 10, 11, 16, 45, tzinfo=pytz.utc), ), User(email="*****@*****.**", name="David Cramer"), ), ], }, { "name": "getsentry/sentry", "commits": [ ( Commit( key="3c8eb3b4af6ee2a29c68daa188fc730c8e4b39fd", date_added=datetime.datetime(2016, 10, 10, 15, 39, tzinfo=pytz.utc), ), None, ), ( Commit( key="373562702009df1692da6eb80a933139f29e094b", message="Fix padding", author=CommitAuthor(name="Chris Jennings", email="*****@*****.**"), date_added=datetime.datetime(2016, 10, 10, 16, 39, tzinfo=pytz.utc), ), None, ), ( Commit( key="631cd9096bd9811a046a472bb0aa8b573e86e1f1", message="Update README.rst", author=CommitAuthor(name="David Cramer", email="*****@*****.**"), date_added=datetime.datetime(2016, 10, 11, 10, 39, tzinfo=pytz.utc), ), User(email="*****@*****.**", name="David Cramer"), ), ], }, ] return MailPreview( html_template="sentry/emails/activity/release.html", text_template="sentry/emails/activity/release.txt", context={ "release": release, "projects": zip(projects, release_links, [6, 1, 0]), "repos": repos, "reason": GroupSubscriptionReason.descriptions[ GroupSubscriptionReason.committed], "project_count": len(projects), "commit_count": 4, "author_count": 1, "file_count": 5, "environment": "production", "deploy": deploy, "setup_repo_link": absolute_uri("/organizations/{}/repos/".format(org.slug)), }, ).render(request)
def parse_query(project, query, user): # TODO(dcramer): handle query being wrapped in quotes tokens = tokenize_query(query) results = {'tags': {}, 'query': []} for key, token_list in tokens.iteritems(): for value in token_list: if key == 'query': results['query'].append(value) elif key == 'is': if value == 'unassigned': results['unassigned'] = True elif value == 'assigned': results['unassigned'] = False else: try: results['status'] = STATUS_CHOICES[value] except KeyError: pass elif key == 'assigned': if value == 'me': results['assigned_to'] = user else: try: results['assigned_to'] = find_users(value)[0] except IndexError: # XXX(dcramer): hacky way to avoid showing any results when # an invalid user is entered results['assigned_to'] = User(id=0) elif key == 'bookmarks': if value == 'me': results['bookmarked_by'] = user else: try: results['bookmarked_by'] = find_users(value)[0] except IndexError: # XXX(dcramer): hacky way to avoid showing any results when # an invalid user is entered results['bookmarked_by'] = User(id=0) elif key == 'first-release': results['first_release'] = value elif key == 'release': results['tags']['sentry:release'] = value elif key == 'user': if ':' in value: comp, value = value.split(':', 1) else: comp = 'id' results['tags']['sentry:user'] = get_user_tag( project, comp, value) elif key == 'age': flag, offset = parse_simple_range(value) date_value = timezone.now() - offset if flag == '+': results['date_to'] = date_value elif flag == '-': results['date_from'] = date_value results['date_filter'] = 'first_seen' elif key.startswith('user.'): results['tags']['sentry:user'] = get_user_tag( project, key.split('.', 1)[1], value) else: results['tags'][key] = value results['query'] = ' '.join(results['query']) return results
def test_dont_allow_creation_is_false(self): with self.settings(SENTRY_ALLOW_PUBLIC_PROJECTS=False): user = User(id=100000) self.assertFalse(can_set_public_projects(user))
def test_requires_password_on_valid_accounts(self): user = User() user.set_password('foo') form = AccountSettingsForm(user=user) self.assertIn('old_password', form.fields)
def setUp(self) -> None: self.group_subscription = GroupSubscription(is_active=True) self.user = User(id=1) self.project = Project(id=1) self.group = Group(id=1)
def test_removes_password_on_empty_password_types(self): user = User(password='******') form = AccountSettingsForm(user=user) self.assertNotIn('old_password', form.fields)
def nobody(self): user = User(username="******", email="nobody@localhost") user.set_password('nobody') user.save() return user
def get(self, request): org = Organization( id=1, slug='organization', name='My Company', ) projects = [ Project( id=1, organization=org, slug='project', name='My Project', ), Project( id=2, organization=org, slug='another-project', name='Another Project', ), Project( id=3, organization=org, slug='yet-another-project', name='Yet Another Project', ), ] release = Release(organization_id=org.id, version='6c998f755f304593a4713abd123eaf8833a2de5e', date_added=datetime.datetime(2016, 10, 12, 15, 39, tzinfo=pytz.utc)) deploy = Deploy( release=release, organization_id=org.id, environment_id=1, date_finished=datetime.datetime(2016, 10, 12, 15, 39, tzinfo=pytz.utc), ) has_new_links = features.has('organizations:sentry10', org) if has_new_links: release_links = [ absolute_uri( u'/organizations/{}/releases/{}/?project={}'.format( org.slug, release.version, p.id, )) for p in projects ] else: release_links = [ absolute_uri(u'/{}/{}/releases/{}/'.format( org.slug, p.slug, release.version, )) for p in projects ] repos = [{ 'name': 'getsentry/getsentry', 'commits': [ (Commit( key='48b86fcd677da3dba5679d7a738240ce6fb74b20', date_added=datetime.datetime(2016, 10, 11, 15, 39, tzinfo=pytz.utc), ), None), (Commit( key='a53a2756bb8d111b43196210b34df90b87ed336b', message='Fix billing', author=CommitAuthor( name='David Cramer', email='*****@*****.**', ), date_added=datetime.datetime(2016, 10, 11, 16, 45, tzinfo=pytz.utc), ), User(email='*****@*****.**', name='David Cramer')), ], }, { 'name': 'getsentry/sentry', 'commits': [ (Commit( key='3c8eb3b4af6ee2a29c68daa188fc730c8e4b39fd', date_added=datetime.datetime(2016, 10, 10, 15, 39, tzinfo=pytz.utc), ), None), (Commit( key='373562702009df1692da6eb80a933139f29e094b', message='Fix padding', author=CommitAuthor( name='Chris Jennings', email='*****@*****.**', ), date_added=datetime.datetime(2016, 10, 10, 16, 39, tzinfo=pytz.utc), ), None), (Commit( key='631cd9096bd9811a046a472bb0aa8b573e86e1f1', message='Update README.rst', author=CommitAuthor( name='David Cramer', email='*****@*****.**', ), date_added=datetime.datetime(2016, 10, 11, 10, 39, tzinfo=pytz.utc), ), User(email='*****@*****.**', name='David Cramer')), ], }] return MailPreview( html_template='sentry/emails/activity/release.html', text_template='sentry/emails/activity/release.txt', context={ 'release': release, 'projects': zip(projects, release_links, [6, 1, 0]), 'repos': repos, 'reason': GroupSubscriptionReason.descriptions[ GroupSubscriptionReason.committed], 'project_count': len(projects), 'commit_count': 4, 'author_count': 1, 'file_count': 5, 'environment': 'production', 'deploy': deploy, 'setup_repo_link': absolute_uri('/organizations/{}/repos/'.format(org.slug, )), }, ).render(request)
def owner(self): user = User(username="******", email="owner@localhost") user.set_password('owner') user.save() return user
def setUp(self) -> None: self.user = User(id=1) self.project = Project(id=123)
def test_requires_password_on_valid_accounts(self): user = User() user.set_password('foo') form = RemoveProjectForm(user=user, project_list=[]) self.assertIn('password', form.fields)
def _get_mock_user(self): user = mock.Mock(spec=User(id=1)) user.is_authenticated.return_value = False return user
def test_removes_password_on_empty_password_types(self): user = User(password='******') form = RemoveProjectForm(user=user, project_list=[]) self.assertNotIn('password', form.fields)