Beispiel #1
0
def _reply(request, board_name, article_id):
    '''
    주어진 게시판의 주어진 글에 실제로 reply 를 단다.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: reply를 달고자 하는 글이 있는 board name
    @type  article_id: string (int)
    @param article_id: reply를 달고자 하는 글의 번호
    @rtype: int
    @return: reply 가 달리는 글의 root id
    '''
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    reply_dic = {}
    reply_dic['content'] = request.POST.get('content', '')
    reply_dic['title'] = request.POST.get('title', '')
    reply_dic['heading'] = request.POST.get('heading', '')  # TODO: HEADING !!
    root_id = request.POST.get('root_id', '')

    use_signature = request.POST.get('signature_check', None)
    if use_signature:
        reply_dic['content'] += '\n\n' + request.POST.get('signature', '')

    article_id = server.article_manager.write_reply(
        sess, board_name, int(article_id), WrittenArticle(**reply_dic))

    #upload file
    if request.FILES:
        _upload_file(server, sess, article_id, request.FILES)

    return root_id
Beispiel #2
0
def update(request):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    blacklist = server.blacklist_manager.get_blacklist(sess)
    bl_submit_chooser = request.POST['bl_submit_chooser']
    if bl_submit_chooser == "update":
        for b in blacklist:
            article_bl_key = 'blacklist_article_%s' % b.blacklisted_user_username
            if article_bl_key in request.POST:
                b.block_article = True
            else:
                b.block_article = False
            message_bl_key = 'blacklist_message_%s' % b.blacklisted_user_username
            if message_bl_key in request.POST:
                b.block_message = True
            else:
                b.block_message = False

            server.blacklist_manager.modify_blacklist(sess, BlacklistRequest(
                blacklisted_user_username = b.blacklisted_user_username,
                block_article = b.block_article,
                block_message = b.block_message))
    if bl_submit_chooser == "delete":
        for b in blacklist:
            delete_user = request.POST.get('bl_%s_delete' % b.blacklisted_user_username, "")
            if delete_user != "":
                server.blacklist_manager.delete_blacklist(sess, delete_user)

    return HttpResponseRedirect("/blacklist/")
Beispiel #3
0
def read(request, board_name, article_id):
    '''
    주어진 게시판의 주어진 글을 읽어온다.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: 읽고자 하는 글이 있는 Board Name
    @type  article_id: string (int)
    @param article_id: 읽고자 하는 글의 번호
    '''
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    r['mode'] = 'board'
    # 글의 정보를 r 에 저장
    _read(request, r, sess, board_name, article_id)

    # 화면 하단의 글목록의 정보를 r 에 저장
    if filter(lambda x: x.board_name == board_name,
              r['board_list']):  # 게시판 통폐합으로 인해 기존 링크가 깨지는 것을 방지
        get_article_list(request, r, 'read')
        fake_author(r['article_list'], False)

    fake_author(r['article_read_list'])

    # 계층형 Reply 구조를 위해 reply를 미리 render
    rendered_reply = render_reply(board_name, r['article_read_list'][1:],
                                  '/board/%s/' % board_name)
    r['rendered_reply'] = rendered_reply
    r['article'] = r['article_read_list'][0]

    rendered = render_to_string('board/read.html', r)

    return HttpResponse(rendered)
Beispiel #4
0
def read(request, mode, article_id):
    '''
    컬렉션의 주어진 글을 읽어온다.

    @type  request: Django Request
    @param request: Request
    @type  article_id: string (int)
    @param article_id: 읽고자 하는 글의 번호
    '''
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    # 글의 정보를 r 에 저장
    warara.board.views._read(request, r, sess, u'', article_id)

    # 화면 하단의 글목록의 정보를 r 에 저장
    warara.board.views.get_article_list(request, r, COLLECTION_TYPE[mode]['read_mode'])

    # board_name 이 없기 때문에 사용한 Hack.
    r['board_name'] = COLLECTION_TYPE[mode]['board_name']
    r['mode'] = mode

    warara.board.views.fake_author(r['article_read_list'])
    warara.board.views.fake_author(r['article_list'], False)

    # 계층형 Reply 구조를 위해 reply를 미리 render
    r['rendered_reply'] = warara.board.views.render_reply(r['board_name'], r['article_read_list'][1:], COLLECTION_TYPE[mode]['base_url'])
    r['article'] = r['article_read_list'][0]

    rendered = render_to_string('board/read.html', r)
    return HttpResponse(rendered)
Beispiel #5
0
def login(request):
    if request.method != 'POST':
        return HttpResponseRedirect('/')

    if request.POST.get('precheck', 0):
        return login_precheck(request)

    # 가끔 username / password 를 아예 안 넣는 경우가 있다.
    username = request.POST.get('username', None)
    password = request.POST.get('password', None)
    if username == None or password == None:
        # XXX 2010.07.02. 사실 합당한 에러를 만들어야 하는데 ...
        raise NotLoggedIn()

    # 로그인 요청을 수행한 url 을 current_page 로 설정한다
    # 해당되는 url 이 없을 경우 /main/ 을 기본값으로 설정한다
    current_page = request.POST.get('current_page_url', '/main/')

    client_ip = request.META['REMOTE_ADDR']
    server = warara_middleware.get_server()

    try:
        session_key = server.login_manager.login(username, password, client_ip)
    except InvalidOperation, e:
        #XXX: (pipoket) Ugly hack for showing nickname while not logged in.
        # print e.why
        splited = e.why.splitlines()
        if splited[0] == 'not activated':
            username = splited[1]
            nickname = splited[2]
            rendered = render_to_string('account/mail_confirm.html', {
                'username': username, 'nickname': nickname})
            return HttpResponse(rendered)
        else:
            return HttpResponse('<script>alert("Login failed!"); history.back()</script>');
