codekingpro/portable-devtools
114k
1# ##########################################################################2# #3# # pgAdmin 4 - PostgreSQL Tools4# #5# # Copyright (C) 2013 - 2024, The pgAdmin Development Team6# # This software is released under the PostgreSQL Licence7# #8# ##########################################################################9 10import urllib311import ipaddress12from flask_security import current_user13from pgadmin.misc.bgprocess.processes import IProcessDesc14from pgadmin.model import db, Server15from flask_babel import gettext16from pgadmin.utils import get_server17 18 19def get_my_ip():20 """ Return the public IP of this host """21 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)22 http = urllib3.PoolManager(cert_reqs='CERT_NONE')23 try:24 external_ip = http.request('GET', 'https://ifconfig.me/ip').data25 except Exception:26 try:27 external_ip = http.request('GET', 'https://ident.me').data28 except Exception:29 external_ip = '127.0.0.1'30 31 if isinstance(external_ip, bytes):32 external_ip = external_ip.decode('utf-8')33 34 ip = ipaddress.ip_address(external_ip)35 if isinstance(ip, ipaddress.IPv4Address):36 return '{}/{}'.format(external_ip, 32)37 elif isinstance(ip, ipaddress.IPv6Address):38 return '{}/{}'.format(external_ip, 128)39 40 return '{}/{}'.format(external_ip, 32)41 42 43def _create_server(data):44 """Create Server"""45 server = Server(46 user_id=current_user.id,47 servergroup_id=data.get('gid'),48 name=data.get('name'),49 maintenance_db=data.get('db'),50 username=data.get('username'),51 cloud_status=data.get('cloud_status'),52 connection_params={'sslmode': 'prefer', 'connect_timeout': 30}53 )54 55 db.session.add(server)56 db.session.commit()57 58 return server.id59 60 61class CloudProcessDesc(IProcessDesc):62 """Cloud Server Process Description."""63 def __init__(self, _sid, _cmd, _provider, _instance_name):64 self.sid = _sid65 self.cmd = _cmd66 self.instance_name = _instance_name67 self.provider = 'Amazon RDS'68 69 if _provider == 'aws':70 self.provider = 'Amazon RDS'71 elif _provider == 'azure':72 self.provider = 'Azure Database'73 elif _provider == 'google':74 self.provider = 'Google Cloud SQL'75 else:76 self.provider = 'EDB BigAnimal'77 78 @property79 def message(self):80 return gettext("Deployment on {0} is started for instance {1}.".format(81 self.provider, self.instance_name))82 83 def details(self, cmd, args):84 server = getattr(get_server(self.sid), 'name', "Not available")85 86 return {87 "message": self.message,88 "cmd": self.cmd,89 "server": server,90 "object": self.instance_name,91 "type": self.provider,92 }93 94 @property95 def type_desc(self):96 return gettext("Cloud Deployment")97 