Example #1
0
def avatar_as_html(user: User) -> str:
    if not user:
        return '<img class="avatar" src="{}" width="20px" height="20px" />'.format(
            escape(get_sentry_avatar_url()))
    avatar_type = user.get_avatar_type()
    if avatar_type == "upload":
        return f'<img class="avatar" src="{escape(get_user_avatar_url(user))}" />'
    elif avatar_type == "letter_avatar":
        return get_email_avatar(user.get_display_name(), user.get_label(), 20,
                                False)
    else:
        return get_email_avatar(user.get_display_name(), user.get_label(), 20,
                                True)
Example #2
0
def get_codeowners_request_builder_args(
        project: Project, recipient: User,
        requester_name: str) -> Mapping[str, Any]:
    return {
        "subject": _("A team member is asking to set up Sentry's Code Owners"),
        "type": "organization.codeowners-request",
        "context": {
            "requester_name":
            requester_name,
            "recipient_name":
            recipient.get_display_name(),
            "organization_name":
            project.organization.name,
            "project_name":
            project.name,
            "codeowners_url":
            absolute_uri(
                f"/settings/{project.organization.slug}/projects/{project.slug}/ownership/?referrer=codeowners-email"
            ),
        },
        "template": "sentry/emails/requests/codeowners.txt",
        "html_template": "sentry/emails/requests/codeowners.html",
    }
Example #3
0
    def serialize(
        self, obj: User, attrs: MutableMapping[User, Any], user: User
    ) -> Union[UserSerializerResponse, UserSerializerResponseSelf]:
        experiment_assignments = experiments.all(user=user)

        d: UserSerializerResponse = {
            "id":
            str(obj.id),
            "name":
            obj.get_display_name(),
            "username":
            obj.username,
            "email":
            obj.email,
            "avatarUrl":
            get_gravatar_url(obj.email, size=32),
            "isActive":
            obj.is_active,
            "hasPasswordAuth":
            obj.password not in ("!", ""),
            "isManaged":
            obj.is_managed,
            "dateJoined":
            obj.date_joined,
            "lastLogin":
            obj.last_login,
            "has2fa":
            attrs["has2fa"],
            "lastActive":
            obj.last_active,
            "isSuperuser":
            obj.is_superuser,
            "isStaff":
            obj.is_staff,
            "experiments":
            experiment_assignments,
            "emails": [{
                "id": str(e.id),
                "email": e.email,
                "is_verified": e.is_verified
            } for e in attrs["emails"]],
        }

        if obj == user:
            d = cast(UserSerializerResponseSelf, d)
            options = {
                o.key: o.value
                for o in UserOption.objects.filter(user=user,
                                                   project__isnull=True)
            }
            stacktrace_order = int(options.get("stacktrace_order", -1) or -1)

            d["options"] = {
                "theme": options.get("theme") or "light",
                "language": options.get("language") or "en",
                "stacktraceOrder": stacktrace_order,
                "timezone": options.get("timezone")
                or settings.SENTRY_DEFAULT_TIME_ZONE,
                "clock24Hours": options.get("clock_24_hours") or False,
            }

            d["flags"] = {
                "newsletter_consent_prompt":
                bool(obj.flags.newsletter_consent_prompt)
            }

        if attrs.get("avatar"):
            avatar: SerializedAvatarFields = {
                "avatarType":
                attrs["avatar"].get_avatar_type_display(),
                "avatarUuid":
                attrs["avatar"].ident if attrs["avatar"].file_id else None,
            }
        else:
            avatar = {"avatarType": "letter_avatar", "avatarUuid": None}
        d["avatar"] = avatar

        # TODO(dcramer): move this to DetailedUserSerializer
        if attrs["identities"] is not None:
            d["identities"] = [{
                "id": str(i.id),
                "name": i.ident,
                "organization": {
                    "slug": i.auth_provider.organization.slug,
                    "name": i.auth_provider.organization.name,
                },
                "provider": {
                    "id": i.auth_provider.provider,
                    "name": i.auth_provider.get_provider().name,
                },
                "dateSynced": i.last_synced,
                "dateVerified": i.last_verified,
            } for i in attrs["identities"]]

        return d