Beispiel #6
0
def rss(request, mode):
    '''
    컬렉션에 대한 RSS 파일을 제공한다.

    @type  request: Django Request
    @param request: Request
    '''

    from django.utils import feedgenerator

    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    feed = feedgenerator.Atom1Feed(title = u'ARA', link = COLLECTION_TYPE[mode]['base_url'] + 'rss/', description = COLLECTION_TYPE[mode]['rss_desc'])

    page_no = 1
    page_length = 20

    if mode == 'all':
        article_list = server.article_manager.article_list(sess, u"", u"", page_no, page_length, True).hit
    elif mode == 'scrap':
        article_list = server.article_manager.scrapped_article_list(sess, page_no, page_length).hit

    warara.board.views.fake_author(article_list, False)

    for article in article_list:
        feed.add_item(title='[%s]%s' % (article.board_name, article.title),
            link = COLLECTION_TYPE[mode]['base_url'] + '%d/' % article.id,
            author_name=article.author_nickname,
            pubdate=datetime.datetime.fromtimestamp(article.date),
            description=u'author : %s date : %s' % (article.author_nickname, datetime.datetime.fromtimestamp(article.date)))

    return HttpResponse(feed.writeString('utf-8'), mimetype=feedgenerator.Atom1Feed.mime_type)
Beispiel #7
0
def read(request, message_list_type, message_id):
    server = warara_middleware.get_server()
    sess, _ = warara.check_logged_in(request)

    r = {}
    r["logged_in"] = True
    r["page_length"] = request.GET.get("page_length", 10)
    r["page_no"] = request.GET.get("page_no", 1)
    message_id = int(message_id)
    if message_list_type == "inbox":
        r["message"] = server.messaging_manager.read_received_message(sess, message_id)
    elif message_list_type == "outbox":
        r["message"] = server.messaging_manager.read_sent_message(sess, message_id)
    r["message"].sent_time = datetime.datetime.fromtimestamp(r["message"].sent_time)

    r["message_id"] = message_id
    r["message_list_type"] = message_list_type

    if message_list_type == "inbox":
        r["person_type"] = "sender"
        r["person"] = r["message"].from_
    elif message_list_type == "outbox":
        r["person_type"] = "receiver"
        r["person"] = r["message"].to

    rendered = render_to_string("message/read.html", r)
    return HttpResponse(rendered)
Beispiel #8
0
    def render(self, ctx):
        server = warara_middleware.get_server()
        # XXX(hodduc) : wairara.check_logged_in을 거쳤음에도 불구하고 Context를 따로 만들어서 쓰는 view가 너무 많다.
        # 하나로 통일하는 것이 깔끔해 보인다
        if not 'arara_session' in ctx:
            return ''
        sess = ctx['arara_session']
        # Get Weather info
        if warara_settings.USE_WEATHER_FORECAST:
            ctx['weather_info'] = server.bot_manager.get_weather_info(sess)
            if ctx['weather_info'].city == None:
                ctx['has_weather'] = False
            else:
                if ctx['weather_info'].city.lower() == 'daejeon':
                    ctx['weather_info'].city = u'대전'
                elif ctx['weather_info'].city.lower() == 'seoul':
                    ctx['weather_info'].city = u'서울'

                ctx['weather_info'].current_icon_url = weather_icon_replace(ctx['weather_info'].current_icon_url)
                ctx['weather_info'].tomorrow_icon_url = weather_icon_replace(ctx['weather_info'].tomorrow_icon_url)
                ctx['weather_info'].day_after_tomorrow_icon_url = weather_icon_replace(ctx['weather_info'].day_after_tomorrow_icon_url)
                ctx['has_weather'] = True
        else:
            ctx['has_weather'] = False

        return ""
Beispiel #9
0
def _relay_fiction_reply(request, board_name, article_id):
    '''
    이벤트용 임시 답글 함수.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: reply를 달고자 하는 글이 있는 board name
    @type  article_id: string (int)
    @param article_id: reply를 달고자 하는 글의 번호
    @rtype: int
    @return: reply 가 달리는 글의 root id
    '''
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    reply_dic = {}
    color = request.POST.get('color', '#000000')
    reply_dic['content'] = '<font color=\"' + color + '\">' + request.POST.get('content', '') + '</font>'
    reply_dic['title'] = request.POST.get('title', '')
    reply_dic['heading'] = request.POST.get('heading', '') # TODO: HEADING !!
    root_id = request.POST.get('root_id', '')

    use_signature = request.POST.get('signature_check', None)
    if use_signature:
        reply_dic['content'] += '\n\n' + request.POST.get('signature', '')

    article_id = server.article_manager.write_reply(sess, board_name, int(article_id), WrittenArticle(**reply_dic))

    return root_id
Beispiel #10
0
def rss(request, board_name):
    '''
    주어진 게시판에 대한 RSS 파일을 제공한다.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: 검색하려는 글이 있는 board name
    '''

    from django.utils import feedgenerator

    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    feed = feedgenerator.Atom1Feed(title = u'ARA/%s' % board_name, link = u'/board/%s/rss/' % board_name, description = u'A RSS of all articles in %s board' % board_name)
    
    page_no = 1
    page_length = 20
    article_list = server.article_manager.article_list(sess, board_name, None, page_no, page_length, True).hit
    fake_author(article_list, False)

    for article in article_list:
        if article.heading:
            article_title = u'[%s] %s' % (article.heading, article.title)
        else:
            article_title = u'%s' % article.title
        feed.add_item(title=article_title,
            link=u'/board/%s/%d/' % (board_name, article.id),
            author_name=article.author_nickname,
            pubdate=datetime.datetime.fromtimestamp(article.date),
            description=u'author : %s date : %s' % (article.author_nickname, datetime.datetime.fromtimestamp(article.date)))

    return HttpResponse(feed.writeString('utf-8'), mimetype=feedgenerator.Atom1Feed.mime_type)
