Exemple #1
0
def reset(stub=None):
    forget = get_forget_by_stub(stub=stub)
    if get_current_user():
        if forget:
            _delete_forget(forget)
            db.session.commit()
        return redirect(url_for('index'))

    if not forget:
        raise abort(404)

    if request.method == 'GET':
        if (datetime.now()  - forget.created).total_seconds() > config.FORGET_STUB_EXPIRE:
            _delete_forget(forget)
            db.session.commit()
            return render_template('account.reset.html', expired=1, \
                    error='stub expired')
        return render_template('account.reset.html', stub=stub)

    password = request.form.get('password', None)
    status = check_password(password)
    if status:
        return render_template('account.reset.html', stub=stub, \
                error=status[1])
    user = get_user(forget.uid)
    _change_password(user, password)
    backend.delete('account:%s' % forget.stub)
    _delete_forget(forget)
    db.session.commit()
    clear_user_cache(user)
    return render_template('account.reset.html', ok=1)
Exemple #2
0
def my_interest_list():
    page = request.args.get('p', '1')
    if not page.isdigit():
        raise abort(404)
    page = int(page)

    user = get_current_user()
    if not user:
        return redirect(url_for('event.index'))

    list_page = get_user_interest(user.id, page)

    #cache items total num
    total_events_num = get_user_interest_topic_count(user.id)
    if total_events_num != list_page.total:
        backend.delete('event:interest:list:%d:%d' % (user.id, page))
        list_page = get_user_interest(user.id, page)
    if not list_page:
        raise abort(404)

    events = (get_topic(c.topic_id) for c in list_page.items)
    list_page.items = events
    events = gen_eventlist(list_page, 'from_uid')

    return render_template('event.list.html', events = events, \
            list_page = list_page, url = url_for('event.my_interest_list'))
Exemple #3
0
 def post(self, tid):
     tid = request.form.get("tid")
     content = request.form.get("content")
     topic = get_topic(tid)
     sender, receiver = get_topic_users(g.current_user.id, topic.id)
     if not topic or not sender or not receiver:
         return redirect(url_for("topic.index"))
     make_reply(sender, receiver, topic, content)
     # clean cache
     clean_cache(g.current_user.id, receiver.uid, topic.id)
     backend.delete("topic:user_topic:%d:%d" % (g.current_user.id, topic.id))
     backend.delete("topic:user_topic:%d:%d" % (receiver.uid, topic.id))
     return redirect(url_for("topic.view", tid=tid))
Exemple #4
0
def view(mail_id):
    box = request.headers.get('Referer', '')
    box = urlparse(box)
    query = parse_qs(box.query)

    if url_for('mail.index') == box.path or \
            url_for('mail.inbox') == box.path:
        box = 'inbox'
    elif url_for('mail.outbox') == box.path:
        box = 'outbox'
    else:
        box = None

    if not box:
        return redirect(url_for('mail.index'))

    user = get_current_user()
    if not user:
        return redirect(url_for('account.login'))

    mail = get_mail(mail_id)
    #TODO ugly
    if not mail:
        raise abort(404)

    if not check_mail_access(user.id, mail):
        return redirect(url_for('mail.index'))

    if not mail.is_read and mail.to_uid == user.id:
        page = query.get('p', [])
        if not page:
            page = 1
        else:
            page = int(page[0])
        Mail.mark_as_read(mail)
        backend.delete('mail:unread:%d' % user.id)
        backend.delete('mail:inbox:%d:%d' % (user.id, page))

    mobj = Obj()
    mobj.id = mail_id
    mobj.delete = '%s/%s' %(box, str(mail_id))
    from_user = get_user(mail.from_uid)
    mobj.from_uid = from_user.name
    mobj.from_uid_url = from_user.domain or from_user.id
    mobj.title = mail.title
    mobj.content = mail.content

    if box == 'inbox':
        return render_template('mail.read.html', mail = mobj, reply=1)
    else:
        return render_template('mail.read.html', mail = mobj)
