Exemplo n.º 1
0
    def comment(self, slug, name="", email=None, body="", **kwargs):
        """Post a comment from :class:`~mediacore.forms.comments.PostCommentForm`.

        :param slug: The media :attr:`~mediacore.model.media.Media.slug`
        :returns: Redirect to :meth:`view` page for media.

        """

        def result(success, message=None, comment=None):
            if request.is_xhr:
                result = dict(success=success, message=message)
                if comment:
                    result["comment"] = render("comments/_list.html", {"comment_to_render": comment}, method="xhtml")
                return result
            elif success:
                return redirect(action="view")
            else:
                return self.view(slug, name=name, email=email, body=body, **kwargs)

        akismet_key = request.settings["akismet_key"]
        if akismet_key:
            akismet = Akismet(agent=USER_AGENT)
            akismet.key = akismet_key
            akismet.blog_url = request.settings["akismet_url"] or url_for("/", qualified=True)
            akismet.verify_key()
            data = {
                "comment_author": name.encode("utf-8"),
                "user_ip": request.environ.get("REMOTE_ADDR"),
                "user_agent": request.environ.get("HTTP_USER_AGENT", ""),
                "referrer": request.environ.get("HTTP_REFERER", "unknown"),
                "HTTP_ACCEPT": request.environ.get("HTTP_ACCEPT"),
            }

            if akismet.comment_check(body.encode("utf-8"), data):
                return result(False, _(u"Your comment has been rejected."))

        media = fetch_row(Media, slug=slug)
        request.perm.assert_permission(u"view", media.resource)

        c = Comment()

        name = filter_vulgarity(name)
        c.author = AuthorWithIP(name, email, request.environ["REMOTE_ADDR"])
        c.subject = "Re: %s" % media.title
        c.body = filter_vulgarity(body)

        require_review = request.settings["req_comment_approval"]
        if not require_review:
            c.reviewed = True
            c.publishable = True

        media.comments.append(c)
        DBSession.flush()
        send_comment_notification(media, c)

        if require_review:
            message = _("Thank you for your comment! We will post it just as " "soon as a moderator approves it.")
            return result(True, message=message)
        else:
            return result(True, comment=c)
Exemplo n.º 2
0
    def comment(self, slug, **values):
        """Post a comment from :class:`~mediacore.forms.comments.PostCommentForm`.

        :param slug: The media :attr:`~mediacore.model.media.Media.slug`
        :returns: Redirect to :meth:`view` page for media.

        """
        akismet_key = helpers.fetch_setting('akismet_key')
        akismet_url = helpers.fetch_setting('akismet_url')
        if akismet_key:
            akismet = Akismet(agent='MediaCore/%s' % MEDIACORE_VERSION)
            akismet.key = akismet_key
            akismet.blog_url = akismet_url or url_for('/', qualified=True)
            akismet.verify_key()
            data = {'comment_author': values['name'].encode('utf-8'),
                    'user_ip': request.environ.get('REMOTE_ADDR'),
                    'user_agent': request.environ.get('HTTP_USER_AGENT'),
                    'referrer': request.environ.get('HTTP_REFERER',  'unknown'),
                    'HTTP_ACCEPT': request.environ.get('HTTP_ACCEPT')}

            if akismet.comment_check(values['body'].encode('utf-8'), data):
                title = "Comment Rejected"
                text = "Your comment appears to be spam and has been rejected."
                add_transient_message('comment_posted', title, text)
                redirect(action='view', anchor='top')

        media = fetch_row(Media, slug=slug)

        c = Comment()
        c.author = AuthorWithIP(
            values['name'], values['email'], request.environ['REMOTE_ADDR']
        )
        c.subject = 'Re: %s' % media.title
        c.body = values['body']

        require_review = asbool(helpers.fetch_setting('req_comment_approval'))
        if not require_review:
            c.reviewed = True
            c.publishable = True

        media.comments.append(c)
        DBSession.add(media)
        email.send_comment_notification(media, c)

        if require_review:
            title = "Thanks for your comment!"
            text = "We will post it just as soon as a moderator approves it."
            add_transient_message('comment_posted', title, text)
            redirect(action='view', anchor='top')
        else:
            redirect(action='view', anchor='comment-%s' % c.id)