Beispiel #11
0
def read(request, message_list_type, message_id):
    server = warara_middleware.get_server()
    sess, _ = warara.check_logged_in(request)

    r = {}
    r['logged_in'] = True
    r['page_length'] = request.GET.get('page_length', 10)
    r['page_no'] = request.GET.get('page_no', 1)
    message_id = int(message_id)
    if message_list_type == 'inbox':
        r['message'] = server.messaging_manager.read_received_message(
            sess, message_id)
    elif message_list_type == 'outbox':
        r['message'] = server.messaging_manager.read_sent_message(
            sess, message_id)
    r['message'].sent_time = datetime.datetime.fromtimestamp(
        r['message'].sent_time)

    r['message_id'] = message_id
    r['message_list_type'] = message_list_type

    if message_list_type == 'inbox':
        r['person_type'] = 'sender'
        r['person'] = r['message'].from_
    elif message_list_type == 'outbox':
        r['person_type'] = 'receiver'
        r['person'] = r['message'].to

    rendered = render_to_string('message/read.html', r)
    return HttpResponse(rendered)
Beispiel #12
0
def password_recovery(request, username, token_code):
    sess, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    if r['logged_in'] == True:
        raise InvalidOperation("Already logged in!")

    if request.method == 'POST':
        new_password = request.POST.get('password', '')
        new_password_check = request.POST.get('re_password', '')

        error_msg = ''
        if new_password != new_password_check:
            error_msg = 'Passwords are not agree.'
        if new_password == '':
            error_msg = 'Password cannot be empty.'
        if error_msg:
            return HttpResponse('<script>alert("%s"); history.back(); </script>' % error_msg)

        user_password_dic = {'username':username, 'current_password':u'', 'new_password':new_password}
        try:
            server.member_manager.modify_password_with_token(UserPasswordInfo(**user_password_dic), token_code)
        except InvalidOperation, e:
            return HttpResponse('<script>alert("%s"); history.back(); </script>' % e.why)

        return HttpResponseRedirect("/")
Beispiel #13
0
    def render(self, ctx):
        server = warara_middleware.get_server()
        # XXX(hodduc) : wairara.check_logged_in을 거쳤음에도 불구하고 Context를 따로 만들어서 쓰는 view가 너무 많다.
        # 하나로 통일하는 것이 깔끔해 보인다
        if not 'arara_session' in ctx:
            return ''
        sess = ctx['arara_session']
        # Get Weather info
        if warara_settings.USE_WEATHER_FORECAST:
            ctx['weather_info'] = server.bot_manager.get_weather_info(sess)
            if ctx['weather_info'].city == None:
                ctx['has_weather'] = False
            else:
                if ctx['weather_info'].city.lower() == 'daejeon':
                    ctx['weather_info'].city = u'대전'
                elif ctx['weather_info'].city.lower() == 'seoul':
                    ctx['weather_info'].city = u'서울'

                ctx['weather_info'].current_icon_url = weather_icon_replace(ctx['weather_info'].current_icon_url)
                ctx['weather_info'].tomorrow_icon_url = weather_icon_replace(ctx['weather_info'].tomorrow_icon_url)
                ctx['weather_info'].day_after_tomorrow_icon_url = weather_icon_replace(ctx['weather_info'].day_after_tomorrow_icon_url)
                ctx['has_weather'] = True
        else:
            ctx['has_weather'] = False

        return ""
Beispiel #14
0
def index(request):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    category_list = server.board_manager.get_category_list()
    r['category_list'] = category_list + [{'category_name':'None'}]

    board_list = server.board_manager.get_board_list()

    for board in board_list:
        for category in category_list:
            if board.category_id == category.id:
                board.category_name = category.category_name
    
    r['board_list'] = board_list

    bbs_managers_list = []
    for board in board_list:
        bbs_managers = server.board_manager.get_bbs_managers(board.board_name)
        bbs_managers_list.append({'board': board, 'managers': bbs_managers})
    r['bbs_managers_list'] = bbs_managers_list

    # TODO: 배너를 단순히 나열하기보다는 배너의 날짜 등을 함께 표시하는 것이 어떨까?
    banner_list = server.notice_manager.list_banner(sess)
    r['banner_list'] = banner_list

    rendered = render_to_string('sysop/index.html', r)
    return HttpResponse(rendered)
Beispiel #15
0
def write_(request, board_name):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    article_dic = {}
    r['url'] = ''.join(['/board/', board_name, '/'])
    article_dic['content'] = request.POST.get('text', '')
    use_signature = request.POST.get('signature_check', None)
    if use_signature:
        article_dic['content'] += '\n\n' + request.POST.get('signature', '')
    article_dic['title'] = request.POST.get('title', '')
    article_dic['heading'] = request.POST.get('heading', '') # Heading !!!
    if request.POST.get('write_type', 0) == 'modify':
        article_no = request.POST.get('article_no', 0)
        article_id = server.article_manager.modify_article(sess, board_name, int(article_no), WrittenArticle(**article_dic))

        delete_file = request.POST.get('delete_file', 0) #delete_file
        if delete_file:
            delete_file = delete_file[1:]
            delete_file = delete_file.split('&')
            for file_id in delete_file:
                file = server.file_manager.delete_file(sess, int(article_no), int(file_id))
                os.remove("%s/%s/%s" % (FILE_DIR, file.file_path, file.saved_filename))

    else:
        article_id = server.article_manager.write_article(sess, board_name, WrittenArticle(**article_dic))

    #upload file
    if request.FILES:
        _upload_file(server, sess, article_id, request.FILES)

    if request.POST.get('write_type', 0) == 'modify':
        return HttpResponseRedirect('/board/%s/%s#%s' % (board_name, request.POST.get('root_id', article_id), article_id))
    else:
        return HttpResponseRedirect('/board/%s/%s' % (board_name, str(article_id)))
