コード例 #1
0
def handle_404(request, response, exception):
    email_admin(
        '404 error!',
        '404 error!\n\n%s\n\n%s\n\n%s' % (request, response, exception))
    template = JINJA_ENVIRONMENT.get_template('error.html')
    response.write(template.render({'code': 404, 'error_text': exception}))
    response.set_status(404)
コード例 #2
0
    def post(self):
        """Remove one plaque and its associated GCS image."""
        user = users.get_current_user()
        if not users.is_current_user_admin():
            return "admin only, please log in"
        name = "anon" if user is None else user.nickname()

        plaque_key = self.request.get('plaque_key')
        plaque = ndb.Key(urlsafe=plaque_key).get()

        if name != 'kester':
            email_admin('Delete warning!',
                        '%s tried to delete %s' % (name, plaque.title_url))
            raise NotImplementedError("delete is turned off for now")

        try:
            gcs.delete(plaque.pic)

            # Delete search index for this document
            plaque_search_index = search.Index(PLAQUE_SEARCH_INDEX_NAME)
            results = plaque_search_index.search(search_term)
            for result in results:
                plaques = [ndb.Key(urlsafe=r.doc_id).get() for r in results]
                plaque_search_index.delete(result.doc_id)
        except:
            pass

        plaque.key.delete()
        #memcache.flush_all()
        email_admin('%s Deleted plaque %s' % (name, plaque.title_url),
                    '%s Deleted plaque %s' % (name, plaque.title_url))
        self.redirect('/nextpending')
コード例 #3
0
def handle_500(request, response, exception):
    error_text = '500 error!\n{}\n{}\n{}'.format(request, response, exception)
    email_admin('500 error!', error_text)
    template = JINJA_ENVIRONMENT.get_template('error.html')
    logging.error(exception)
    error_text = exception
    response.write(template.render({'code': 500, 'error_text': error_text}))
    response.set_status(500)
コード例 #4
0
def alert_if_sensitive(sensitive_files,
                       ip=None,
                       scheme=None,
                       host=None,
                       nginx_path=None,
                       nginx_query_str=None,
                       referrer=None,
                       code=None,
                       size=None,
                       user_agent=None,
                       cookies=None,
                       **kwargs):
    if cookies is None:
        cookies = {}
    import utils
    import myadmin.lib
    if os.path.basename(nginx_path) in sensitive_files:
        filename = os.path.basename(nginx_path)
        # Don't alert if it's just me.
        is_admin = myadmin.lib.get_admin_cookie(DummyRequest(cookies))
        if is_admin:
            logging.warning(
                'Download of {} detected, but vistor seems to be me.'.format(
                    filename))
            return
        subject = 'Visitor downloaded {}!'.format(filename)
        url = '{}://{}{}'.format(scheme, host, nginx_path)
        if nginx_query_str and nginx_query_str != '-':
            url += '?' + nginx_query_str
        cookies_list = [
            '{}:\t{}'.format(name, morsel.value)
            for name, morsel in cookies.items()
        ]
        if cookies_list:
            cookies_str = '\n  ' + '\n  '.join(cookies_list)
        else:
            cookies_str = 'None'
        if referrer and referrer != '-':
            referrer_value = referrer
        else:
            referrer_value = None
        body = (
            'A visitor from IP address {0} accessed {1} (referrer: {2!r}).\n\n'
            'User agent: {3}\n\n'
            'Cookies received: {4}\n\n'
            'Response code: {5}, bytes served: {6}\n'.format(
                ip, url, referrer_value, user_agent, cookies_str, code, size))
        logging.warning(
            'Download of {} detected. Email alert sent.'.format(filename))
        utils.email_admin(subject, body)
コード例 #5
0
def activity_notify(request,
                    page_name,
                    action,
                    notes=None,
                    view_url=None,
                    blocked=True):
    params = request.POST
    honey_value = truncate(params.get(HONEYPOT_NAME))
    if notes:
        note_ids = [str(getattr(note, 'id', note)) for note in notes]
        notes_str = ' ' + ', '.join(note_ids)
    else:
        notes_str = ''
    content = params.get('content')
    if content is None:
        content_line = ''
    else:
        content_line = 'Content: {}'.format(content)
    cookies = []
    for cookie in request.visit.cookies_got.all():
        cookies.append('{}:\t{}'.format(cookie.name, cookie.value))
    if blocked:
        result_str = 'blocked from'
        subject = 'Spambot blocked'
    else:
        result_str = 'seen'
        subject = 'Notepad alert'
    cookies_str = '\n  ' + '\n  '.join(cookies)
    meta_str = ''
    for key in ('jsEnabled', ):
        value = params.get(key)
        meta_str += f'\n  {key}:\t{value!r}'
    checked_boxes = get_checked_boxes(params)
    boxes_str = ', '.join([str(box) for box in checked_boxes])
    log.warning(
        f'Visitor ({request.visit.visitor}) {result_str} {action}{notes_str} on page {page_name!r}. '
        f'Ruhuman field: {honey_value!r}, Checked boxes: {boxes_str}')
    email_body = f"""
Visitor from {request.visit.visitor.ip} {result_str} {action}{notes_str} on page {page_name!r}.
Ruhuman field: {honey_value!r}
Checked boxes: {boxes_str}
User agent: {request.visit.visitor.user_agent}
Metadata seen:{meta_str}
Cookies sent:{cookies_str}
{content_line}"""
    email_admin(subject, email_body)
    if view_url is not None:
        return HttpResponseRedirect(view_url)
コード例 #6
0
    def post(self):
        if not users.is_current_user_admin():
            return "admin only, please log in"

        plaque_key = self.request.get('plaque_key')
        plaque = ndb.Key(urlsafe=plaque_key).get()
        title = plaque.title.encode('unicode-escape')
        logging.info("disapproving plaque {0}".format(title))
        plaque.approved = False
        plaque.put()

        user = users.get_current_user()
        name = "anon" if user is None else user.nickname()
        msg = "{1} disapproved plaque {0}".format(title, name)
        email_admin(msg, msg)

        self.redirect('/')
コード例 #7
0
    def get(self):

        #raise NotImplementedError("Turned off")

        if not users.is_current_user_admin():
            return "admin only, please log in"
        plaques = Plaque.pending_list(num=67)

        user = users.get_current_user()
        name = "anon" if user is None else user.nickname()
        msg = "%s ran ApproveAllPending on %s plaques" % (name, len(plaques))
        email_admin(msg, msg)

        logging.info("Approving %s plaques in ApproveAllPending" %
                     len(plaques))
        for plaque in plaques:
            plaque.approved = True
            plaque.put()
        memcache.flush_all()
        self.redirect('/')