Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #API to work with user login and password data base
- import hashlib
- import sqlite3
- DB_PATH = 'C:\\Users\\user\\Desktop\\users.sqlite'
- TABLE_NAME = 'users'
- ID = 'id'
- LOGIN = 'login'
- PASSWORD = 'password'
- VOTED = 'voted'
- ERR_PASSWORD_TOO_SHORT = 'Password is too short!'
- ERR_LOGIN_EXISTS = 'Login already exists!'
- MIN_PASS = 6
- MAX_PASS = 20
- TABLE_DICT = \
- {
- ID: 0,
- LOGIN: 1,
- PASSWORD: 2,
- VOTED: 3
- }
- CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS '\
- +TABLE_NAME+'(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, '\
- +LOGIN+' varchar, '\
- +PASSWORD+' varchar, '+VOTED+' INTEGER)'
- ADD_USER = "INSERT INTO "+TABLE_NAME+" ("+LOGIN+","+PASSWORD+","+VOTED+") VALUES ('%s','%s', 0)"
- MARK_AS_VOTED = "UPDATE "+TABLE_NAME+" SET "+VOTED+" = 1 WHERE "+LOGIN+" = '%s'"
- NULL_VOTES = "UPDATE "+TABLE_NAME+" SET "+VOTED+" = 0 WHERE "+ID+" = '%i'"
- def _checkPassLength_(password):
- length = len(password)
- return length >= MIN_PASS or length <= MAX_PASS
- def _checkLoginUniqueness_(c, login):
- # TODO: simplify the query
- c.execute("SELECT * FROM " + TABLE_NAME)
- for row in c:
- if (login == row[TABLE_DICT[LOGIN]]):
- return False
- return True
- def _str2hashstr_(string):
- tNumber = string
- hashObj = hashlib.sha256()
- byteArray = str.encode(string)
- hashObj.update(byteArray)
- return hashObj.hexdigest()
- def _initDB_():
- conn = sqlite3.connect(DB_PATH)
- c = conn.cursor()
- c.execute(CREATE_TABLE)
- return (conn, c)
- def _closeDB_(conn, c):
- conn.commit()
- c.close()
- conn.close()
- def createAccount(login, password):
- if not _checkPassLength_(password):
- print(ERR_PASSWORD_TOO_SHORT)
- return False
- conn, c = _initDB_()
- if not _checkLoginUniqueness_(c, login):
- print(ERR_LOGIN_EXISTS)
- return False
- hash = _str2hashstr_(password)
- c.execute(ADD_USER%(login,hash))
- _closeDB_(conn, c)
- return True
- def authentification(login, password):
- conn, c = _initDB_()
- # TODO: simplify the query
- c.execute("SELECT * FROM " + TABLE_NAME)
- for row in c:
- if login == row[TABLE_DICT[LOGIN]]:
- _closeDB_(conn, c)
- return _str2hashstr_(password) == row[TABLE_DICT[PASSWORD]]
- #print('Login not found!')
- _closeDB_(conn, c)
- def markAsVoted(login):
- ret = False
- conn, c = _initDB_()
- # TODO: simplify the query
- c.execute("SELECT * FROM " + TABLE_NAME)
- for row in c:
- if row[TABLE_DICT[LOGIN]] == login:
- c.execute(MARK_AS_VOTED%login)
- ret = True
- _closeDB_(conn, c)
- return ret
- def checkIfVoted(login):
- conn, c = _initDB_()
- # TODO: simplify the query
- c.execute("SELECT * FROM " + TABLE_NAME)
- for row in c:
- if row[TABLE_DICT[LOGIN]] == login:
- return bool(row[TABLE_DICT[VOTED]])
- _closeDB_(conn, c)
- def nullVotes():
- conn, c = _initDB_()
- c.execute("SELECT * FROM " + TABLE_NAME)
- for row in c:
- c.execute(NULL_VOTES%row[TABLE_DICT[ID]])
- _closeDB_(conn, c)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement