예제 #1
0
 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()
예제 #2
0
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()
예제 #3
0
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})
예제 #4
0
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)
예제 #5
0
 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()