예제 #1
0
def checkpass(username, input):
    userData = db.query('users', 'salt, hash',
                        'WHERE username = \'{uName}\''.format(uName=username))

    if len(userData) != 1:
        return False
    userData = userData[0]

    saltedpass = userData[0].encode('ascii') + (input.encode('ascii'))
    hashedpass = hashlib.sha256(saltedpass).hexdigest()
    if hashedpass == userData[1]:
        return True
    return False
예제 #2
0
def userAuth():
    data = json.loads(request.data)

    #check that user exists in database
    if len(
            db.query(
                'users', 'username', 'WHERE username = \'{uName}\''.format(
                    uName=data['userName']))) != 1:
        return {'error': "invalid-username"}, 401

    #if user exists, check that the password, when hashed, matches the stored
    #   user password hash. If so, send token
    if userhash.checkpass(data['userName'], data['password']):
        userToken = createToken(data['userName'])
        tokens[data['userName']] = userToken
        return {'token': userToken}
    else:
        return {'error': 'invalid-pass'}, 401
예제 #3
0
def createUser():
    #get JSON of request
    data = json.loads(request.data)

    #check if username free
    if len(
            db.query(
                'users', 'username', 'WHERE username = \'{uName}\''.format(
                    uName=data['userName']))) > 0:
        return {'error': 'name_claimed'}, 400

    #if username free, hash it and store the hash + salt
    salt, hash = userhash.hashpass(data['password'])
    db.insert('users', ("\'" + data['userName'] + "\'", "\'" + salt + "\'",
                        "\'" + hash + "\'"))

    #send back a new token
    userToken = createToken(data['userName'])
    tokens[data['userName']] = userToken
    return {'token': userToken}
예제 #4
0
def sendMsgsBulk():
    data = json.loads(request.data)

    #verify chat room exists
    if int(data['chatID']) not in chats:
        return {'error': 'invalid-chatID'}, 400

    #verify user token
    newToken = tokenAuth(data['userName'], data['token'])
    if newToken == False:
        return {'error': 'invalid-token'}, 401

    offset = data['offset']
    n = data['n']
    chatID = data['chatID']

    #get requested batch from db, and then convert matrix from db into JSON
    messages = db.toJSON(
        'msgs',
        db.query('msgs',
                 args='WHERE chatID = {c} ORDER BY msgID DESC LIMIT {o}, {n}'.
                 format(c=chatID, o=offset, n=n)), ('sentAt', 'chatID'))

    return {'newToken': newToken, 'msgs': messages}
예제 #5
0
def initChats():
    for chat in chats:
        N = int(
            db.query('msgs', 'COUNT(*)', 'WHERE chatID = ' + str(chat))[0][0])
        chats[chat]['N'] = N