1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00
royalnet/database.py

81 lines
2.9 KiB
Python
Raw Normal View History

from sqlalchemy import create_engine, Column, Integer, String, Boolean
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
2017-03-09 14:52:02 +00:00
import bcrypt
# Initialize the database
2017-03-10 09:11:06 +00:00
engine = create_engine("sqlite:///db.sqlite")
Base = declarative_base()
Session = sessionmaker(bind=engine)
2017-03-10 09:11:06 +00:00
class User(Base):
__tablename__ = "members"
id = Column(Integer, primary_key=True)
username = Column(String, unique=True, nullable=False)
password = Column(String, nullable=False)
royal = Column(Boolean, nullable=False)
2017-03-10 09:11:06 +00:00
telegram_id = Column(Integer, unique=True)
2017-03-09 14:52:02 +00:00
def __str__(self):
return f"{self.id} - {self.username}"
Base.metadata.create_all(engine)
2017-03-09 14:52:02 +00:00
2017-03-10 09:11:06 +00:00
def create_user(username, password, royal=False):
"""Create a new user and add it to the database."""
2017-03-09 14:52:02 +00:00
# Create a new session
session = Session()
# Hash the password with bcrypt
hashed_password = bcrypt.hashpw(password.encode("utf8"), bcrypt.gensalt())
2017-03-10 09:11:06 +00:00
# Create a new user
new_member = User(username=username, password=hashed_password, royal=royal)
2017-03-09 14:52:02 +00:00
# Add the newly created member to the session
session.add(new_member)
# Commit the changes
session.commit()
def login(username, password):
2017-03-10 09:11:06 +00:00
"""Try to login using the database password. The session is always returned, while the user object is returned if the login is successful."""
2017-03-09 14:52:02 +00:00
# Create a new session
session = Session()
# Find the matching user
2017-03-10 09:11:06 +00:00
users = session.query(User).filter(User.username == username).all()
2017-03-09 14:52:02 +00:00
# No user with a matching username found
if len(users) == 0:
2017-03-10 09:11:06 +00:00
return session, None
2017-03-09 14:52:02 +00:00
else:
db_user = users[0]
2017-03-10 09:11:06 +00:00
# Test the password and return the session and the user if successful
2017-03-09 14:52:02 +00:00
if bcrypt.hashpw(password.encode("utf8"), db_user.password) == db_user.password:
2017-03-10 09:11:06 +00:00
# TODO: Maybe there's a better way to do this?
return session, db_user
2017-03-09 14:52:02 +00:00
else:
2017-03-10 09:11:06 +00:00
return session, None
def init_royal_db():
create_user("steffo", "uno", True)
create_user("adry", "due", True)
create_user("cate", "tre", True)
create_user("protoh", "quattro", True)
create_user("infopz", "cinque", True)
create_user("kappa", "sei", True)
create_user("manu", "sette", True)
create_user("frank", "otto", True)
create_user("paltri", "nove", True)
create_user("mestakes", "dieci", True)
create_user("tauei", "undici", True)
create_user("sensei", "dodici", True)
create_user("gattopardo", "tredici", True)
create_user("dima", "quattordici", True)
create_user("spaggia", "quindici", True)
create_user("igor", "sedici", True)
create_user("nemesis", "diciassette", True)
create_user("comiso", "diciotto", True)
create_user("fulz", "diciannove", True)
create_user("dailir", "venti", True)
create_user("fedececco", "ventuno", True)
create_user("albertwerk", "ventidue", True)
create_user("voltaggio", "ventitre", True)
create_user("doc", "ventiquattro", True)