-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDB.py
109 lines (93 loc) · 3.47 KB
/
DB.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from sqlalchemy import (
Date,
create_engine,
Column,
Integer,
UUID,
Boolean,
DateTime,
ForeignKey,
String,
func,
text,
)
from sqlalchemy.orm import declarative_base, relationship
from Globals import getenv
from sqlalchemy.orm import sessionmaker
import logging
import uuid
logging.basicConfig(
level=getenv("LOG_LEVEL"),
format=getenv("LOG_FORMAT"),
)
try:
DATABASE_TYPE = getenv("DATABASE_TYPE")
DATABASE_NAME = getenv("DATABASE_NAME")
if DATABASE_TYPE != "sqlite":
DATABASE_USER = getenv("DATABASE_USER")
DATABASE_PASSWORD = getenv("DATABASE_PASSWORD")
DATABASE_HOST = getenv("DATABASE_HOST")
DATABASE_PORT = getenv("DATABASE_PORT")
LOGIN_URI = f"{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}"
DATABASE_URI = f"postgresql://{LOGIN_URI}"
else:
DATABASE_URI = f"sqlite:///{DATABASE_NAME}.db"
engine = create_engine(DATABASE_URI)
Base = declarative_base()
except Exception as e:
logging.error(f"Error connecting to database: {e}")
engine = None
Base = None
class User(Base):
__tablename__ = "user"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
email = Column(String, unique=True)
first_name = Column(String, default="", nullable=True)
last_name = Column(String, default="", nullable=True)
company_name = Column(String, default="", nullable=True)
job_title = Column(String, default="", nullable=True)
admin = Column(Boolean, default=False, nullable=False)
mfa_token = Column(String, default="", nullable=True)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
is_active = Column(Boolean, default=True)
class UserOAuth(Base):
__tablename__ = "user_oauth"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id = Column(UUID(as_uuid=True), ForeignKey("user.id"))
user = relationship("User")
provider_id = Column(UUID(as_uuid=True), ForeignKey("oauth_provider.id"))
provider = relationship("OAuthProvider")
access_token = Column(String, default="", nullable=False)
refresh_token = Column(String, default="", nullable=False)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
class OAuthProvider(Base):
__tablename__ = "oauth_provider"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name = Column(String, default="", nullable=False)
class FailedLogins(Base):
__tablename__ = "failed_logins"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id = Column(UUID(as_uuid=True), ForeignKey("user.id"))
user = relationship("User")
ip_address = Column(String, default="", nullable=True)
created_at = Column(DateTime, server_default=func.now())
def get_session():
Session = sessionmaker(bind=engine, autoflush=False)
session = Session()
return session
if __name__ == "__main__":
import uvicorn
import time
print("Waiting 10 seconds for database(s) to initialize...")
time.sleep(10)
print("Connecting to database engine...")
Base.metadata.create_all(engine)
uvicorn.run(
"Server:app",
host="0.0.0.0",
port=12437,
log_level=getenv("LOG_LEVEL").lower(),
workers=int(getenv("UVICORN_WORKERS")),
)