Exemple #5
0
 def get(self):
     page = request.args.get('p', '1')
     if not page.isdigit():
         raise abort(404)
     page = int(page)
     msg = request.args.get('msg', None)
     list_page = get_user_topics(g.current_user.id, page)
     if page >1:
         page_1 = get_user_topics(g.current_user.id, 1)
         if list_page.total != page_1 or list_page.last_time != page_1.last_time:
             backend.delete('topic:list:%d:%d' % (g.current_user.id, page))
             list_page = get_user_topics(g.current_user.id, page)
     return render_template('topic.index.html', msg=msg, \
             topics=format_topic_list(list_page.items), list_page=list_page)
Exemple #6
0
def gen_event(topic):
    eobj = Obj()
    eobj.id = topic.id
    from_user = get_user(topic.from_uid)
    eobj.from_uid = from_user.name
    eobj.from_uid_url = from_user.domain or from_user.id
    eobj.title = topic.title
    eobj.content = topic.content
    eobj.start_date = topic.start_date
    is_finished = topic.is_finished()
    if is_finished:
        backend.delete('event:view:%d' % eobj.id)
    eobj.finished = topic.finished
    return eobj
Exemple #7
0
def event_list():
    page = request.args.get('p', '1')
    if not page.isdigit():
        raise abort(404)

    list_page = get_event_page(page)

    #cache items total num
    total_events_num = get_topic_count()
    if total_events_num != list_page.total:
        backend.delete('event:list:%d' % page)
        list_page = get_event_page(page)

    events = gen_eventlist(list_page, 'from_uid')
    return render_template('event.list.html', events = events, \
            list_page = list_page)
Exemple #8
0
def write():
    user = get_current_user()
    if not user:
        return redirect(url_for('account.login'))

    if request.method == 'GET':
        to_uid = request.args.get('to')
        reply_mid = request.args.get('reply')
        title = ''
        content = ''
        if reply_mid:
            mail = get_mail(reply_mid)
            if user.id != mail.to_uid:
                return redirect(url_for('mail.index'))
            to_uid = mail.from_uid
            title = reply_mail_title(mail.title)
            content = '--------\n%s\n--------\n' % mail.content
        who = get_user(to_uid)
        if not to_uid or not who:
            return redirect(url_for('mail.index'))
        return render_template('mail.write.html', who=who, \
                title=title, content=content)

    to_uid = request.form.get('to_uid')
    title = request.form.get('title')
    content = request.form.get('content')
    who = get_user(to_uid)

    error = check_mail(who, title, content)
    if error is not None:
        return render_template('mail.write.html', who=who, \
                title=title, content=content, error=error)

    Mail.create(from_uid = user.id,
                to_uid = who.id,
                title = title,
                content = content)

    #clean cache
    backend.delete('mail:outbox:%d:1' % user.id)
    backend.delete('mail:outbox:count:%d' % user.id)

    backend.delete('mail:inbox:%d:1' % who.id)
    backend.delete('mail:inbox:count:%d' % who.id)
    backend.delete('mail:unread:%d' % who.id)

    return redirect(url_for('mail.index'))
Exemple #9
0
def outbox():
    user = get_current_user()
    page = request.args.get('p', '1')

    if not user:
        return redirect(url_for('account.login'))
    if not page.isdigit():
        raise abort(404)

    list_page = get_outbox_mail(user.id, page)

    #check modify
    total_mail_num = get_outbox_count(user.id)
    if total_mail_num != list_page.total:
        backend.delete('mail:outbox:%d:%d' % (user.id, int(page)))
        list_page = get_outbox_mail(user.id, page)

    mails = gen_maillist(list_page, 'to_uid', -1)

    return render_template('mail.outbox.html', mails = mails, \
            list_page = list_page)
Exemple #10
0
def write():
    user = get_current_user()
    if not user:
        return redirect(url_for('account.login'))

    if request.method == 'GET':
        return render_template('event.new.html')

    title = request.form.get('title')
    content = request.form.get('content')
    start_date = request.form.get('start_date')

    error = check_new_event(title, content, start_date)
    if error is not None:
        return render_template('event.new.html', \
                content = content, error=error, \
                title = title, start_date = start_date)

    Topic.create(from_uid = user.id,
                 title = title,
                 content = content,
                 start_date = start_date)

    #clean cache
    backend.delete('event:list:1')
    backend.delete('event:topic:count')
    backend.delete('event:topic:%d:count' % user.id)

    return redirect(url_for('event.index'))