Exemplo n.º 3
0
    def comment(self, slug, name='', email=None, body='', **kwargs):
        """Post a comment from :class:`~mediadrop.forms.comments.PostCommentForm`.

        :param slug: The media :attr:`~mediadrop.model.media.Media.slug`
        :returns: Redirect to :meth:`view` page for media.

        """
        def result(success, message=None, comment=None):
            if request.is_xhr:
                result = dict(success=success, message=message)
                if comment:
                    result['comment'] = render('comments/_list.html',
                        {'comment_to_render': comment},
                        method='xhtml')
                return result
            elif success:
                return redirect(action='view')
            else:
                return self.view(slug, name=name, email=email, body=body,
                                 **kwargs)

        if request.settings['comments_engine'] != 'builtin':
            abort(404)
        akismet_key = request.settings['akismet_key']
        if akismet_key:
            akismet = Akismet(agent=USER_AGENT)
            akismet.key = akismet_key
            akismet.blog_url = request.settings['akismet_url'] or \
                url_for('/', qualified=True)
            akismet.verify_key()
            data = {'comment_author': name.encode('utf-8'),
                    'user_ip': request.environ.get('REMOTE_ADDR'),
                    'user_agent': request.environ.get('HTTP_USER_AGENT', ''),
                    'referrer': request.environ.get('HTTP_REFERER',  'unknown'),
                    'HTTP_ACCEPT': request.environ.get('HTTP_ACCEPT')}

            if akismet.comment_check(body.encode('utf-8'), data):
                return result(False, _(u'Your comment has been rejected.'))

        media = fetch_row(Media, slug=slug)
        request.perm.assert_permission(u'view', media.resource)

        c = Comment()

        name = filter_vulgarity(name)
        c.author = AuthorWithIP(name, email, request.environ['REMOTE_ADDR'])
        c.subject = 'Re: %s' % media.title
        c.body = filter_vulgarity(body)

        require_review = request.settings['req_comment_approval']
        if not require_review:
            c.reviewed = True
            c.publishable = True

        media.comments.append(c)
        DBSession.flush()
        send_comment_notification(media, c)

        if require_review:
            message = _('Thank you for your comment! We will post it just as '
                        'soon as a moderator approves it.')
            return result(True, message=message)
        else:
            return result(True, comment=c)
Exemplo n.º 4
0
    def comment(self, slug, name='', email=None, body='', **kwargs):
        """Post a comment from :class:`~mediacore.forms.comments.PostCommentForm`.

        :param slug: The media :attr:`~mediacore.model.media.Media.slug`
        :returns: Redirect to :meth:`view` page for media.

        """
        def result(success, message=None, comment=None):
            if request.is_xhr:
                result = dict(success=success, message=message)
                if comment:
                    result['comment'] = render('comments/_list.html',
                                               {'comment_to_render': comment},
                                               method='xhtml')
                return result
            elif success:
                return redirect(action='view')
            else:
                return self.view(slug,
                                 name=name,
                                 email=email,
                                 body=body,
                                 **kwargs)

        if request.settings['comments_engine'] != 'mediacore':
            abort(404)
        akismet_key = request.settings['akismet_key']
        if akismet_key:
            akismet = Akismet(agent=USER_AGENT)
            akismet.key = akismet_key
            akismet.blog_url = request.settings['akismet_url'] or \
                url_for('/', qualified=True)
            akismet.verify_key()
            data = {
                'comment_author': name.encode('utf-8'),
                'user_ip': request.environ.get('REMOTE_ADDR'),
                'user_agent': request.environ.get('HTTP_USER_AGENT', ''),
                'referrer': request.environ.get('HTTP_REFERER', 'unknown'),
                'HTTP_ACCEPT': request.environ.get('HTTP_ACCEPT')
            }

            if akismet.comment_check(body.encode('utf-8'), data):
                return result(False, _(u'Your comment has been rejected.'))

        media = fetch_row(Media, slug=slug)
        request.perm.assert_permission(u'view', media.resource)

        c = Comment()

        name = filter_vulgarity(name)
        c.author = AuthorWithIP(name, email, request.environ['REMOTE_ADDR'])
        c.subject = 'Re: %s' % media.title
        c.body = filter_vulgarity(body)

        require_review = request.settings['req_comment_approval']
        if not require_review:
            c.reviewed = True
            c.publishable = True

        media.comments.append(c)
        DBSession.flush()
        send_comment_notification(media, c)

        if require_review:
            message = _('Thank you for your comment! We will post it just as '
                        'soon as a moderator approves it.')
            return result(True, message=message)
        else:
            return result(True, comment=c)
