示例#1
0
def chat(contact_id):
    # TODO xss check
    user_id = session.get("user_id")
    if user_id is None:
        return redirect(url_for(".home"))

    sender = User.get(user_id)
    recipient = User.get(contact_id)
    if recipient is None:
        return "Recipient not found"

    UnreadMessageCount.reset_unread(recipient.id, sender.id)
    messages = Message.get_many_by_user_pair(sender.id, recipient.id)

    name_dict = {
        sender.id: sender.name,
        recipient.id: recipient.name,
    }
    return render_template(
        "chat.jinja2",
        sender=sender,
        recipient=recipient,
        messages=messages,
        name_dict=name_dict,
    )
示例#2
0
    def test_create(self):
        uid1 = User.create("jack", "password")
        assert uid1 is not None
        with pytest.raises(sqlalchemy.exc.IntegrityError):
            User.create("jack", "password")

        uid2 = User.create("tom", "password2")
        assert uid2 is not None
示例#3
0
    def test_retrieval(self):
        uid1 = User.create("jack", "password")
        user = User.get(uid1)
        user2 = User.get_by_name("jack")
        assert user.id == user2.id

        assert None is User.get(999)
        assert None is User.get_by_name("not-existed")
示例#4
0
def login():
    username = request.values.get("username")
    password = request.values.get("password")
    uid = User.login_challenge(username, password)
    if uid is None:
        session.pop("user_id", None)
        return jsonify({"error": 1002, "error_msg": "failed"})
    else:
        session["user_id"] = uid
        return jsonify({"error": 0})
示例#5
0
def disconnect():
    user_id = request.values.get("user_id")

    if "user_id" not in session:
        return jsonify({"error": 1003, "error_msg": "login first"})

    target_user = User.get(user_id)
    if target_user is None:
        return jsonify({"error": 1004, "error_msg": "user not found"})

    ContactRelation.disconnect(session["user_id"], target_user.id)
    return jsonify({"error": 0})
示例#6
0
def register():
    username = request.values.get("username")
    password = request.values.get("password")

    try:
        user_id = User.create(username, password)
    except sqlalchemy.exc.IntegrityError:
        return jsonify({
            "error": 1001,
            "error_msg": "duplicated",
        })
    except BaseException:
        return jsonify({
            "error": 1000,
            "error_msg": "unknown",
        })

    return jsonify({"error": 0, "user_id": user_id})
示例#7
0
def home():
    user_id = session.get("user_id")
    if user_id is None:
        return render_template("login.jinja2")

    user = User.get(user_id)
    if user is None:
        session.pop("user_id")
        return render_template("login.jinja2")

    contacts = user.get_contacts()
    unread_counts = {
        contact_id: UnreadMessageCount.get_unread(contact_id, user_id)
        for contact_id, _ in contacts
    }
    return render_template(
        "index.jinja2",
        user=user,
        contacts=contacts,
        unread_counts=unread_counts,
    )
示例#8
0
 def test_contacts(self):
     jack_id = User.create("jack", "password")
     rose_id = User.create("rose", "password")
     ContactRelation.connect(jack_id, rose_id)
     jack = User.get(jack_id)
     jack.get_contacts()
示例#9
0
 def test_login_challenge(self):
     uid = User.create("jack", "password")
     assert uid is not None
     assert uid == User.login_challenge("jack", "password")
     assert None is User.login_challenge("jack2", "password")
     assert None is User.login_challenge("jack2", "password2")