Exemple #11
0
def reply(tid):
    user = get_current_user()
    if not user:
        return redirect(url_for(event.index))

    topic = get_topic(tid)
    if not topic or topic.finished:
        raise abort(404)

    content = request.form.get('content')
    visit_user_id = request.form.get('_visit_user')
    error = check_new_reply(content, visit_user_id)
    visit_user = get_user(visit_user_id)

    if not visit_user:
        error = u'查无此人'

    if error is not None:
        eobj = gen_event(topic)
        session['reply'] = (error, content)
        return redirect(url_for('event.view', tid=eobj.id))

    Reply.create(topic_id = topic.id,
                 content = content,
                 from_uid = visit_user.id)

    #clean cache
    backend.delete('event:%d:reply:count' % topic.id)
    mod = get_reply_count(topic.id) % PAGE_NUM
    last_page = get_reply_count(topic.id) / PAGE_NUM + int(bool(mod))
    backend.delete('event:%d:reply:%d' % (topic.id, last_page))
    if mod:
        backend.delete('event:%d:reply:%d' % (topic.id, last_page - 1))

    return redirect(url_for('event.view', tid=tid) + '?p=%d' % last_page)
Exemple #12
0
    def post(self, stub):
        forget = get_forget_by_stub(stub=stub)
        if g.current_user:
            if forget:
                forget.delete()
            return redirect(url_for('index'))

        if not forget:
            raise abort(404)

        password = request.form.get('password', None)
        status = check_password(password)
        if status:
            return render_template('account.reset.html', stub=stub, \
                    error=status[1])
        user = get_user(forget.uid)
        user.change_password(password)
        account_login(user)
        forget.delete()
        clear_user_cache(user)
        backend.delete('account:%s' % forget.stub)
        return render_template('account.reset.html', ok=1)
Exemple #13
0
 def get(self, tid):
     user_topic = get_user_topic(g.current_user.id, tid=tid)
     if user_topic:
         delete_topic(user_topic)
         backend.delete('topic:meta:%d' % g.current_user.id)
         backend.delete('topic:list:%d:1' % g.current_user.id)
         backend.delete('topic:user_topic:%d:%d' % (g.current_user.id, tid))
     return redirect(url_for('topic.index'))
Exemple #14
0
def _mark_status(method, tid, cobj):
    if method == 'select' and cobj.is_interest():
        Choice.select(cobj)
    elif method == 'unselect' and cobj.is_select():
        Choice.unselect(cobj)
    else:
        raise abort(404)
    backend.delete('event:select:%d' % tid)
    backend.delete('event:interest:%d' % tid)
    backend.delete('event:%d:interest:%d' % (cobj.from_uid, tid))
Exemple #15
0
 def get(self, tid):
     page = request.args.get('p', '1')
     topic = get_topic(tid)
     if not topic or not page.isdigit():
         raise abort(404)
     page = int(page)
     if mark_read(g.current_user.id, tid):
         backend.delete('topic:user_topic:%d:%d' % (g.current_user.id, tid))
         backend.delete('topic:notify:%d' % g.current_user.id)
         backend.delete('topic:list:%d:1' % g.current_user.id)
     list_page = get_user_replies(tid, page)
     if page > 1 and list_page.total != get_user_replies(tid, 1):
         backend.delete('topic:replies:%d:%d' % (tid, page))
         list_page = get_user_replies(tid, page)
     #TODO check reply count!!!
     return render_template('topic.view.html', \
             replies=format_reply_list(list_page.items), \
             topic=topic, list_page=list_page)
Exemple #16
0
def _user_control_interest(interest, topic, user, is_interest):
    if topic.finished:
        return False
    if interest == 'want' and user and not is_interest:
        Choice.create_interest(topic.id, user.id)
    elif interest == 'cancel' and user and is_interest:
        is_interest.cancel()
    else:
        return False
    backend.delete('event:topic:interest:%d:count' % user.id)
    backend.delete('event:%d:interest:%d' % (user.id, topic.id))
    backend.delete('event:interest:%d' % topic.id)
    return True