Exemplo n.º 5
0
def register_view(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect(reverse('django_neve_profile_edit', kwargs={'slug': request.user.get_profile().slug}))

    if request.method == "GET":
        form = RegisterForm()
        return TemplateResponse(request, 'django_neve/register.html', {'form': form})
    
    if request.method == "POST":
        form = RegisterForm(request.POST)
        
        if form.is_valid():
            user = User()
            
            ## set username to a random unique string
            username = gen_username()
            #ensure there is no collision
            while User._default_manager.filter(username=username).count() > 0:
                username = gen_username()
            
            user.username = username
            user.email = form.cleaned_data['email']
            user.set_password(form.cleaned_data['password'])
            
            user.first_name = form.cleaned_data['first_name']
            user.last_name = form.cleaned_data['last_name']
    
            user.is_active = False
            user.save()
            
            if AKISMET_KEY:
                akismet = Akismet(agent='django/1.3')
                akismet.key = AKISMET_KEY
                akismet.blog_url = "http://{host}/".format(host=request.META['HTTP_HOST'])
                if not akismet.verify_key():
                    log = ActivityLog()
                    log.ip = request.META['REMOTE_ADDR']
                    log.user = user
                    log.user_agent = request.META['HTTP_USER_AGENT']
                    log.type='alert'
                    log.action = 'Registration: Akistmet key not valid'
                    log.save()
                try:
                    spam = akismet.comment_check(None, {
                        'user_ip': request.META['REMOTE_ADDR'],
                        'user_agent': request.META['HTTP_USER_AGENT'],
                        'referrer': request.META['HTTP_REFERER'],
                        'comment_type': 'registration',
                        'comment_author_email': user.email,
                        'comment_author': '{first_name} {last_name}'.format(first_name=user.first_name, last_name=user.last_name),
                        }, build_data=False)
                
                except:
                    spam = False

                if spam:
                    log = ActivityLog()
                    log.ip = request.META['REMOTE_ADDR']
                    log.user = user
                    log.user_agent = request.META['HTTP_USER_AGENT']
                    log.type='alert'
                    log.action = 'Registration: Akismet reported as potential spammer'
                    log.save()

                    user.is_active = False
                    
            if 'HTTP_CF_IPCOUNTRY' in request.META:
                if request.META['HTTP_CF_IPCOUNTRY'] not in ('US', 'MX', 'CA',):
                    log = ActivityLog()
                    log.ip = request.META['REMOTE_ADDR']
                    log.user = user
                    log.user_agent = request.META['HTTP_USER_AGENT']
                    log.type='alert'
                    log.action = 'Registration: International registration'
                    log.save()

                    user.is_active = False
            
            user.save()
            
            log = ActivityLog()
            log.ip = request.META['REMOTE_ADDR']
            log.user = user
            log.user_agent = request.META['HTTP_USER_AGENT']
            log.type='info'
            log.action = 'Registration: User Created'
            log.save()
            
            profile = user.get_profile()
            profile.display_name = form.cleaned_data['display_name']
            profile.save()
            
            if user.is_active:
                login(request, authenticate(username=user.email, password=form.cleaned_data['password']))
                return HttpResponseRedirect(reverse('django_neve_profile_edit', kwargs={'slug': profile.slug}))
            else:

                sender = settings.EMAIL_FROM
                message = render_to_string('django_neve/email/activation.txt', {'new_user': user}, context_instance=RequestContext(request))
                
                send_mail('{site} account activation'.format(site=Site.objects.get_current().name),
                            message, 
                            sender,
                            [user.email], fail_silently=False)
                messages.info(request, 'You should be receiving an email shortly with instructions on how to activate your account.')

                return HttpResponseRedirect('/')
            
        else:
            ### form not valid
            return TemplateResponse(request, 'django_neve/register.html', {'form': form})


    
    log = ActivityLog()
    log.ip = request.META['REMOTE_ADDR']
    log.user_agent = request.META['HTTP_USER_AGENT']
    log.type='alert'
    log.action = 'Registration: Bad Method'
    log.save()
    
    response = HttpResponse("Error: Method not allowed")
    response.status_code=405
    return response