def setup_db(): """Setup the configuration database.""" create_app_data_directory(config) app = create_app() print("pgAdmin 4 - Application Initialisation") print("======================================\n") with app.app_context(): # Run migration for the first time i.e. create database from config import SQLITE_PATH if not os.path.exists(SQLITE_PATH): db_upgrade(app) else: version = Version.query.filter_by(name='ConfigDB').first() schema_version = version.value # Run migration if current schema version is greater than the # schema version stored in version table if CURRENT_SCHEMA_VERSION >= schema_version: db_upgrade(app) # Update schema version to the latest if CURRENT_SCHEMA_VERSION > schema_version: version = Version.query.filter_by(name='ConfigDB').first() version.value = CURRENT_SCHEMA_VERSION db.session.commit() if os.name != 'nt': os.chmod(config.SQLITE_PATH, 0o600)
def dump_servers(args): """Dump the server groups and servers. Args: args (ArgParser): The parsed command line options """ # What user? if args.user is not None: dump_user = args.user else: dump_user = config.DESKTOP_USER # And the sqlite path if args.sqlite_path is not None: config.SQLITE_PATH = args.sqlite_path print('----------') print('Dumping servers with:') print('User:'******'SQLite pgAdmin config:', config.SQLITE_PATH) print('----------') app = create_app(config.APP_NAME + '-cli') with app.app_context(): dump_database_servers(args.dump_servers, args.servers, dump_user, True)
def runTest(self): config.APP_VERSION_INT = self.app_version config.INTERNAL_VERSION_PARAM = self.version_param config.INTERNAL_VERSION_EXTN = self.version_extn version_string = "?{0}={1}".format(config.INTERNAL_VERSION_PARAM, config.APP_VERSION_INT) app = create_app() with app.app_context(), app.test_request_context(): url = url_for(self.endpoint, filename=self.filename) if self.version_expected: self.assertTrue(url.endswith(version_string)) else: self.assertFalse(url.endswith(version_string))
def runTest(self): # assign config file parameters new values config.APP_VERSION_INT = self.app_version config.APP_VERSION_PARAM = self.version_param config.APP_VERSION_EXTN = self.version_extn version_string = "?{0}={1}".format(self.version_param, self.app_version) # create application app = create_app() with app.app_context(), app.test_request_context(): url = url_for(self.endpoint, filename=self.filename) if self.version_expected: self.assertTrue(url.endswith(version_string)) else: self.assertFalse(url.endswith(version_string))
def clear_servers(): """Clear groups and servers configurations. Args: args (ArgParser): The parsed command line options """ # What user? load_user = args.user if args.user is not None else config.DESKTOP_USER # And the sqlite path if args.sqlite_path is not None: config.SQLITE_PATH = args.sqlite_path app = create_app(config.APP_NAME + '-cli') with app.app_context(): clear_database_servers(load_user, True)
def clear_servers(): """Clear groups and servers configurations. Args: args (ArgParser): The parsed command line options """ # What user? load_user = args.user if args.user is not None else config.DESKTOP_USER # And the sqlite path if args.sqlite_path is not None: config.SQLITE_PATH = args.sqlite_path app = create_app(config.APP_NAME + '-cli') with app.app_context(): user = User.query.filter_by(email=load_user).first() if user is None: print(USER_NOT_FOUND % load_user) sys.exit(1) user_id = user.id # Remove all servers servers = Server.query.filter_by(user_id=user_id) for server in servers: db.session.delete(server) # Remove all groups groups = ServerGroup.query.filter_by(user_id=user_id) for group in groups: db.session.delete(group) servers = Server.query.filter_by(user_id=user_id) for server in servers: db.session.delete(server) try: db.session.commit() except Exception as e: print("Error clearing server configuration with error (%s)" % str(e))
def add_relationships(): app = create_app() with app.app_context(): email = env("PGADMIN_SETUP_EMAIL") if not email: raise RuntimeError("Expected $PGADMIN_SETUP_EMAIL environment variable.") user = User.query.filter_by(email=email).first() if user is None: raise RuntimeError( "The specified user {!r} could not be found.".format(email) ) rels = list(get_relationships()) discovered = [] for rel in rels: server = create_or_update_server(user, rel) discovered.append(server) prune_old_servers(user, discovered)
def load_servers(args): """Load server groups and servers. Args: args (ArgParser): The parsed command line options """ # What user? load_user = args.user if args.user is not None else config.DESKTOP_USER # And the sqlite path if args.sqlite_path is not None: config.SQLITE_PATH = args.sqlite_path print('----------') print('Loading servers with:') print('User:'******'SQLite pgAdmin config:', config.SQLITE_PATH) print('----------') app = create_app(config.APP_NAME + '-cli') with app.app_context(): load_database_servers(args.load_servers, None, load_user, True)
def setup_db(): app = create_app() with app.app_context(): if not os.path.exists(SQLITE_PATH): init_db(app) else: version = Version.query.filter_by(name="ConfigDB").first() if version is None: print("Error fetching database version. Removing database.") os.unlink(SQLITE_PATH) init_db(app) else: schema_version = version.value if SCHEMA_VERSION >= schema_version: print("Upgrading database schema.") db_upgrade(app) if SCHEMA_VERSION > schema_version: version = Version.query.filter_by(name="ConfigDB").first() version.value = SCHEMA_VERSION print("Saving database schema version.") commit("Error saving database schema version")
# as it turns out that putting it in the config files isn't a great idea from pgadmin.model import SCHEMA_VERSION # Delay the import test_utils as it needs updated config.SQLITE_PATH from regression.python_test_utils import test_utils from regression.python_test_utils.csrf_test_client import TestClient config.SETTINGS_SCHEMA_VERSION = SCHEMA_VERSION # Override some other defaults from logging import WARNING config.CONSOLE_LOG_LEVEL = WARNING # Create the app app = create_app() app.PGADMIN_KEY = '' app.config.update({'SESSION_COOKIE_DOMAIN': None}) driver = None app_starter = None handle_cleanup = None app.PGADMIN_RUNTIME = True if config.SERVER_MODE is True: app.PGADMIN_RUNTIME = False app.config['WTF_CSRF_ENABLED'] = True app.test_client_class = TestClient test_client = app.test_client() test_client.setApp(app) setattr(unittest.result.TestResult, "passed", [])
from pgadmin import create_app if __name__ == '__main__': # Configuration settings import config from pgadmin.model import SCHEMA_VERSION from pgadmin.setup import db_upgrade, create_app_data_directory config.SETTINGS_SCHEMA_VERSION = SCHEMA_VERSION if "PGADMIN_TESTING_MODE" in os. environ and \ os.environ["PGADMIN_TESTING_MODE"] == "1": config.SQLITE_PATH = config.TEST_SQLITE_PATH create_app_data_directory(config) app = create_app() print(u"pgAdmin 4 - Application Initialisation") print(u"======================================\n") with app.app_context(): # Run migration for the first time i.e. create database from config import SQLITE_PATH if not os.path.exists(SQLITE_PATH): db_upgrade(app) else: version = Version.query.filter_by(name='ConfigDB').first() schema_version = version.value # Run migration if current schema version is greater than the # schema version stored in version table
def dump_servers(args): """Dump the server groups and servers. Args: args (ArgParser): The parsed command line options """ # What user? if args.user is not None: dump_user = args.user else: dump_user = config.DESKTOP_USER # And the sqlite path if args.sqlite_path is not None: config.SQLITE_PATH = args.sqlite_path print('----------') print('Dumping servers with:') print('User:'******'SQLite pgAdmin config:', config.SQLITE_PATH) print('----------') app = create_app(config.APP_NAME + '-cli') with app.app_context(): user = User.query.filter_by(email=dump_user).first() if user is None: print("The specified user ID (%s) could not be found." % dump_user) sys.exit(1) user_id = user.id # Dict to collect the output object_dict = {} # Counters servers_dumped = 0 # Dump servers servers = Server.query.filter_by(user_id=user_id).all() server_dict = {} for server in servers: if args.servers is None or str(server.id) in args.servers: # Get the group name group_name = ServerGroup.query.filter_by( user_id=user_id, id=server.servergroup_id).first().name attr_dict = {} add_value(attr_dict, "Name", server.name) add_value(attr_dict, "Group", group_name) add_value(attr_dict, "Host", server.host) add_value(attr_dict, "HostAddr", server.hostaddr) add_value(attr_dict, "Port", server.port) add_value(attr_dict, "MaintenanceDB", server.maintenance_db) add_value(attr_dict, "Username", server.username) add_value(attr_dict, "Role", server.role) add_value(attr_dict, "SSLMode", server.ssl_mode) add_value(attr_dict, "Comment", server.comment) add_value(attr_dict, "Shared", server.shared) add_value(attr_dict, "DBRestriction", server.db_res) add_value(attr_dict, "PassFile", server.passfile) add_value(attr_dict, "SSLCert", server.sslcert) add_value(attr_dict, "SSLKey", server.sslkey) add_value(attr_dict, "SSLRootCert", server.sslrootcert) add_value(attr_dict, "SSLCrl", server.sslcrl) add_value(attr_dict, "SSLCompression", server.sslcompression) add_value(attr_dict, "BGColor", server.bgcolor) add_value(attr_dict, "FGColor", server.fgcolor) add_value(attr_dict, "Service", server.service) add_value(attr_dict, "Timeout", server.connect_timeout) add_value(attr_dict, "UseSSHTunnel", server.use_ssh_tunnel) add_value(attr_dict, "TunnelHost", server.tunnel_host) add_value(attr_dict, "TunnelPort", server.tunnel_port) add_value(attr_dict, "TunnelUsername", server.tunnel_username) add_value(attr_dict, "TunnelAuthentication", server.tunnel_authentication) servers_dumped = servers_dumped + 1 server_dict[servers_dumped] = attr_dict object_dict["Servers"] = server_dict try: f = open(args.dump_servers, "w") except Exception as e: print("Error opening output file %s: [%d] %s" % (args.dump_servers, e.errno, e.strerror)) sys.exit(1) try: f.write(json.dumps(object_dict, indent=4)) except Exception as e: print("Error writing output file %s: [%d] %s" % (args.dump_servers, e.errno, e.strerror)) sys.exit(1) f.close() print("Configuration for %s servers dumped to %s." % (servers_dumped, args.dump_servers))
def load_servers(args): """Load server groups and servers. Args: args (ArgParser): The parsed command line options """ # What user? load_user = args.user if args.user is not None else config.DESKTOP_USER # And the sqlite path if args.sqlite_path is not None: config.SQLITE_PATH = args.sqlite_path print('----------') print('Loading servers with:') print('User:'******'SQLite pgAdmin config:', config.SQLITE_PATH) print('----------') try: with open(args.load_servers) as f: data = json.load(f) except json.decoder.JSONDecodeError as e: print("Error parsing input file %s: %s" % (args.load_servers, e)) sys.exit(1) except Exception as e: print("Error reading input file %s: [%d] %s" % (args.load_servers, e.errno, e.strerror)) sys.exit(1) f.close() app = create_app(config.APP_NAME + '-cli') with app.app_context(): user = User.query.filter_by(email=load_user).first() if user is None: print("The specified user ID (%s) could not be found." % load_user) sys.exit(1) user_id = user.id # Counters groups_added = 0 servers_added = 0 # Get the server groups groups = ServerGroup.query.filter_by(user_id=user_id) def print_summary(): print("Added %d Server Group(s) and %d Server(s)." % (groups_added, servers_added)) err_msg = _validate_servers_data(data, user.has_role("Administrator")) if err_msg is not None: print(err_msg) print_summary() sys.exit(1) for server in data["Servers"]: obj = data["Servers"][server] # Get the group. Create if necessary group_id = next( (g.id for g in groups if g.name == obj["Group"]), -1) if group_id == -1: new_group = ServerGroup() new_group.name = obj["Group"] new_group.user_id = user_id db.session.add(new_group) try: db.session.commit() except Exception as e: print("Error creating server group '%s': %s" % (new_group.name, e)) print_summary() sys.exit(1) group_id = new_group.id groups_added = groups_added + 1 groups = ServerGroup.query.filter_by(user_id=user_id) # Create the server new_server = Server() new_server.name = obj["Name"] new_server.servergroup_id = group_id new_server.user_id = user_id new_server.ssl_mode = obj["SSLMode"] new_server.maintenance_db = obj["MaintenanceDB"] new_server.host = obj.get("Host", None) new_server.hostaddr = obj.get("HostAddr", None) new_server.port = obj.get("Port", None) new_server.username = obj.get("Username", None) new_server.role = obj.get("Role", None) new_server.ssl_mode = obj["SSLMode"] new_server.comment = obj.get("Comment", None) new_server.db_res = obj.get("DBRestriction", None) new_server.passfile = obj.get("PassFile", None) new_server.sslcert = obj.get("SSLCert", None) new_server.sslkey = obj.get("SSLKey", None) new_server.sslrootcert = obj.get("SSLRootCert", None) new_server.sslcrl = obj.get("SSLCrl", None) new_server.sslcompression = obj.get("SSLCompression", None) new_server.bgcolor = obj.get("BGColor", None) new_server.fgcolor = obj.get("FGColor", None) new_server.service = obj.get("Service", None) new_server.connect_timeout = obj.get("Timeout", None) new_server.use_ssh_tunnel = obj.get("UseSSHTunnel", None) new_server.tunnel_host = obj.get("TunnelHost", None) new_server.tunnel_port = obj.get("TunnelPort", None) new_server.tunnel_username = obj.get("TunnelUsername", None) new_server.tunnel_authentication = \ obj.get("TunnelAuthentication", None) db.session.add(new_server) try: db.session.commit() except Exception as e: print("Error creating server '%s': %s" % (new_server.name, e)) print_summary() sys.exit(1) servers_added = servers_added + 1 print_summary()
def load_servers(args): """Load server groups and servers. Args: args (ArgParser): The parsed command line options """ try: with open(args.load_servers) as f: data = json.load(f) except json.decoder.JSONDecodeError as e: print("Error parsing input file %s: %s" % (args.load_servers, e)) sys.exit(1) except Exception as e: print("Error reading input file %s: [%d] %s" % (args.load_servers, e.errno, e.strerror)) sys.exit(1) f.close() app = create_app() with app.app_context(): # What user? if args.user is not None: dump_user = args.user else: dump_user = config.DESKTOP_USER user = User.query.filter_by(email=dump_user).first() if user is None: print("The specified user ID (%s) could not be found." % dump_user) sys.exit(1) user_id = user.id # Counters groups_added = 0 servers_added = 0 # Get the server group groups = ServerGroup.query.all() def print_summary(): print("Added %d Server Group(s) and %d Server(s)." % (groups_added, servers_added)) # Loop through the servers... if "Servers" not in data: print("'Servers' attribute not found in file '%s'" % args.load_servers) print_summary() sys.exit(1) for server in data["Servers"]: obj = data["Servers"][server] def check_attrib(attrib): if attrib not in obj: print("'%s' attribute not found for server '%s'" % (attrib, server)) print_summary() sys.exit(1) check_attrib("Name") check_attrib("Group") check_attrib("Port") check_attrib("Username") check_attrib("SSLMode") check_attrib("MaintenanceDB") if "Host" not in obj and \ "HostAddr" not in obj and \ "Service" not in obj: print("'Host', 'HostAddr' or 'Service' attribute not found " "for server '%s'" % server) print_summary() sys.exit(1) # Get the group. Create if necessary group_id = -1 for g in groups: if g.name == obj["Group"]: group_id = g.id break if group_id == -1: new_group = ServerGroup() new_group.name = obj["Group"] new_group.user_id = user_id db.session.add(new_group) try: db.session.commit() except Exception as e: print("Error creating server group '%s': %s" % (new_group.name, e)) print_summary() sys.exit(1) group_id = new_group.id groups_added = groups_added + 1 groups = ServerGroup.query.all() # Create the server new_server = Server() new_server.name = obj["Name"] new_server.servergroup_id = group_id new_server.user_id = user_id new_server.host = obj["Host"] if "HostAddr" in obj: new_server.hostaddr = obj["HostAddr"] new_server.port = obj["Port"] new_server.maintenance_db = obj["MaintenanceDB"] new_server.username = obj["Username"] if "Role" in obj: new_server.role = obj["Role"] new_server.ssl_mode = obj["SSLMode"] if "Comment" in obj: new_server.comment = obj["Comment"] if "DBRestriction" in obj: new_server.db_res = obj["DBRestriction"] if "PassFile" in obj: new_server.passfile = obj["PassFile"] if "SSLCert" in obj: new_server.sslcert = obj["SSLCert"] if "SSLKey" in obj: new_server.sslkey = obj["SSLKey"] if "SSLRootCert" in obj: new_server.sslrootcert = obj["SSLRootCert"] if "SSLCrl" in obj: new_server.sslcrl = obj["SSLCrl"] if "SSLCompression" in obj: new_server.sslcompression = obj["SSLCompression"] if "BGColor" in obj: new_server.bgcolor = obj["BGColor"] if "FGColor" in obj: new_server.fgcolor = obj["FGColor"] if "Service" in obj: new_server.service = obj["Service"] if "Timeout" in obj: new_server.connect_timeout = obj["Timeout"] if "UseSSHTunnel" in obj: new_server.use_ssh_tunnel = obj["UseSSHTunnel"] if "TunnelHost" in obj: new_server.tunnel_host = obj["TunnelHost"] if "TunnelPort" in obj: new_server.tunnel_port = obj["TunnelPort"] if "TunnelUsername" in obj: new_server.tunnel_username = obj["TunnelUsername"] if "TunnelAuthentication" in obj: new_server.tunnel_authentication = obj["TunnelAuthentication"] db.session.add(new_server) try: db.session.commit() except Exception as e: print("Error creating server '%s': %s" % (new_server.name, e)) print_summary() sys.exit(1) servers_added = servers_added + 1 print_summary()
import os from pgadmin import create_app import config from pgadmin.utils.crypto import encrypt from pgadmin.model import db, User, Server app = create_app(config.APP_NAME) with app.app_context(): user = User.query.first() key = user.password i = 0 while True: i = i + 1 s = Server() sfx = str(i) if i > 1 else '' s.name = os.getenv('SETUP_SERVER' + sfx + '_NAME') s.host = os.getenv('SETUP_SERVER' + sfx + '_HOST') s.port = os.getenv('SETUP_SERVER' + sfx + '_PORT') s.username = os.getenv('SETUP_SERVER' + sfx + '_USER') if not s.name or not s.host or not s.port or not s.username: break pwd = os.getenv('SETUP_SERVER' + sfx + '_PASS') if pwd: s.password = encrypt(pwd, key) s.save_password = 1 s.user_id = user.id s.servergroup_id = 1 s.maintenance_db = 'postgres' s.ssl_mode = 'prefer' db.session.add(s)