Beispiel #16
0
def read_root(request, board_name, article_id):
    '''
    주어진 게시판의 주어진 글이 답글인 경우 root글의 주소로 읽어온다.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: 읽고자 하는 글이 있는 Board Name
    @type  article_id: string (int)
    @param article_id: 읽고자 하는 글의 번호
    '''
    server = warara_middleware.get_server() #
    sess, r = warara.check_logged_in(request) #

    r['mode'] = 'board'
    article_list = server.article_manager.read_article(sess, board_name, int(article_id))

    root_article_id = article_list[0].root_id
    # 글의 정보를 r 에 저장
    _read(request, r, sess, board_name, root_article_id)

    # 화면 하단의 글목록의 정보를 r 에 저장
    get_article_list(request, r, 'read')

    fake_author(r['article_read_list'])
    fake_author(r['article_list'], False)

    rendered = render_to_string('board/read.html', r)
    return HttpResponse(rendered)
Beispiel #17
0
def _relay_fiction_reply(request, board_name, article_id):
    '''
    이벤트용 임시 답글 함수.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: reply를 달고자 하는 글이 있는 board name
    @type  article_id: string (int)
    @param article_id: reply를 달고자 하는 글의 번호
    @rtype: int
    @return: reply 가 달리는 글의 root id
    '''
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    reply_dic = {}
    color = request.POST.get('color', '#000000')
    reply_dic['content'] = '<font color=\"' + color + '\">' + request.POST.get(
        'content', '') + '</font>'
    reply_dic['title'] = request.POST.get('title', '')
    reply_dic['heading'] = request.POST.get('heading', '')  # TODO: HEADING !!
    root_id = request.POST.get('root_id', '')

    use_signature = request.POST.get('signature_check', None)
    if use_signature:
        reply_dic['content'] += '\n\n' + request.POST.get('signature', '')

    article_id = server.article_manager.write_reply(
        sess, board_name, int(article_id), WrittenArticle(**reply_dic))

    return root_id
Beispiel #18
0
def send_password_recovery_email(request):
    sess, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    if r['logged_in'] == True:
        raise InvalidOperation("Already logged in!")

    if request.method == 'POST':
        username = request.POST.get('username_field', '')
        email = request.POST.get('email_field', '')

        error_msg = ''
        if not username:
            error_msg = 'Username field is empty.'
        if not email:
            error_msg = 'Email field is empty.'
        if error_msg:
            return HttpResponse(
                '<script>alert("%s"); history.back(); </script>' % error_msg)

        try:
            server.member_manager.send_password_recovery_email(username, email)
            resp = "We sent e-mail to your e-mail address. Please check your inbox."
        except InvalidOperation, e:
            resp = e.why

        return HttpResponse('<script>alert("%s"); history.back(); </script>' %
                            resp)
Beispiel #19
0
def password_recovery(request, username, token_code):
    sess, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    if r['logged_in'] == True:
        raise InvalidOperation("Already logged in!")

    if request.method == 'POST':
        new_password = request.POST.get('password', '')
        new_password_check = request.POST.get('re_password', '')

        error_msg = ''
        if new_password != new_password_check:
            error_msg = 'Passwords are not agree.'
        if new_password == '':
            error_msg = 'Password cannot be empty.'
        if error_msg:
            return HttpResponse(
                '<script>alert("%s"); history.back(); </script>' % error_msg)

        user_password_dic = {
            'username': username,
            'current_password': u'',
            'new_password': new_password
        }
        try:
            server.member_manager.modify_password_with_token(
                UserPasswordInfo(**user_password_dic), token_code)
        except InvalidOperation, e:
            return HttpResponse(
                '<script>alert("%s"); history.back(); </script>' % e.why)

        return HttpResponseRedirect("/")
Beispiel #20
0
def account_modify(request):
    session_key, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    account = server.member_manager.get_info(session_key)
    if request.method == 'POST':
        nickname = request.POST['mynickname']
        signature = request.POST['mysig']
        introduction = request.POST['myintroduce']
        language = request.POST['mylanguage']
        campus = request.POST['mycampus']
        listing_mode = int(request.POST['mylistingmode'])
        modified_information_dic = {
            'nickname': nickname,
            'signature': signature,
            'self_introduction': introduction,
            'default_language': language,
            'widget': 0,
            'layout': 0,
            'campus': campus,
            'listing_mode': listing_mode
        }
        server.member_manager.modify_user(
            session_key, UserModification(**modified_information_dic))
        if language == "kor":
            request.session["django_language"] = "ko"
        elif language == "eng":
            request.session["django_language"] = "en"
        return HttpResponseRedirect("/account/")
    else:
        account.logged_in = True
        rendered = render_to_string('account/myaccount_modify.html',
                                    account.__dict__)
        return HttpResponse(rendered)
Beispiel #21
0
def _reply(request, board_name, article_id):
    '''
    주어진 게시판의 주어진 글에 실제로 reply 를 단다.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: reply를 달고자 하는 글이 있는 board name
    @type  article_id: string (int)
    @param article_id: reply를 달고자 하는 글의 번호
    @rtype: int
    @return: reply 가 달리는 글의 root id
    '''
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    reply_dic = {}
    reply_dic['content'] = request.POST.get('content', '')
    reply_dic['title'] = request.POST.get('title', '')
    reply_dic['heading'] = request.POST.get('heading', '') # TODO: HEADING !!
    root_id = request.POST.get('root_id', '')

    use_signature = request.POST.get('signature_check', None)
    if use_signature:
        reply_dic['content'] += '\n\n' + request.POST.get('signature', '')

    article_id = server.article_manager.write_reply(sess, board_name, int(article_id), WrittenArticle(**reply_dic))

    #upload file
    if request.FILES:
        _upload_file(server, sess, article_id, request.FILES)

    return root_id
Beispiel #22
0
def register(request):
    sess, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    if r['logged_in'] == True:
        raise InvalidOperation("Already logged in!")

    if request.method == 'POST':
        username = request.POST['id']
        password = request.POST['password']
        nickname = request.POST['nickname']
        email = request.POST['email']
        signature = request.POST['sig']
        introduction = request.POST['introduce']
        language = request.POST['language']
        campus = request.POST['campus']
        user_information_dict = {
            'username': username,
            'password': password,
            'nickname': nickname,
            'email': email,
            'signature': signature,
            'self_introduction': introduction,
            'default_language': language,
            'campus': campus
        }
        message = server.member_manager.register_(
            UserRegistration(**user_information_dict))
        return HttpResponseRedirect("/main/")

    rendered = render_to_string('account/register.html', r)
    return HttpResponse(rendered)
