Add CloudUsersView
This commit is contained in:
parent
f68d3f2146
commit
5e494531eb
6 changed files with 59 additions and 4 deletions
|
|
@ -102,7 +102,7 @@ class CloudOrganizationConnector(models.Model):
|
|||
i.email = cloud_users_identities_to_update[i.cloud_id]["email"]
|
||||
i.phone_number_verified = cloud_users_identities_to_update[i.cloud_id]["is_phone_number_verified"]
|
||||
|
||||
# TODO: Grafana Twilio: check if data validation needed.
|
||||
# TODO: Grafana CN: check if data validation needed.
|
||||
CloudUserIdentity.objects.bulk_create(cloud_users_identities_to_create, batch_size=1000)
|
||||
CloudUserIdentity.objects.bulk_update(
|
||||
existing_cloud_identities, ["email", "phone_number_verified"], batch_size=1000
|
||||
|
|
|
|||
|
|
@ -10,5 +10,5 @@ class CloudUserIdentity(models.Model):
|
|||
)
|
||||
|
||||
class Meta:
|
||||
# TODO: Grafana Twilio: Check if this constraint needed
|
||||
# TODO: Grafana CN: Check if this constraint needed
|
||||
unique_together = ("cloud_id", "organization")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
from common.api_helpers.optional_slash_router import optional_slash_path
|
||||
|
||||
from .views import CloudHeartbeatStatusView
|
||||
from .views import CloudHeartbeatStatusView, CloudUsersView
|
||||
|
||||
urlpatterns = [
|
||||
optional_slash_path("cloud_heartbeat_status", CloudHeartbeatStatusView.as_view(), name="cloud_heartbeat_status"),
|
||||
optional_slash_path("cloud_users", CloudUsersView.as_view(), name="cloud_users"),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1 +1,2 @@
|
|||
from .cloud_heartbeat_status import CloudHeartbeatStatusView # noqa: F401
|
||||
from .cloud_users import CloudUsersView # noqa: F401
|
||||
|
|
|
|||
53
engine/apps/oss_installation/views/cloud_users.py
Normal file
53
engine/apps/oss_installation/views/cloud_users.py
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
from urllib.parse import urljoin
|
||||
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from apps.auth_token.auth import PluginAuthentication
|
||||
from apps.oss_installation.models import CloudOrganizationConnector, CloudUserIdentity
|
||||
from apps.user_management.models import User
|
||||
from common.api_helpers.paginators import HundredPageSizePaginator
|
||||
|
||||
|
||||
class CloudUsersView(HundredPageSizePaginator, APIView):
|
||||
authentication_classes = (PluginAuthentication,)
|
||||
# TODO: Grafana CN - permissions, ratelimit
|
||||
permission_classes = (IsAuthenticated,)
|
||||
|
||||
def get(self, request):
|
||||
queryset = User.objects.filter(organization=self.request.user.organization)
|
||||
|
||||
if self.request.user.current_team is not None:
|
||||
queryset = queryset.filter(teams=self.request.user.current_team).distinct()
|
||||
|
||||
results = self.paginate_queryset(queryset, request, view=self)
|
||||
|
||||
emails = list(queryset.values_list("email", flat=True))
|
||||
cloud_identities = list(
|
||||
CloudUserIdentity.objects.filter(organization=self.request.user.organization, email__in=emails)
|
||||
)
|
||||
cloud_identities = {cloud_identity.email: cloud_identity for cloud_identity in cloud_identities}
|
||||
|
||||
response = []
|
||||
|
||||
connector = CloudOrganizationConnector.objects.first()
|
||||
|
||||
for user in results:
|
||||
cloud_identity = cloud_identities.get(user.email, None)
|
||||
link = None
|
||||
status = 0
|
||||
if cloud_identity:
|
||||
status = 1
|
||||
is_phone_verified = cloud_identity.phone_number_verified
|
||||
if is_phone_verified:
|
||||
status = 2
|
||||
link = urljoin(
|
||||
connector.cloud_url, f"a/grafana-oncall-app/?page=users&p=1&id={cloud_identity.cloud_id}"
|
||||
)
|
||||
|
||||
# TODO: Grafana CN - decide if emails is needed. If yes - don't forget to check that they mustn't be shown to users
|
||||
response.append(
|
||||
{"id": user.public_primary_key, "username": user.username, "cloud_sync_status": status, "link": link}
|
||||
)
|
||||
|
||||
return self.get_paginated_response(response)
|
||||
|
|
@ -41,7 +41,7 @@ class SMSMessageManager(models.Manager):
|
|||
|
||||
sms_message = sms_message_qs.first()
|
||||
if sms_message.grafana_cloud_notification:
|
||||
# If sms was sent via grafana twilio it is don't needed to create logs on it's delivery status.
|
||||
# If sms was sent via grafana cloud notifications don't create logs on its delivery status.
|
||||
return
|
||||
log_record = None
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue