diff --git a/db/db.ddl b/db/db.ddl index b0808cd7762301d5a76e6b583a5ae94d6eb58f50..0800fb38b33163bc4755ad7b2c6ae3a91aacfb78 100644 --- a/db/db.ddl +++ b/db/db.ddl @@ -322,3 +322,24 @@ CREATE TABLE messages ( markdown text NOT NULL, html text NOT NULL ); + +-- Požadavky na registraci a změny vlastností účtu + +CREATE TYPE reg_req_type AS ENUM ( + 'register', + 'change', + 'reset' +); + +CREATE TABLE reg_requests ( + reg_id serial PRIMARY KEY, + type reg_req_type NOT NULL, + created_at timestamp with time zone NOT NULL, + expires_at timestamp with time zone NOT NULL, + used_at timestamp with time zone DEFAULT NULL, + email varchar(255) DEFAULT NULL, -- adresa, kterou potvrzujeme + captcha_token varchar(255) DEFAULT NULL, -- token pro fázi 1 registrace + email_token varchar(255) UNIQUE NOT NULL, -- token pro fázi 2 registrace + user_id int DEFAULT NULL REFERENCES users(user_id) ON DELETE CASCADE, + client varchar(255) NOT NULL -- kdo si registraci vyžádal +); diff --git a/db/upgrade-20210712.sql b/db/upgrade-20210712.sql index 737c4b6675d4fb8e418f7370b74f5f2ca05cd6ce..ec6ad79bdd902e0458be170e4f801182378b302f 100644 --- a/db/upgrade-20210712.sql +++ b/db/upgrade-20210712.sql @@ -14,3 +14,22 @@ ALTER TYPE part_state ADD VALUE 'active' AFTER 'invited'; ALTER TABLE participants ADD COLUMN registered_on timestamp with time zone DEFAULT NULL; UPDATE participations SET state='active' WHERE state IN ('registered', 'invited'); + +CREATE TYPE reg_req_type AS ENUM ( + 'register', + 'change', + 'reset' +); + +CREATE TABLE reg_requests ( + reg_id serial PRIMARY KEY, + type reg_req_type NOT NULL, + created_at timestamp with time zone NOT NULL, + expires_at timestamp with time zone NOT NULL, + used_at timestamp with time zone DEFAULT NULL, + email varchar(255) DEFAULT NULL, + captcha_token varchar(255) DEFAULT NULL, + email_token varchar(255) UNIQUE NOT NULL, + user_id int DEFAULT NULL REFERENCES users(user_id) ON DELETE CASCADE, + client varchar(255) NOT NULL +); diff --git a/mo/db.py b/mo/db.py index 7ef564605aa14b81a86e640e4ae2c1d1762c4dfe..6fbf140dac9cc0597f52cb246466f2e9450395fb 100644 --- a/mo/db.py +++ b/mo/db.py @@ -661,6 +661,29 @@ class Message(Base): created_by_user = relationship('User') +class RegReqType(MOEnum): + register = auto() + change = auto() + reset = auto() + + +class RegRequest(Base): + __tablename__ = 'reg_requests' + + reg_id = Column(Integer, primary_key=True, server_default=text("nextval('reg_requests_reg_id_seq'::regclass)")) + type = Column(Enum(RegReqType, name='reg_req_type'), nullable=False) + created_at = Column(DateTime(True), nullable=False) + expires_at = Column(DateTime(True), nullable=False) + used_at = Column(DateTime(True)) + captcha_token = Column(Text) + email = Column(Text) + email_token = Column(Text, nullable=False, unique=True) + user_id = Column(Integer, ForeignKey('users.user_id')) + client = Column(Text, nullable=False) + + user = relationship('User') + + _engine: Optional[Engine] = None _session: Optional[Session] = None flask_db: Any = None