Beispiel #23
0
def send_password_recovery_email(request):
    sess, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    if r['logged_in'] == True:
        raise InvalidOperation("Already logged in!")

    if request.method == 'POST':
        username = request.POST.get('username_field', '')
        email = request.POST.get('email_field', '')

        error_msg = ''
        if not username:
            error_msg = 'Username field is empty.'
        if not email:
            error_msg = 'Email field is empty.'
        if error_msg:
            return HttpResponse('<script>alert("%s"); history.back(); </script>' % error_msg)

        try:
            server.member_manager.send_password_recovery_email(username, email)
            resp = "We sent e-mail to your e-mail address. Please check your inbox."
        except InvalidOperation, e:
            resp = e.why

        return HttpResponse('<script>alert("%s"); history.back(); </script>' % resp)
Beispiel #24
0
def refresh_weather(request):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    server.bot_manager.refresh_weather_info()

    return HttpResponseRedirect('/sysop/')
Beispiel #25
0
def delete(request):
    if request.method == 'POST':
        username = request.POST['username']
        server = warara_middleware.get_server()
        sess, r = warara.check_logged_in(request)
        server.blacklist_manager.delete_blacklist(sess, username)
        return HttpResponseRedirect("/blacklist/")
Beispiel #26
0
def file_download(request, board_name, article_root_id, article_id, file_id):
    server = warara_middleware.get_server()
    file = server.file_manager.download_file(int(article_id), int(file_id))
    file_path = "%s/%s/%s" % (FILE_DIR, file.file_path, file.saved_filename)
    file_ob = open(file_path, 'rb')
    response = HttpResponse(file_ob.read())
    file_ob.close()
    type, encoding = mimetypes.guess_type(file.real_filename)
    if type is None:
        type = 'application/octet-stream'
    response['Content-Type'] = type
    response['Content-Length'] = str(os.stat(file_path).st_size)
    if encoding is not None:
        response['Content-Encoding'] = encoding

    if u'WebKit' in request.META['HTTP_USER_AGENT']:
        filename_header = 'filename="%s"' % file.real_filename.encode('utf-8')
    elif u'MSIE' in request.META['HTTP_USER_AGENT']:
        filename_header = ''
    else:
        filename_header = 'filename*=UTF-8\'\'%s' % urllib.quote(
            file.real_filename.encode('utf-8'))

    response['Content-Disposition'] = 'attachment; ' + filename_header
    return response
Beispiel #27
0
def read(request, board_name, article_id):
    '''
    주어진 게시판의 주어진 글을 읽어온다.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: 읽고자 하는 글이 있는 Board Name
    @type  article_id: string (int)
    @param article_id: 읽고자 하는 글의 번호
    '''
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    r['mode'] = 'board'
    # 글의 정보를 r 에 저장
    _read(request, r, sess, board_name, article_id)

    # 화면 하단의 글목록의 정보를 r 에 저장
    if filter(lambda x: x.board_name == board_name, r['board_list']):   # 게시판 통폐합으로 인해 기존 링크가 깨지는 것을 방지
        get_article_list(request, r, 'read')
        fake_author(r['article_list'], False)

    fake_author(r['article_read_list'])

    # 계층형 Reply 구조를 위해 reply를 미리 render
    rendered_reply = render_reply(board_name, r['article_read_list'][1:], '/board/%s/' % board_name)
    r['rendered_reply'] = rendered_reply
    r['article'] = r['article_read_list'][0]

    rendered = render_to_string('board/read.html', r)

    return HttpResponse(rendered)
Beispiel #28
0
def check_logged_in(request):
    r = {}
    if "arara_session_key" in request.session:
        sess = request.session['arara_session_key']

        username = request.session['arara_username']
        checksum = hashlib.sha1(sess+"@"+username).hexdigest()
        if request.COOKIES.get('arara_checksum', '') != checksum:
            from warara import warara_middleware
            server = warara_middleware.get_server()
            User_Info = server.member_manager.get_info(sess)
            server.login_manager.debug__check_session(sess, username, request.META['REMOTE_ADDR'], User_Info)
            request.session.flush()

            sess = ""
            r['logged_in'] = False
            r['username'] = ""
            request.session['django_language']="en"
        else:
            r['arara_session'] = sess
            r['logged_in'] = True
            r['username'] = request.session.get('arara_username', 0);
    else:
        sess = ""
        r['logged_in'] = False
        r['username'] = ""
        request.session['django_language']="en"

    return sess, r
Beispiel #29
0
def read_root(request, board_name, article_id):
    '''
    주어진 게시판의 주어진 글이 답글인 경우 root글의 주소로 읽어온다.

    @type  request: Django Request
    @param request: Request
    @type  board_name: string
    @param board_name: 읽고자 하는 글이 있는 Board Name
    @type  article_id: string (int)
    @param article_id: 읽고자 하는 글의 번호
    '''
    server = warara_middleware.get_server()  #
    sess, r = warara.check_logged_in(request)  #

    r['mode'] = 'board'
    article_list = server.article_manager.read_article(sess, board_name,
                                                       int(article_id))

    root_article_id = article_list[0].root_id
    # 글의 정보를 r 에 저장
    _read(request, r, sess, board_name, root_article_id)

    # 화면 하단의 글목록의 정보를 r 에 저장
    get_article_list(request, r, 'read')

    fake_author(r['article_read_list'])
    fake_author(r['article_list'], False)

    rendered = render_to_string('board/read.html', r)
    return HttpResponse(rendered)
