77from rest_framework import serializers , status
88from rest_framework .response import Response
99
10- from sentry import roles
10+ from sentry import features , options , roles
11+ from sentry .app import ratelimiter
1112from sentry .api .base import DocSection , Endpoint
1213from sentry .api .bases .organization import OrganizationPermission
1314from sentry .api .paginator import DateTimePaginator , OffsetPaginator
1415from sentry .api .serializers import serialize
1516from sentry .models import (
16- AuditLogEntryEvent , Organization , OrganizationMember , OrganizationStatus ,
17- ProjectPlatform
17+ AuditLogEntryEvent , Organization , OrganizationMember ,
18+ OrganizationMemberTeam , OrganizationStatus , ProjectPlatform
1819)
1920from sentry .search .utils import tokenize_query , in_iexact
2021from sentry .utils .apidocs import scenario , attach_scenarios
@@ -32,6 +33,7 @@ class OrganizationSerializer(serializers.Serializer):
3233 name = serializers .CharField (max_length = 64 , required = True )
3334 slug = serializers .RegexField (r'^[a-z0-9_\-]+$' , max_length = 50 ,
3435 required = False )
36+ defaultTeam = serializers .BooleanField (required = False )
3537
3638
3739class OrganizationIndexEndpoint (Endpoint ):
@@ -154,6 +156,20 @@ def post(self, request):
154156 return Response ({'detail' : 'This endpoint requires user info' },
155157 status = 401 )
156158
159+ if not features .has ('organizations:create' , actor = request .user ):
160+ return Response ({
161+ 'detail' : 'Organizations are not allowed to be created by this user.'
162+ }, status = 401 )
163+
164+ limit = options .get ('api.rate-limit.org-create' )
165+ if limit and ratelimiter .is_limited (
166+ u'org-create:{}' .format (request .user .id ),
167+ limit = 5 , window = 3600 ,
168+ ):
169+ return Response ({
170+ 'detail' : 'You are attempting to create too many organizations too quickly.'
171+ }, status = 429 )
172+
157173 serializer = OrganizationSerializer (data = request .DATA )
158174
159175 if serializer .is_valid ():
@@ -171,12 +187,23 @@ def post(self, request):
171187 status = 409 ,
172188 )
173189
174- OrganizationMember .objects .create (
175- user = request .user ,
190+ om = OrganizationMember .objects .create (
176191 organization = org ,
192+ user = request .user ,
177193 role = roles .get_top_dog ().id ,
178194 )
179195
196+ if result .get ('defaultTeam' ):
197+ team = org .team_set .create (
198+ name = org .name ,
199+ )
200+
201+ OrganizationMemberTeam .objects .create (
202+ team = team ,
203+ organizationmember = om ,
204+ is_active = True
205+ )
206+
180207 self .create_audit_entry (
181208 request = request ,
182209 organization = org ,
0 commit comments