Exemple #1
0
def handle_article_get(request, path):
    try:
        redirect_if_no_session(request)

        sid = get_session_id(request)
        sess = registry.query(sid)
        prefs = registry.get_prefs(sid)

        dest = check_arg(path)
        if not dest:
            return error(request, u'잘못된 인자입니다.')

        query = URL_POST_PAGE + '?id=%s' % (pagedefs.PAGE_IDS[dest])
        
        result = remote.send_request(request, query, referer=URL_POST_PAGE)
        html, soup = remote.postprocess(result.read())
        
        redirect_if_not_signed_on(request, html, soup, pagedefs.PAGE_PARSERS[dest])

        errcode, errmsg = pagedefs.PAGE_PARSERS[dest].check_error(request, html, soup)
        if errcode:
            return error_forward(request, errmsg)
    
        data = default_template_vars(u'%s - 새 글 쓰기' % pagedefs.PAGE_NAMES[dest], request, dest)
    
        data.update(pagedefs.PAGE_PARSERS[dest].check_write(dest, html, soup))

        if request.META['HTTP_USER_AGENT']:
            ua = request.META['HTTP_USER_AGENT']
            if (('iPhone' in ua or 'iPod' in ua) and 'iPhone OS' in ua) or 'iPad' in ua:
                if 'OS 6_' in ua or 'OS 7_' in ua or 'OS 8_' in ua:
                    pass
                else:
                    data['iphone'] = True
                    data['session'] = md5(request.COOKIES['session']).hexdigest()

        if dest == 'free':
            zantan = 15 - get_zantan(request)
            if zantan:
                data['zantan'] = zantan

        if prefs.photo_resize:
            data['size'] = prefs.photo_resize
    
        data['bid'] = dest
        data['target'] = '/post/%s' % dest
        data['mode'] = 'post'
    except redirection, e:
        return e.where
Exemple #2
0
def handle(request):
    out = registry.query(get_session_id(request))
    
    if not out:
        return error(request, u'로그인되어 있지 않습니다.', redir='/signon')
    
    if not out[0] in ADMINS_EXCF:
        return error(request, u'권한이 없습니다.')

    data = default_template_vars(u'관리자 페이지', request)
    data['limit_audit'] = LIMIT_AUDIT
    data['sessions'] = models.registry.objects.order_by('-signon_time').all()
    data['audit'] = models.auditlog.objects.order_by('-time').all()[:LIMIT_AUDIT]
    data['faillog'] = models.faillog.objects.order_by('-time').all()[:LIMIT_AUDIT]
    
    return render_to_response('admin.html', data)
Exemple #3
0
def send_request(request, url, data=None, sessid=None, referer=None):
    if not sessid:
        try:
            lsid = request.COOKIES["session"]
            sessid = registry.query(lsid)[1]
        except:
            pass

    headers = {}
    if sessid:
        headers["Cookie"] = "PHPSESSID=%s" % sessid
    if referer:
        headers["Referer"] = referer

    req = urllib2.Request(url, data, headers)
    return urllib2.urlopen(req)
Exemple #4
0
def handle_article_post(request, path):
    try:
        redirect_if_no_session(request)
        sid = get_session_id(request)
        sess = registry.query(sid)
        
        dest = check_arg(path)
        if not dest:
            return error(request, u'잘못된 인자입니다.')

        try:
            subject = request.POST['subject'].encode(TARGET_ENCODING)
            contents = request.POST['contents'].encode(TARGET_ENCODING)
        
            if not subject or not contents:
                raise Exception
        except:
            return error(request, u'내용을 입력해 주셔야 합니다.')

	keys = map(lambda x: 'file%d' % x, sorted(map(lambda x: int(x[4:]), request.FILES.keys())))
        keys.reverse()
        for f in keys:
            try:
                prefs = registry.get_prefs(sid)
                url = uploader.upload(request, request.FILES[f], size=prefs.photo_resize, bid=dest, uid=sess[0])
                cx = '<img src=\'%s\' alt=\'%s\' />\n\n' % (url, request.FILES[f].name)
            except Exception, e:
                cx = u'업로드 실패하였습니다: <b>%s</b> (%s)\n\n' % (request.FILES[f].name, str(e))
                
            contents = cx.encode(TARGET_ENCODING) + contents
    
        query = {'subject': subject, 'memo': contents, 'mode': 'write', 'id': pagedefs.PAGE_IDS[dest], 'use_html': '1'}

        try:
            query['category'] = request.POST['category']
        except:
            pass

        l = remote.send_request(request, URL_POST, urllib.urlencode(query), referer=URL_REFERER)
        result, soup = remote.postprocess(l.read())

        redirect_if_not_signed_on(request, result, soup, pagedefs.PAGE_PARSERS[dest])

        errcode, errmsg = pagedefs.PAGE_PARSERS[dest].check_error(request, result, soup)
        if errcode:
            return error_forward(request, errmsg)
Exemple #5
0
def redirect_if_no_session(request):
    # we have to kill inactive session first.
    registry.flush_outdated()

    ret = False

    redir = redirect('/signon?%s' % urllib.urlencode({'redirect': request.path.encode('utf-8')}))

    sid = get_session_id(request)

    if not sid:
        ret = True
    elif not registry.query(sid):
        force_sign_out(request, redir)
        ret = True

    if ret:
        raise redirection(redir)

    # there is an activity
    registry.touch(sid)
Exemple #6
0
def default_template_vars(title, request, location=None):
    out = {}

    out['title'] = title
    out['base_url'] = BASE_URL
    out['css'] = 'light'

    try:
        sid = get_session_id(request)
        sess = registry.query(sid)
        if sess:
            out['signed_on'] = True
            out['user'] = sess[0]
            if sess[0] in ADMINS_EXCF:
                out['admin'] = True

            prefs = registry.get_prefs(sid)
            out['css'] = prefs.template
    except:
        pass

    if sess and sess[0].startswith('asdsadgj'):
        raise Exception

    #if 'aprilfools' in request.COOKIES:
    #    out['aprilfools'] = True
    #else:
    #    out['aprilfools'] = False

    pages = []
    for i in PAGES:
        pages.append({'id': i[0], 'location': i[1], 'name': i[2]})
    out['jumplist'] = pages
    if location:
        out['location'] = location

    return out