Exemple #17
0
def delete(box, mail_id):
    user = get_current_user()
    if not user:
        return redirect(url_for('account.login'))

    mail = get_mail(mail_id)
    if not mail or box not in ['inbox', 'outbox'] or \
            not check_mail_access(user.id, mail):
        return redirect(url_for('mail.index'))

    if box == 'inbox':
        Mail.delete_inbox(mail)
        backend.delete('mail:inbox:%d:1' % user.id)
        backend.delete('mail:inbox:count:%d' % user.id)
    elif box == 'outbox':
        Mail.delete_outbox(mail)
        backend.delete('mail:outbox:%d:1' % user.id)
        backend.delete('mail:outbox:count:%d' % user.id)

    return redirect(url_for('mail.index'))
Exemple #18
0
def _flush_comment(id):
    backend.delete(_ANTONIDAS_COMMENT_KEY % id)
Exemple #19
0
def _flush_user_comment(type, user_id, target_id):
    backend.delete(_ANTONIDAS_USER_C_KEY % (type, user_id, target_id))
Exemple #20
0
def _flush_food(id):
    backend.delete(_FOOD_KEY % id)
Exemple #21
0
def clean_cache(uid, to_uid, tid):
    backend.delete('topic:topic:%d' % tid)
    backend.delete('topic:replies:%d:1' % tid)
    backend.delete('topic:list:%d:1' % uid)
    backend.delete('topic:list:%d:1' % to_uid)
    backend.delete('topic:notify:%d' % to_uid)
    backend.delete('topic:meta:%d' % uid)
    backend.delete('topic:meta:%d' % to_uid)
    cross_cache.delete('open:account:unread:{0}'.format(to_uid))
Exemple #22
0
 def delete(self):
     backend.delete(_JOB_FAV_KEY % (self.uid, self.aid))
     db.session.delete(self)
     db.session.commit()
     _flush_favorite(self.uid, self.aid)
Exemple #23
0
def _flush_dislike_num(target, kind):
    backend.delete(_DISLIKE_NUM_TARGET % (target, kind))
Exemple #24
0
def _flush_restaurant(id):
    backend.delete(_RESTAURANT_KEY % id)
Exemple #25
0
def _flush_article_content(aid):
    backend.delete(_JOB_ARTICLE_C_KEY % aid)
Exemple #26
0
def _flush_mapping(app):
    backend.delete(_ANTONIDAS_MAPPING_KEY % app)
Exemple #27
0
def _flush_favorite_page(uid):
    backend.delete(_JOB_FAV_ARTICLE % uid)
Exemple #28
0
def _flush_topic(id):
    backend.delete(_TOPIC_KEY % id)
Exemple #29
0
def _flush_article_page(fid):
    backend.delete(_JOB_SHOW_ARTICLES)
    backend.delete(_JOB_NONE_INTERN_ARTICLES)
    backend.delete(_JOB_FEED_ARTICLES % fid)
    # TODO 这样写真的很奇怪...但是这货的is_published属性是在数据库直接set的...
    # 刚刚create的时候都没得, 删除的时候也不一定有, 所以都flush掉
    # 这样很挫, 应该想个什么策略...
    backend.delete(_JOB_ALL_ARTICLES % (fid, True))
    backend.delete(_JOB_ALL_ARTICLES % (fid, False))
    backend.delete(_JOB_FEED_COUNT % fid)
Exemple #30
0
def _flush_dislike_num(target, kind):
    backend.delete(_DISLIKE_NUM_TARGET % (target, kind))
Exemple #31
0
def _flush_app_comment(type, target_id):
    backend.delete(_ANTONIDAS_APP_C_KEY % (type, target_id))
Exemple #32
0
def _flush_favorite(uid, aid):
    backend.delete(_JOB_FAV_KEY % (uid, aid))
Exemple #33
0
def _flush_topic(id):
    backend.delete(_TOPIC_KEY % id)
Exemple #34
0
def _flush_food(id):
    backend.delete(_FOOD_KEY % id)