mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2024-12-23 07:34:35 -06:00
157 lines
5.7 KiB
Python
157 lines
5.7 KiB
Python
##########################################################################
|
|
#
|
|
# pgAdmin 4 - PostgreSQL Tools
|
|
#
|
|
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
|
# This software is released under the PostgreSQL Licence
|
|
#
|
|
##########################################################################
|
|
|
|
"""Initial database creation
|
|
|
|
Revision ID: fdc58d9bd449
|
|
Revises:
|
|
Create Date: 2017-03-13 11:15:16.401139
|
|
|
|
"""
|
|
import base64
|
|
import os
|
|
|
|
import config
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
from flask import current_app
|
|
from flask_security import Security, SQLAlchemyUserDatastore
|
|
from flask_security.utils import hash_password
|
|
from pgadmin.model import db, User, Role
|
|
from pgadmin.setup import user_info
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = 'fdc58d9bd449'
|
|
down_revision = None
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade():
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
email, password = user_info()
|
|
|
|
version_table = op.create_table(
|
|
'version', sa.Column('name', sa.String(length=32), nullable=False),
|
|
sa.Column('value', sa.Integer(), nullable=False),
|
|
sa.PrimaryKeyConstraint('name'))
|
|
|
|
user_table = op.create_table(
|
|
'user',
|
|
sa.Column('id', sa.Integer(), nullable=False, autoincrement=True),
|
|
sa.Column('email', sa.String(length=256), nullable=False),
|
|
sa.Column('password', sa.String(), nullable=True),
|
|
sa.Column('active', sa.Boolean(), nullable=False),
|
|
sa.Column('confirmed_at', sa.DateTime(), nullable=True),
|
|
sa.PrimaryKeyConstraint('id'))
|
|
|
|
with op.batch_alter_table("user") as batch_op:
|
|
batch_op.create_unique_constraint('user_unique_constraint', ['email'])
|
|
|
|
role_table = op.create_table(
|
|
'role',
|
|
sa.Column('id', sa.Integer(), nullable=False, autoincrement=True),
|
|
sa.Column('name', sa.String(length=128), nullable=False),
|
|
sa.Column('description', sa.String(length=256), nullable=False),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
sa.UniqueConstraint('name'))
|
|
|
|
op.create_table(
|
|
'setting', sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('setting', sa.String(length=256), nullable=False),
|
|
sa.Column('value', sa.String(length=1024), nullable=True),
|
|
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ondelete='CASCADE'),
|
|
sa.PrimaryKeyConstraint('user_id', 'setting'))
|
|
|
|
roles_users_table = op.create_table(
|
|
'roles_users', sa.Column('user_id', sa.Integer(), nullable=True),
|
|
sa.Column('role_id', sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(['role_id'], ['role.id'], ondelete='CASCADE'),
|
|
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ondelete='CASCADE'))
|
|
|
|
server_group_table = op.create_table(
|
|
'servergroup',
|
|
sa.Column('id', sa.Integer(), nullable=False, autoincrement=True),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(length=128), nullable=False),
|
|
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ondelete='CASCADE'),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
sa.UniqueConstraint('user_id', 'name'))
|
|
|
|
op.create_table(
|
|
'server',
|
|
sa.Column('id', sa.Integer(), nullable=False, autoincrement=True),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('servergroup_id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(length=128), nullable=False),
|
|
sa.Column('host', sa.String(length=128), nullable=False),
|
|
sa.Column('port', sa.Integer(), nullable=False),
|
|
sa.Column('maintenance_db', sa.String(length=64), nullable=False),
|
|
sa.Column('username', sa.String(length=64), nullable=False),
|
|
sa.Column('ssl_mode', sa.String(length=16), nullable=False),
|
|
sa.ForeignKeyConstraint(['servergroup_id'], ['servergroup.id'], ),
|
|
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ondelete='CASCADE'),
|
|
sa.PrimaryKeyConstraint('id'))
|
|
|
|
current_salt = getattr(
|
|
config, 'SECURITY_PASSWORD_SALT', base64.urlsafe_b64encode(
|
|
os.urandom(32)
|
|
).decode()
|
|
)
|
|
|
|
secret_key = getattr(
|
|
config, 'SECRET_KEY', base64.urlsafe_b64encode(
|
|
os.urandom(32)
|
|
).decode()
|
|
)
|
|
if current_app.extensions.get('security') is None:
|
|
current_app.config['SECURITY_PASSWORD_SALT'] = current_salt
|
|
current_app.config['SECRET_KEY'] = secret_key
|
|
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
|
|
Security(current_app.app_context().app, user_datastore,
|
|
register_blueprint=False)
|
|
else:
|
|
current_app.config['SECURITY_PASSWORD_SALT'] = current_salt
|
|
current_app.config['SECRET_KEY'] = secret_key
|
|
|
|
setattr(config, 'SECURITY_PASSWORD_SALT', current_salt)
|
|
setattr(config, 'SECRET_KEY', secret_key)
|
|
password = hash_password(password)
|
|
|
|
op.bulk_insert(user_table,
|
|
[{'email': email, 'password': password,
|
|
'active': 1, 'confirmed_at': None}])
|
|
|
|
op.bulk_insert(version_table,
|
|
[{'name': 'ConfigDB', 'value': 2}])
|
|
|
|
op.bulk_insert(role_table,
|
|
[{'name': 'Administrators',
|
|
'description': 'pgAdmin Administrators Role'}])
|
|
|
|
op.bulk_insert(roles_users_table,
|
|
[{'user_id': 1, 'role_id': 1}])
|
|
|
|
op.bulk_insert(server_group_table,
|
|
[{'user_id': 1, 'name': 'Servers'}])
|
|
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade():
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_table('server')
|
|
op.drop_table('servergroup')
|
|
op.drop_table('roles_users')
|
|
op.drop_table('setting')
|
|
op.drop_table('role')
|
|
op.drop_table('user')
|
|
op.drop_table('version')
|
|
# ### end Alembic commands ###
|