Advertisement
Guest User

Users Data Base

a guest
Feb 5th, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.13 KB | None | 0 0
  1. #API to work with user login and password data base
  2. import hashlib
  3. import sqlite3
  4.  
  5. DB_PATH = 'C:\\Users\\user\\Desktop\\users.sqlite'
  6. TABLE_NAME = 'users'
  7. ID = 'id'
  8. LOGIN = 'login'
  9. PASSWORD = 'password'
  10. VOTED = 'voted'
  11. ERR_PASSWORD_TOO_SHORT = 'Password is too short!'
  12. ERR_LOGIN_EXISTS = 'Login already exists!'
  13. MIN_PASS = 6
  14. MAX_PASS = 20
  15. TABLE_DICT = \
  16.     {
  17.         ID: 0,
  18.         LOGIN: 1,
  19.         PASSWORD: 2,
  20.         VOTED: 3
  21.     }
  22. CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS '\
  23.                +TABLE_NAME+'(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, '\
  24.                +LOGIN+' varchar, '\
  25.                +PASSWORD+' varchar, '+VOTED+' INTEGER)'
  26. ADD_USER = "INSERT INTO "+TABLE_NAME+" ("+LOGIN+","+PASSWORD+","+VOTED+") VALUES ('%s','%s', 0)"
  27. MARK_AS_VOTED = "UPDATE "+TABLE_NAME+" SET "+VOTED+" = 1 WHERE "+LOGIN+" = '%s'"
  28. NULL_VOTES = "UPDATE "+TABLE_NAME+" SET "+VOTED+" = 0 WHERE "+ID+" = '%i'"
  29.  
  30. def _checkPassLength_(password):
  31.     length = len(password)
  32.     return length >= MIN_PASS or length <= MAX_PASS
  33.  
  34. def _checkLoginUniqueness_(c, login):
  35.     # TODO: simplify the query
  36.     c.execute("SELECT * FROM " + TABLE_NAME)
  37.     for row in c:
  38.         if (login == row[TABLE_DICT[LOGIN]]):
  39.             return False
  40.     return True
  41.  
  42. def _str2hashstr_(string):
  43.     tNumber = string
  44.     hashObj = hashlib.sha256()
  45.     byteArray = str.encode(string)
  46.     hashObj.update(byteArray)
  47.     return hashObj.hexdigest()
  48.  
  49. def _initDB_():
  50.     conn = sqlite3.connect(DB_PATH)
  51.     c = conn.cursor()
  52.     c.execute(CREATE_TABLE)
  53.     return (conn, c)
  54.  
  55. def _closeDB_(conn, c):
  56.     conn.commit()
  57.     c.close()
  58.     conn.close()
  59.  
  60. def createAccount(login, password):
  61.     if not _checkPassLength_(password):
  62.         print(ERR_PASSWORD_TOO_SHORT)
  63.         return False
  64.     conn, c = _initDB_()
  65.     if not _checkLoginUniqueness_(c, login):
  66.         print(ERR_LOGIN_EXISTS)
  67.         return False
  68.     hash = _str2hashstr_(password)
  69.     c.execute(ADD_USER%(login,hash))
  70.     _closeDB_(conn, c)
  71.     return True
  72.  
  73. def authentification(login, password):
  74.     conn, c = _initDB_()
  75.     # TODO: simplify the query
  76.     c.execute("SELECT * FROM " + TABLE_NAME)
  77.     for row in c:
  78.         if login == row[TABLE_DICT[LOGIN]]:
  79.             _closeDB_(conn, c)
  80.             return _str2hashstr_(password) == row[TABLE_DICT[PASSWORD]]
  81.     #print('Login not found!')
  82.     _closeDB_(conn, c)
  83.  
  84. def markAsVoted(login):
  85.     ret = False
  86.     conn, c = _initDB_()
  87.     # TODO: simplify the query
  88.     c.execute("SELECT * FROM " + TABLE_NAME)
  89.     for row in c:
  90.         if row[TABLE_DICT[LOGIN]] == login:
  91.             c.execute(MARK_AS_VOTED%login)
  92.             ret = True
  93.     _closeDB_(conn, c)
  94.     return ret
  95.  
  96. def checkIfVoted(login):
  97.     conn, c = _initDB_()
  98.     # TODO: simplify the query
  99.     c.execute("SELECT * FROM " + TABLE_NAME)
  100.     for row in c:
  101.         if row[TABLE_DICT[LOGIN]] == login:
  102.             return bool(row[TABLE_DICT[VOTED]])
  103.     _closeDB_(conn, c)
  104.  
  105. def nullVotes():
  106.     conn, c = _initDB_()
  107.     c.execute("SELECT * FROM " + TABLE_NAME)
  108.     for row in c:
  109.         c.execute(NULL_VOTES%row[TABLE_DICT[ID]])
  110.     _closeDB_(conn, c)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement