Files
audit-web/app/authenticator/models.py
T
2026-08-26 14:11:37 +07:00

542 lines
22 KiB
Python

from sqlalchemy import Column, BigInteger, Integer, String, DateTime, Text, Boolean, Float, Index, UniqueConstraint
from .database import Base
import datetime
class Role(Base):
__tablename__ = "role"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(100), nullable=False, unique=True)
description = Column(String(255))
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships
# relationships are intentionally omitted; handle joins in SQL queries as needed
class Permission(Base):
__tablename__ = "permission"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False)
path = Column(String(255), nullable=False)
method = Column(String(20), nullable=False)
description = Column(String(255))
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class Unit(Base):
__tablename__ = "units"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False)
description = Column(Text)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
__table_args__ = (Index('ix_units_name', 'name'),)
class User(Base):
__tablename__ = "users"
id = Column(BigInteger, primary_key=True, autoincrement=True)
email = Column(String(255), nullable=False, unique=True)
fullname = Column(String(255), nullable=False)
unit_id = Column(BigInteger, nullable=True)
role_id = Column(BigInteger, nullable=True)
status = Column(Integer, default=1)
#status 1 is created, 2 is active, 3 is disabled
created_at = Column(DateTime, default=datetime.datetime.utcnow)
updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)
hashed_password = Column(String(255), nullable=True)
# relationships intentionally omitted
__table_args__ = (Index('ix_users_email', 'email'),)
class Category(Base):
__tablename__ = "category"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False, unique=True)
# relationships intentionally omitted
class Post(Base):
__tablename__ = "posts"
id = Column(BigInteger, primary_key=True, autoincrement=True)
content = Column(Text, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
title = Column(String(255), nullable=False)
created_by = Column(BigInteger)
category_id = Column(BigInteger)
status = Column(Boolean, default=True)
thumbnail = Column(String(255), nullable=True)
# relationships intentionally omitted
class Month(Base):
__tablename__ = "month"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(50), nullable=False)
from_date = Column(DateTime, nullable=False)
end_date = Column(DateTime, nullable=False)
# relationships intentionally omitted
class NAC(Base):
__tablename__ = "nac"
id = Column(BigInteger, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
unit_id = Column(BigInteger, nullable=False)
total = Column(BigInteger, default=0)
installed = Column(BigInteger, default=0)
ignored = Column(BigInteger, default=0)
rate = Column(Float, default=0)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class SmartIR(Base):
__tablename__ = "smartir"
id = Column(BigInteger, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
unit_id = Column(BigInteger, nullable=False)
total = Column(BigInteger, default=0)
installed = Column(BigInteger, default=0)
new_install = Column(BigInteger, default=0)
ignored = Column(BigInteger, default=0)
rate = Column(Float, default=0)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class Compliance(Base):
__tablename__ = "compliance"
id = Column(BigInteger, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
unit_id = Column(BigInteger, nullable=False)
windows_key = Column(BigInteger, default=0)
office = Column(BigInteger, default=0)
ms17010 = Column(BigInteger, default=0)
firewall = Column(BigInteger, default=0)
uac = Column(BigInteger, default=0)
winrar = Column(BigInteger, default=0)
antivirus = Column(BigInteger, default=0)
update_win = Column(BigInteger, default=0)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class LogSource(Base):
__tablename__ = "logsource"
id = Column(BigInteger, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
unit_id = Column(BigInteger, nullable=False)
log_id = Column(BigInteger)
name = Column(String(255), nullable=False)
description = Column(Text)
is_enabled = Column(Boolean, default=True)
source_type_id = Column(BigInteger)
status = Column(Integer) # lưu mã 1=OK, 2=ERROR, 3=DISABLE, 4=NOT AVAILABLE
message = Column(String(255))
other = Column(String(255))
file_id = Column(BigInteger, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class LogSourceComment(Base):
__tablename__ = "logsource_comment"
id = Column(BigInteger, primary_key=True, autoincrement=True)
logsource_id = Column(BigInteger, nullable=False)
user_id = Column(BigInteger, nullable=False)
comment = Column(Text, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class SourceType(Base):
__tablename__ = "source_type"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False)
type = Column(String(100))
# relationships intentionally omitted
class Ticket(Base):
__tablename__ = "ticket"
id = Column(BigInteger, primary_key=True, autoincrement=True)
open_count = Column(BigInteger, default=0)
in_process = Column(BigInteger, default=0)
completed = Column(BigInteger, default=0)
unit_id = Column(BigInteger, nullable=False)
month_id = Column(BigInteger, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class RootAccess(Base):
__tablename__ = "root_access"
id = Column(BigInteger, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
unit_id = Column(BigInteger, nullable=False)
number = Column(BigInteger, default=0)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class AttackStatics(Base):
__tablename__ = "attack_statics"
id = Column(BigInteger, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
siem_fintech = Column(BigInteger, default=0)
siem_media = Column(BigInteger, default=0)
ticket = Column(BigInteger, default=0)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class SmartIRDetail(Base):
__tablename__ = "smartir_detail"
id = Column(BigInteger, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
unit_id = Column(BigInteger, nullable=True)
vnpt_ma_nhan_vien = Column(String(255), nullable=True)
name = Column(String(255), nullable=True)
email = Column(String(255), nullable=True)
phong_ban = Column(String(255), nullable=True)
ip = Column(String(255), nullable=True)
pc_name = Column(String(255), nullable=True)
mac = Column(String(255), nullable=True)
agent_version = Column(String(255), nullable=True)
last_online = Column(String(255), nullable=True)
status = Column(Integer, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class NACDetail(Base):
__tablename__ = "nac_detail"
id = Column(BigInteger, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
unit_id = Column(BigInteger, nullable=True)
name = Column(String(255), nullable=True)
email = Column(String(255), nullable=True)
status = Column(Integer, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class ComplianceDetail(Base):
__tablename__ = "compliance_detail"
id = Column(BigInteger, primary_key=True, autoincrement=True)
unit_id = Column(BigInteger, nullable=True)
month_id = Column(BigInteger, nullable=False)
vnpt_ma_nhan_vien = Column(String(255), nullable=True)
name = Column(String(255), nullable=True)
email = Column(String(255), nullable=True)
phong_ban = Column(String(255), nullable=True)
windows_key = Column(BigInteger, nullable=True)
office = Column(BigInteger, nullable=True)
ms17010 = Column(BigInteger, nullable=True)
firewall = Column(BigInteger, nullable=True)
uac = Column(BigInteger, nullable=True)
winrar = Column(BigInteger, nullable=True)
antivirus = Column(BigInteger, nullable=True)
update_win = Column(BigInteger, nullable=True)
status = Column(Integer, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class ComplianceSmartIR(Base):
__tablename__ = "compliance_smartir"
id = Column(Integer, primary_key=True, autoincrement=True)
month_id = Column(BigInteger, nullable=False)
unit_id = Column(BigInteger, nullable=True)
vnpt_ma_nhan_vien = Column(String(20), nullable=False)
name = Column(String(255), nullable=False)
email = Column(String(255), nullable=False)
phong_ban = Column(String(255), nullable=True)
ten_may_tinh = Column(String(255), nullable=True)
mac = Column(String(50), nullable=True)
active_windows = Column(Integer, nullable=True)
bat_windows_firewall = Column(Integer, nullable=True)
bat_uac = Column(Integer, nullable=True)
cai_winrar_ban_moi = Column(Integer, nullable=True)
bat_av_fullscan = Column(Integer, nullable=True)
update_windows = Column(Integer, nullable=True)
status = Column(Integer, nullable=False, default=0)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
updated_at = Column(DateTime, default=datetime.datetime.utcnow)
class MailHistory(Base):
__tablename__ = "mail_history"
id = Column(BigInteger, primary_key=True, autoincrement=True)
post_id = Column(BigInteger)
subject = Column(String(255), nullable=True)
role_id = Column(BigInteger, nullable=True)
content = Column(Text)
status = Column(Integer, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# relationships intentionally omitted
class FileUpload(Base):
__tablename__ = "file_upload"
id = Column(BigInteger, primary_key=True, autoincrement=True)
path = Column(String(255), nullable=False)
table_name = Column(String(255), nullable=False)
table_id = Column(BigInteger, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
__table_args__ = (Index('ix_fileupload_table', 'table_name', 'table_id'),)
class ImportHistory(Base):
__tablename__ = "import_history"
id = Column(BigInteger, primary_key=True, autoincrement=True)
type = Column(String(255), nullable=False)
file_path = Column(String(255), nullable=False)
month_id = Column(BigInteger, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
__table_args__ = (Index('ix_import_history_type_month', 'type', 'month_id'),)
class MMFintech(Base):
__tablename__ = "mm_fintech"
id = Column(BigInteger, primary_key=True, autoincrement=True, index=True)
month_id = Column(BigInteger, nullable=False, index=True)
unit_id = Column(BigInteger, nullable=True, index=True)
file_path = Column(String(255), nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class ConvertHardening(Base):
__tablename__ = "convert_hardening"
id = Column(BigInteger, primary_key=True, autoincrement=True, index=True)
filename = Column(String(255), nullable=False, index=True)
user_id = Column(BigInteger, nullable=False, index=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class SystemGroup(Base):
__tablename__ = "system_group"
id = Column(BigInteger, primary_key=True, index=True, autoincrement=True)
name = Column(String(255), nullable=False, index=True)
description = Column(String(1000), nullable=True)
class System(Base):
__tablename__ = "system"
id = Column(BigInteger, primary_key=True, index=True, autoincrement=True)
name = Column(String(255), nullable=False, index=True)
url_ip = Column(String(255), nullable=True, index=True)
unit_id = Column(BigInteger, nullable=True, index=True)
system_group_id = Column(BigInteger, nullable=True, index=True)
description = Column(String(1000), nullable=True)
status = Column(Integer, nullable=True, index=True)
class ManageSystem(Base):
__tablename__ = "manage_system"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False, unique=True)
level = Column(Integer, nullable=False)
url_ip = Column(String(255), nullable=True)
unit_id = Column(BigInteger, nullable=True)
parent_id = Column(BigInteger, nullable=True)
type = Column(Integer, nullable=True)
private = Column(Boolean, default=False)
priority_level = Column(Integer, nullable=True)
status = Column(Boolean, default=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)
__table_args__ = (
Index('ix_manage_system_name', 'name'),
Index('ix_manage_system_level_parent', 'level', 'parent_id'),
Index('ix_manage_system_unit', 'unit_id'),
)
class PentestService(Base):
__tablename__ = "pentest_service"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(Text, nullable=True)
type = Column(Integer, nullable=False) # 1: Đánh giá ATTT, 2: Công việc phối hợp, 3: Phối hợp xử lý, 4: Khác
code = Column(String(50), nullable=False, unique=True)
file_path = Column(String(255), nullable=True)
description = Column(Text, nullable=True)
due_date = Column(DateTime, nullable=True)
unit_id = Column(BigInteger, nullable=True)
status = Column(Integer, default=0) # 0: nháp, 1: tạo mới, 2: tiếp nhận, 3: đã xử lý, 4: đóng, 5: hủy
user_id = Column(BigInteger, nullable=True)
target_id = Column(BigInteger, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class PentestServiceComment(Base):
__tablename__ = "pentest_service_comment"
id = Column(BigInteger, primary_key=True, autoincrement=True)
pentest_service_id = Column(BigInteger, nullable=False)
content = Column(Text, nullable=False)
user_id = Column(BigInteger, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class PentestServiceHistory(Base):
__tablename__ = "pentest_service_history"
id = Column(BigInteger, primary_key=True, autoincrement=True)
pentest_service_id = Column(BigInteger, nullable=False)
old_status = Column(Integer, nullable=True)
new_status = Column(Integer, nullable=False)
user_id = Column(BigInteger, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class PentestServiceAssign(Base):
__tablename__ = "pentest_service_assign"
id = Column(BigInteger, primary_key=True, autoincrement=True)
user_id = Column(BigInteger, nullable=True)
email = Column(String(255), nullable=True)
pentest_service_id = Column(BigInteger, nullable=False)
class RevokedToken(Base):
__tablename__ = "revoked_token"
id = Column(BigInteger, primary_key=True, autoincrement=True)
jti = Column(String(64), nullable=False, unique=True, index=True)
user_id = Column(BigInteger, nullable=True)
revoked_at = Column(DateTime, default=datetime.datetime.utcnow, nullable=False)
expires_at = Column(DateTime, nullable=True)
class EmailRole(Base):
__tablename__ = "email_role"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False)
description = Column(String(1000), nullable=True)
class EmailUser(Base):
__tablename__ = "email_user"
id = Column(BigInteger, primary_key=True, autoincrement=True)
email = Column(String(255), nullable=False)
name = Column(String(255), nullable=True)
role_id = Column(BigInteger, nullable=False)
type = Column(Integer, nullable=False)
__table_args__ = (Index('ix_email_user_role', 'role_id'),)
class Document(Base):
__tablename__ = "documents"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False)
number_doc = Column(String(255), nullable=False)
sign_date = Column(DateTime, nullable=True)
level = Column(Integer, nullable=False)
validate_date = Column(DateTime, nullable=True)
file_path = Column(String(255), nullable=True)
class SecurityIndex(Base):
__tablename__ = "security_index"
id = Column(BigInteger, primary_key=True, autoincrement=True, index=True)
soc = Column(Integer, default=0)
pentest = Column(Integer, default=0)
access_policy = Column(Integer, default=0)
two_fa_policy = Column(Integer, default=0) # Cannot start with digit in Python, mapped to 2fa_policy if needed
config_network = Column(Integer, default=0)
config_server = Column(Integer, default=0)
patch_security = Column(Integer, default=0)
month_id = Column(BigInteger, nullable=False, index=True)
unit_id = Column(BigInteger, nullable=False, index=True)
description = Column(Text, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class SocTarget(Base):
__tablename__ = "soc_target"
id = Column(BigInteger, primary_key=True, autoincrement=True)
unit_id = Column(BigInteger, nullable=False)
priority = Column(Integer, nullable=False) # 1=critical → 5=low
name = Column(String(255), nullable=False)
code = Column(String(100), unique=True)
status = Column(Integer, nullable=False, default=0) # 0:Open, 1:In Progress, 2:Resolved, 3:Closed
deadline = Column(DateTime)
description = Column(Text, nullable=False)
system_id = Column(BigInteger, nullable=True)
system_type = Column(Integer, nullable=True)
source_ip = Column(Text, nullable=True)
destination_ip = Column(Text, nullable=True)
soc_target_type_id = Column(BigInteger, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)
created_by = Column(BigInteger, nullable=True)
class SocTargetType(Base):
__tablename__ = "soc_target_type"
id = Column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False)
class TicketRelated(Base):
__tablename__ = "ticket_related"
id = Column(BigInteger, primary_key=True, autoincrement=True)
soc_target_id = Column(BigInteger, nullable=False)
related_soc_target_id = Column(BigInteger, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class SocTargetAssign(Base):
__tablename__ = "soc_target_assign"
id = Column(BigInteger, primary_key=True, autoincrement=True)
target_id = Column(BigInteger, nullable=False)
user_id = Column(BigInteger, nullable=True)
email = Column(String(255), nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class SocTargetHistory(Base):
__tablename__ = "soc_target_history"
id = Column(BigInteger, primary_key=True, autoincrement=True)
target_id = Column(BigInteger, nullable=False)
field_name = Column(String(100), nullable=False)
old_value = Column(Text)
new_value = Column(Text)
changed_by = Column(BigInteger, nullable=True)
changed_at = Column(DateTime, default=datetime.datetime.utcnow)
class SocTargetComment(Base):
__tablename__ = "soc_target_comment"
id = Column(BigInteger, primary_key=True, autoincrement=True)
target_id = Column(BigInteger, nullable=False)
user_id = Column(BigInteger, nullable=True)
email = Column(String(255), nullable=True)
content = Column(Text, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)
class SocTargetAttachment(Base):
__tablename__ = "soc_target_attachment"
id = Column(BigInteger, primary_key=True, autoincrement=True)
target_id = Column(BigInteger, nullable=False)
file_name = Column(String(255), nullable=False)
file_path = Column(String(500), nullable=False)
file_size = Column(BigInteger, nullable=True)
file_type = Column(String(100), nullable=True)
uploaded_by = Column(BigInteger, nullable=True)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
class PostComment(Base):
__tablename__ = "post_comment"
id = Column(BigInteger, primary_key=True, autoincrement=True)
post_id = Column(BigInteger, nullable=False)
user_id = Column(BigInteger, nullable=False)
content = Column(Text, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)