Beispiel #30
0
def check_logged_in(request):
    r = {}
    if "arara_session_key" in request.session:
        sess = request.session['arara_session_key']

        username = request.session['arara_username']
        checksum = hashlib.sha1(sess+"@"+username).hexdigest()
        if request.COOKIES.get('arara_checksum', '') != checksum:
            from warara import warara_middleware
            server = warara_middleware.get_server()
            User_Info = server.member_manager.get_info(sess)
            server.login_manager.debug__check_session(sess, username, request.META['REMOTE_ADDR'], User_Info)
            request.session.flush()

            sess = ""
            r['logged_in'] = False
            r['username'] = ""
            request.session['django_language']="en"
        else:
            r['arara_session'] = sess
            r['logged_in'] = True
            r['username'] = request.session.get('arara_username', 0);
    else:
        sess = ""
        r['logged_in'] = False
        r['username'] = ""
        request.session['django_language']="en"

    return sess, r
Beispiel #31
0
def count_new_message(request):
    server = warara_middleware.get_server()
    sess, _ = warara.check_logged_in(request)
    try:
        result = server.messaging_manager.get_unread_message_count(sess)
        return HttpResponse(str(result))
    except:
        return HttpResponse("0")
Beispiel #32
0
def do_get_board_alias(value):
    "Get board name and board alias"
    server = warara_middleware.get_server()
    board_alias = cache.get('board_alias.' + value)
    if not board_alias:
        board_alias = server.board_manager.get_board(value).board_alias
        cache.set('board_alias.' + value, board_alias, CACHETIME_BOARD_ALIAS)
    return board_alias
Beispiel #33
0
def do_get_board_description(value, arg):
    "Get board name and board description"
    server = warara_middleware.get_server()
    board_description = cache.get('board_description.' + value)
    if not board_description:
        board_description = server.board_manager.get_board(value).board_description
        cache.set('board_description.' + value, board_description, CACHETIME_BOARD_DESCRIPTION)
    return board_description
Beispiel #34
0
def count_new_message(request):
    server = warara_middleware.get_server()
    sess, _ = warara.check_logged_in(request)
    try:
        result = server.messaging_manager.get_unread_message_count(sess)
        return HttpResponse(str(result))
    except:
        return HttpResponse("0")
Beispiel #35
0
def do_get_board_description(value, arg):
    "Get board name and board description"
    server = warara_middleware.get_server()
    board_description = cache.get('board_description.' + value)
    if not board_description:
        board_description = server.board_manager.get_board(value).board_description
        cache.set('board_description.' + value, board_description, CACHETIME_BOARD_DESCRIPTION)
    return board_description
Beispiel #36
0
def do_get_board_alias(value):
    "Get board name and board alias"
    server = warara_middleware.get_server()
    board_alias = cache.get('board_alias.' + value)
    if not board_alias:
        board_alias = server.board_manager.get_board(value).board_alias
        cache.set('board_alias.' + value, board_alias, CACHETIME_BOARD_ALIAS)
    return board_alias
Beispiel #37
0
def mobile_main(request):
    server = warara_middleware.get_server()
    sess, ctx = warara.check_logged_in(request)

    # Set username if user is guest
    if ctx['username'] == '':
        ctx['username'] = '******'
    # Get the today best list
    ret = cache.get('today_best_list')
    if not ret:
        ret = server.article_manager.get_today_best_list(5)
        for item in ret:
            item.date = datetime.datetime.fromtimestamp(item.date)
        cache.set('today_best_list', ret, 60)
    # TODO: Change the key 'todays_best_list' to 'today_best_list'
    #       in both here and Template file.
    ctx['todays_best_list'] = enumerate(ret)

    # Get the weekly-best list
    ret = cache.get('weekly_best_list')
    if not ret:
        ret = server.article_manager.get_weekly_best_list(5)
        for item in ret:
            item.date = datetime.datetime.fromtimestamp(item.date)
        cache.set('weekly_best_list', ret, 60)
    ctx['weekly_best_list'] = enumerate(ret)

    # Get the today most list
    ret = cache.get('today_most_list')
    if not ret:
        ret = server.article_manager.get_today_most_list(5)
        for item in ret:
            item.date = datetime.datetime.fromtimestamp(item.date)
        cache.set('today_most_list', ret, 60)
    # TODO: Change the key 'todays_best_list' to 'today_best_list'
    #       in both here and Template file.
    ctx['todays_most_list'] = enumerate(ret)

    # Get the weekly-best list
    ret = cache.get('weekly_most_list')
    if not ret:
        ret = server.article_manager.get_weekly_most_list(5)
        for item in ret:
            item.date = datetime.datetime.fromtimestamp(item.date)
        cache.set('weekly_most_list', ret, 60)
    ctx['weekly_most_list'] = enumerate(ret)


    # Get messages for the current user
    if ctx['logged_in']:
        unread_message_count = server.messaging_manager.get_unread_message_count(sess)
        if unread_message_count > 0:
            ctx['new_message'] = True
        else:
            ctx['new_message'] = False

    rendered = render_to_string('mobile/main.html', ctx)
    return HttpResponse(rendered)
Beispiel #38
0
def main(request):
    server = warara_middleware.get_server()
    sess, ctx = warara.check_logged_in(request)
    # TODO: rename all 'r' variables to 'ctx' that means 'context'.

    # Set username if user is guest
    if ctx['username'] == '':
        ctx['username'] = '******'
    # Get the today best list
    ret = cache.get('today_best_list')
    if not ret:
        ret = server.article_manager.get_today_best_list(5)
        for item in ret:
            item.date = datetime.datetime.fromtimestamp(item.date)
        cache.set('today_best_list', ret, 60)
    # TODO: Change the key 'todays_best_list' to 'today_best_list'
    #       in both here and Template file.
    ctx['todays_best_list'] = enumerate(ret)

    # Get the weekly-best list
    ret = cache.get('weekly_best_list')
    if not ret:
        ret = server.article_manager.get_weekly_best_list(5)
        for item in ret:
            item.date = datetime.datetime.fromtimestamp(item.date)
        cache.set('weekly_best_list', ret, 60)
    ctx['weekly_best_list'] = enumerate(ret)

    # Get recent article list of boards
    ctx['recent_articles'] = OrderedDict()
    for board in MAIN_BOARDS:
        try:
            ctx['recent_articles'][
                board] = server.article_manager.recent_article_list(board)
        except InvalidOperation:
            pass

    # Get messages for the current user
    if ctx['logged_in']:
        unread_message_count = server.messaging_manager.get_unread_message_count(
            sess)
        if unread_message_count > 0:
            ctx['new_message'] = True
        else:
            ctx['new_message'] = False

    # Get banner
    try:
        ctx['banner'] = server.notice_manager.get_banner()
        ctx['has_banner'] = True
    except InvalidOperation:
        ctx['has_banner'] = False

    # Ksearch
    ctx['KSEARCH_ENABLED'] = KSEARCH_ENABLED

    rendered = render_to_string('main.html', ctx)
    return HttpResponse(rendered)
