Example #1
0
    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
Example #2
0
    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)
Example #3
0
 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,
         ),
     ]
Example #4
0
    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, ))
Example #5
0
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
Example #6
0
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
Example #7
0
 def setUp(self):
     self.user = User(id=1)
Example #8
0
 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)
Example #10
0
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, ))
Example #11
0
 def test_superuser_is_true(self):
     user = User(id=100000, is_superuser=True)
     self.assertTrue(can_set_public_projects(user))
Example #12
0
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,
Example #13
0
 def setUp(self):
     self.user = User(username="******", email="*****@*****.**")
     self.user.set_password("bar")
     self.user.save()
Example #14
0
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
Example #15
0
 def test_requires_username_if_not_matches_email(self):
     user = User(username='******', email='*****@*****.**')
     form = AccountSettingsForm(user=user)
     assert 'username' in form.fields
Example #16
0
 def user(self):
     user = User(username="******", email="admin@localhost", is_staff=True, is_superuser=True)
     user.set_password('admin')
     user.save()
     return user
Example #17
0
 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}")
Example #18
0
    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)
Example #19
0
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
Example #20
0
 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))
Example #21
0
 def test_requires_password_on_valid_accounts(self):
     user = User()
     user.set_password('foo')
     form = AccountSettingsForm(user=user)
     self.assertIn('old_password', form.fields)
Example #22
0
 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)
Example #23
0
 def test_removes_password_on_empty_password_types(self):
     user = User(password='******')
     form = AccountSettingsForm(user=user)
     self.assertNotIn('old_password', form.fields)
Example #24
0
 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)
Example #26
0
    def owner(self):
        user = User(username="******", email="owner@localhost")
        user.set_password('owner')
        user.save()

        return user
Example #27
0
 def setUp(self) -> None:
     self.user = User(id=1)
     self.project = Project(id=123)
Example #28
0
 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)
Example #29
0
 def _get_mock_user(self):
     user = mock.Mock(spec=User(id=1))
     user.is_authenticated.return_value = False
     return user
Example #30
0
 def test_removes_password_on_empty_password_types(self):
     user = User(password='******')
     form = RemoveProjectForm(user=user, project_list=[])
     self.assertNotIn('password', form.fields)