def post_detail(self, request, **kwargs): draw_id = kwargs['pk'] try: draw = self._client.retrieve_draw(draw_id) except mongodb.MongoDriver.NotFoundError: return http.HttpBadRequest("Draw not found") try: data = json.loads(request.body) except TypeError: data = json.loads(request.body.decode('utf-8')) if 'add_user' in data: if not draw.check_write_access(request.user): raise exceptions.ImmediateHttpResponse( response=http.HttpUnauthorized("Only the owner can add users")) new_users = {str(user) for user in data['add_user'] if '@' in str(user)} new_users = [user for user in new_users if user not in draw.users] draw.users.extend(new_users) self._client.save_draw(draw) invite_user(new_users, draw) if 'remove_user' in data: if not draw.check_write_access(request.user): raise exceptions.ImmediateHttpResponse( response=http.HttpUnauthorized("Only the owner can remove users")) try: draw.users.remove(str(data['remove_user'])) self._client.save_draw(draw) except ValueError: pass if request.user.is_authenticated() and request.user.pk not in draw.users: draw.users.append(request.user.pk) self._client.save_draw(draw) return http.HttpCreated()
def add_user_to_draw(request): """Add an user to a draw and sends a mail to inform him""" # DEPRECATE draw_id = request.GET.get('draw_id') users_to_add = request.GET.get('emails', "") if draw_id is None: return HttpResponseBadRequest() LOG.info("Adding {0} to draw {1}".format(users_to_add, draw_id)) bom_draw = MONGO.retrieve_draw(draw_id) user_can_write_draw(request.user, bom_draw) # Raises 500 new_users = users_to_add.replace(',', ' ').split() try: for email in new_users: validate_email(email) # Raises a ValidationError except ValidationError: LOG.info("One or more emails are not correct") return HttpResponseBadRequest() bom_draw.users += new_users MONGO.save_draw(bom_draw) invite_user(new_users, draw_id, request.user.email) LOG.info("{0} users added to draw {1}".format(len(new_users), draw_id)) return HttpResponse()
def create_draw(request): """create_draw ws """ # DEPRECATE LOG.debug("Received post data: {0}".format(request.POST)) draw_type = request.POST.get("draw_type") if not draw_type: return HttpResponseBadRequest("Missing post argument draw_type") draw_form = draw_factory.create_form(draw_type, request.POST) try: bom_draw = draw_form.build_draw() except DrawFormError: LOG.info("Form not valid: {0}".format(draw_form.errors)) return HttpResponseBadRequest("Not valid") else: bom_draw._id = None # Ensure we have no id set_owner(bom_draw, request) MONGO.save_draw(bom_draw) LOG.info("Generated draw: {0}".format(bom_draw)) ga_track_draw(bom_draw, "create_draw") # notify users if any if bom_draw.users: invite_user(bom_draw.users, bom_draw.pk, bom_draw.owner) draw_url = reverse('retrieve_draw', args=(bom_draw.pk, )) return JsonResponse({'draw_url': draw_url})
def create_draw(request, draw_type, is_public): """create_draw view @param Serves the page to create a draw (empty) form and handles the creation of a draw. When received a GET request returns an empty form to create a draw and with a POST and data attempts to create a draw. If success, redirects to the draw, otherwise, returns the form with the errors. """ is_public = is_public or is_public == 'True' if request.method == 'GET': LOG.debug("Serving view to create a draw: {0}".format(draw_type)) draw_form = draw_factory.create_form(draw_type) return render(request, 'draws/new_draw.html', {"draw": draw_form, "is_public": is_public, "draw_type": draw_type, "default_title": draw_form.DEFAULT_TITLE}) else: LOG.debug("Received post data: {0}".format(request.POST)) draw_form = draw_factory.create_form(draw_type, request.POST) try: bom_draw = draw_form.build_draw() except DrawFormError: return render(request, 'draws/new_draw.html', {"draw": draw_form, "is_public": is_public, "draw_type": draw_type}) else: bom_draw._id = None # Ensure we have no id set_owner(bom_draw, request) # generate a result if a private draw if not bom_draw.is_shared: bom_draw.toss() MONGO.save_draw(bom_draw) LOG.info("Generated draw: {0}".format(bom_draw)) ga_track_draw(bom_draw, "create_draw") # notify users if any if bom_draw.users: invite_user(bom_draw.users, bom_draw.pk, bom_draw.owner) return redirect('retrieve_draw', draw_id=bom_draw.pk)
def post_detail(self, request, **kwargs): draw_id = kwargs['pk'] try: draw = self._client.retrieve_draw(draw_id) except mongodb.MongoDriver.NotFoundError: return http.HttpBadRequest("Draw not found") try: data = json.loads(request.body) except TypeError: data = json.loads(request.body.decode('utf-8')) if 'add_user' in data: if not draw.check_write_access(request.user): raise exceptions.ImmediateHttpResponse( response=http.HttpUnauthorized( "Only the owner can add users")) new_users = { str(user) for user in data['add_user'] if '@' in str(user) } new_users = [user for user in new_users if user not in draw.users] draw.users.extend(new_users) self._client.save_draw(draw) invite_user(new_users, draw) if 'remove_user' in data: if not draw.check_write_access(request.user): raise exceptions.ImmediateHttpResponse( response=http.HttpUnauthorized( "Only the owner can remove users")) try: draw.users.remove(str(data['remove_user'])) self._client.save_draw(draw) except ValueError: pass if request.user.is_authenticated( ) and request.user.pk not in draw.users: draw.users.append(request.user.pk) self._client.save_draw(draw) return http.HttpCreated()