Beispiel #39
0
def account(request):
    session_key, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    account = server.member_manager.get_info(session_key)

    account.last_logout_time = timestamp2datetime(account.last_logout_time)
    account.logged_in = True
    rendered = render_to_string('account/myaccount_frame.html', account.__dict__)
    return HttpResponse(rendered)
Beispiel #40
0
def destroy(request, board_name, root_id, article_no):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    server.article_manager.destroy_article(sess, board_name, int(article_no))
    # XXX 2010.05.14.
    # 글을 destroy하였으므로 해당 보드로 돌아간다.
    # 추후에는 pageno 정보를 이용하도록 수정하는 게 좋겠다.
    # 어차피 지금은 SYSOP 이 아니면 이 작업을 할 수 없지만.
    return HttpResponseRedirect('/board/%s/' % board_name)
Beispiel #41
0
def file_download(request, board_name, article_root_id, article_id, file_id):
    server = warara_middleware.get_server()
    file = {}
    file= server.file_manager.download_file(int(article_id), int(file_id))
    file_ob = open("%s/%s/%s" % (FILE_DIR, file.file_path, file.saved_filename))

    response = HttpResponse(file_ob, mimetype="application/x-forcedownload")
    response['Content-Disposition'] = "attachment; filename=" + unicode(file.real_filename).encode('cp949', 'replace')
    return response
Beispiel #42
0
def unscrap(request, board_name, root_id, article_no):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    try:
        server.article_manager.unscrap_article(sess, int(article_no))
        response = HttpResponse("OK")
    except InvalidOperation, e:
        response = HttpResponse("NOT_SCRAPPED")
Beispiel #43
0
def unscrap(request, board_name, root_id, article_no):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)

    try:
        server.article_manager.unscrap_article(sess, int(article_no))
        response = HttpResponse("OK")
    except InvalidOperation, e:
        response = HttpResponse("NOT_SCRAPPED")
Beispiel #44
0
def destroy(request, board_name, root_id, article_no):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    server.article_manager.destroy_article(sess, board_name, int(article_no))
    # XXX 2010.05.14.
    # 글을 destroy하였으므로 해당 보드로 돌아간다.
    # 추후에는 pageno 정보를 이용하도록 수정하는 게 좋겠다.
    # 어차피 지금은 SYSOP 이 아니면 이 작업을 할 수 없지만.
    return HttpResponseRedirect('/board/%s/' % board_name)
Beispiel #45
0
def main(request):
    server = warara_middleware.get_server() 
    sess, ctx = warara.check_logged_in(request)
    # TODO: rename all 'r' variables to 'ctx' that means 'context'.

    # Set username if user is guest
    if ctx['username'] == '':
        ctx['username'] = '******'
    # Get the today best list
    ret = cache.get('today_best_list')
    if not ret:
        ret = server.article_manager.get_today_best_list(5)
        for item in ret:
            item.date = datetime.datetime.fromtimestamp(item.date)
        cache.set('today_best_list', ret, 60)
    # TODO: Change the key 'todays_best_list' to 'today_best_list' 
    #       in both here and Template file.
    ctx['todays_best_list'] = enumerate(ret)

    # Get the weekly-best list
    ret = cache.get('weekly_best_list')
    if not ret:
        ret = server.article_manager.get_weekly_best_list(5)
        for item in ret:
            item.date = datetime.datetime.fromtimestamp(item.date)
        cache.set('weekly_best_list', ret, 60)
    ctx['weekly_best_list'] = enumerate(ret)

    # Get recent article list of boards
    ctx['recent_articles'] = OrderedDict()
    for board in MAIN_BOARDS:
        try:
            ctx['recent_articles'][board] = server.article_manager.recent_article_list(board)
        except InvalidOperation:
            pass

    # Get messages for the current user
    if ctx['logged_in']:
        unread_message_count = server.messaging_manager.get_unread_message_count(sess)
        if unread_message_count > 0:
            ctx['new_message'] = True
        else:
            ctx['new_message'] = False

    # Get banner
    try:
        ctx['banner'] = server.notice_manager.get_banner()
        ctx['has_banner'] = True
    except InvalidOperation:
        ctx['has_banner'] = False

    # Ksearch
    ctx['KSEARCH_ENABLED'] = KSEARCH_ENABLED

    rendered = render_to_string('main.html', ctx)
    return HttpResponse(rendered)
Beispiel #46
0
def get_various_info(request, r):
    server = warara_middleware.get_server()
    sess, _ = warara.check_logged_in(request)
    page_no = r['page_no']
    page_no = int(page_no)
    page_range_length = 10
    r['next'] = 'a'
    r['prev'] = 'a'
    r['next_group'] = 'a'
    r['prev_group'] = 'a'
    r['nmpp'] = 10  #number of message per page
    r['mppp'] = 10  #number of pagegroup per page

    page_group_no = math.ceil(float(page_no) / page_range_length)
    r['page_num'] = r['message_result'].last_page
    r['num_message'] = r['message_result'].results
    page_o = Paginator([x + 1 for x in range(r['page_num'])], 10)
    if page_o.num_pages < page_group_no:
        page_group_no = page_o.num_pages
    r['page_list'] = page_o.page(page_group_no).object_list

    if page_o.page(page_group_no).has_next():
        r['next_page_group'] = {
            'mark':
            r['next'],
            'no':
            page_o.page(
                page_o.page(page_group_no).next_page_number()).start_index()
        }
        r['last_page'] = {'mark': r['next_group'], 'no': r['page_num']}
    if page_o.page(page_group_no).has_previous():
        r['prev_page_group'] = {
            'mark':
            r['prev'],
            'no':
            page_o.page(
                page_o.page(page_group_no).previous_page_number()).end_index()
        }
        r['first_page'] = {'mark': r['prev_group'], 'no': 1}

    r['message_no_strlist'] = ''
    for message in r['message_list']:
        r['message_no_strlist'] = '|'.join(
            [r['message_no_strlist'], str(message.id)])

    r['page_length_list'] = [5, 10, 20]
    r['time_now'] = datetime.datetime.now()

    for i, message in enumerate(r['message_list']):
        if message.sent_time.strftime('%Y%m%d') == r['time_now'].strftime(
                '%Y%m%d'):
            r['message_list'][i].time = message.sent_time.strftime('%H:%M:%S')
        else:
            r['message_list'][i].time = message.sent_time.strftime('%Y/%m/%d')

    return r
Beispiel #47
0
def confirm_user(request, username, confirm_key):
    server = warara_middleware.get_server()

    try:
        server.member_manager.confirm(username, confirm_key)
        return HttpResponseRedirect("/main/")
    except InvalidOperation:
        return HttpResponse('<script>alert("Confirm failed! \\n\\n  -Wrong confirm key? \\n  -Already confirmed?\\n  -Wrong username?");</script>')
    except InternalError:
        return HttpResponse('<script>alert("Confirm failed! \\n\\nPlease contact ARA SYSOP.");</script>')
Beispiel #48
0
def account(request):
    session_key, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    account = server.member_manager.get_info(session_key)

    account.last_logout_time = timestamp2datetime(account.last_logout_time)
    account.logged_in = True
    rendered = render_to_string('account/myaccount_frame.html',
                                account.__dict__)
    return HttpResponse(rendered)
Beispiel #49
0
def list(request, board_name):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    r['mode'] = 'board'
    r['board_name'] = board_name
    get_article_list(request, r, 'list')
    fake_author(r['article_list'], False)

    rendered = render_to_string('board/list.html', r)
    return HttpResponse(rendered)
Beispiel #50
0
def list(request, board_name):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    r['mode'] = 'board'
    r['board_name'] = board_name
    get_article_list(request, r, 'list')
    fake_author(r['article_list'], False)

    rendered = render_to_string('mobile/board/list.html', r)
    return HttpResponse(rendered)
Beispiel #51
0
def list(request):
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    # board_name 이 없기 때문에 사용한 Hack.
    r['board_name'] = u'All Articles'
    r['mode'] = 'all'
    warara.mobile.board.views.get_article_list(request, r, 'total_list')
    fake_author(r['article_list'], False)

    rendered = render_to_string('mobile/board/list.html', r)
    return HttpResponse(rendered)
Beispiel #52
0
def hide_board(request):
    """
    request 에 주어진 hide_board_name 의 보드를 숨긴다.
    """
    server = warara_middleware.get_server()
    sess, r = warara.check_logged_in(request)
    board_list = server.board_manager.get_board_list()
    for board in board_list:
        if request.POST.get(board.board_name, None):
            msg = server.board_manager.hide_board(sess, board.board_name)
    return HttpResponseRedirect('/sysop/')
Beispiel #53
0
def _ajax_calling(response):
    '''
    ajax 사용 시 보낼 갱신된 보드 정보(html 태그 포함)를 완성해 돌려준다.
    '''
    server = warara_middleware.get_server()
    board_list = server.board_manager.get_board_list()
    for board in board_list:
        bbs_managers = server.board_manager.get_bbs_managers(board.board_name)
        managers_string = "".join(("*"+manager.username+" " for manager in bbs_managers))
        response += "\n" + board.board_name + "\t" + board.alias + "\t" + board.board_description + "\t" + ("hidden_board" if board.hide else "showing_board") + "\t" + str(board.to_read_level) + "\t" + str(board.to_write_level) + "\t" + managers_string + '\t '
    return response
Beispiel #54
0
def file_download(request, board_name, article_root_id, article_id, file_id):
    server = warara_middleware.get_server()
    file = {}
    file = server.file_manager.download_file(int(article_id), int(file_id))
    file_ob = open("%s/%s/%s" %
                   (FILE_DIR, file.file_path, file.saved_filename))

    response = HttpResponse(file_ob, mimetype="application/x-forcedownload")
    response['Content-Disposition'] = "attachment; filename=" + unicode(
        file.real_filename).encode('cp949', 'replace')
    return response
Beispiel #55
0
def save_selected_boards(request):
    sess, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    all_boards = server.board_manager.get_board_list()
    query = request.POST.get('boards', '')

    s_boards = query.split('/')
    s_boards_id = [x.id for x in all_boards if x.board_name in s_boards]
    server.member_manager.set_selected_boards(sess, s_boards_id)

    return HttpResponseRedirect("/mobile/board/list/")
Beispiel #56
0
def save_selected_boards(request):
    sess, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    all_boards = server.board_manager.get_board_list()
    query = request.POST.get('boards', '')

    s_boards = query.split('/')
    s_boards_id = [x.id for x in all_boards if x.board_name in s_boards]
    server.member_manager.set_selected_boards(sess, s_boards_id)

    return HttpResponseRedirect("/mobile/board/list/")
Beispiel #57
0
def logout(request):
    session_key, r = warara.check_logged_in(request)
    server = warara_middleware.get_server()
    account = server.login_manager.logout(session_key)
    del request.session['arara_session_key']
    del request.session['arara_username']
    del request.session['arara_userid']
    request.session.clear()

    response = HttpResponseRedirect('/mobile/')
    response.delete_cookie('arara_checksum')
    return response