diff --git a/web/pgadmin/__init__.py b/web/pgadmin/__init__.py index 86a02e6..b9750e8 100644 --- a/web/pgadmin/__init__.py +++ b/web/pgadmin/__init__.py @@ -385,9 +385,15 @@ def create_app(app_name=config.APP_NAME): svr_superuser = registry.get(section, 'Superuser') svr_port = registry.getint(section, 'Port') svr_discovery_id = section - svr_comment = gettext("Auto-detected %s installation with the data directory at %s" % ( - registry.get(section, 'Description'), - registry.get(section, 'DataDirectory'))) + description = registry.get(section, 'Description') + data_directory = registry.get(section, 'DataDirectory') + if hasattr(str, 'decode'): + description = description.decode('utf-8') + data_directory = data_directory.decode('utf-8') + svr_comment = gettext(u"Auto-detected %s installation with the data directory at %s" % ( + description, + data_directory + )) add_server(user_id, servergroup_id, svr_name, svr_superuser, svr_port, svr_discovery_id, svr_comment) except: diff --git a/web/pgadmin/about/__init__.py b/web/pgadmin/about/__init__.py index 3806346..dc6d893 100644 --- a/web/pgadmin/about/__init__.py +++ b/web/pgadmin/about/__init__.py @@ -23,6 +23,9 @@ import config class AboutModule(PgAdminModule): def get_own_menuitems(self): + appname = config.APP_NAME + if hasattr(str, 'decode'): + appname = appname.decode('utf-8') return { 'help_items': [ MenuItem(name='mnu_about', @@ -30,8 +33,10 @@ class AboutModule(PgAdminModule): module="pgAdmin.About", callback='about_show', icon='fa fa-info-circle', - label=gettext('About %(appname)s', - appname=config.APP_NAME)) + label=gettext(u'About %(appname)s', + appname=appname + ) + ) ] } diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index 3913b95..ad5607c 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -584,14 +584,15 @@ class ServerNode(PGChildNodeView): password=password, server_types=ServerType.types() ) - + if hasattr(str, 'decode'): + errmsg = errmsg.decode('utf-8') if not status: db.session.delete(server) db.session.commit() return make_json_response( status=401, success=0, - errormsg=gettext("Unable to connect to server:\n\n%s" % errmsg) + errormsg=gettext(u"Unable to connect to server:\n\n%s" % errmsg) ) else: if 'save_password' in data and data['save_password'] and have_password: diff --git a/web/pgadmin/misc/file_manager/__init__.py b/web/pgadmin/misc/file_manager/__init__.py index 8542cdf..4d32f39 100644 --- a/web/pgadmin/misc/file_manager/__init__.py +++ b/web/pgadmin/misc/file_manager/__init__.py @@ -505,7 +505,7 @@ class Filemanager(object): if not path_exists(orig_path): return { 'Code': 0, - 'Error': gettext(u"'{}' file does not exist.".format(path)) + 'Error': gettext(u"'{0}' file does not exist.".format(path)) } user_dir = path @@ -599,7 +599,7 @@ class Filemanager(object): # Do not allow user to access outside his storage dir in server mode. if not orig_path.startswith(dir): raise Exception( - gettext(u"Access denied ({})".format(path))) + gettext(u"Access denied ({0})".format(path))) return True @staticmethod @@ -690,7 +690,7 @@ class Filemanager(object): } if not path_exists(orig_path): - thefile['Error'] = gettext(u"'{}' file does not exist.".format( + thefile['Error'] = gettext(u"'{0}' file does not exist.".format( path)) thefile['Code'] = -1 return thefile diff --git a/web/pgadmin/utils/crypto.py b/web/pgadmin/utils/crypto.py index 0c40f90..5d8bb50 100644 --- a/web/pgadmin/utils/crypto.py +++ b/web/pgadmin/utils/crypto.py @@ -29,9 +29,13 @@ def encrypt(plaintext, key): iv = Random.new().read(AES.block_size) cipher = AES.new(pad(key), AES.MODE_CFB, iv) - excrypted = base64.b64encode(iv + cipher.encrypt(plaintext)) + # If user has entered non ascii password (Python2) + # we have to encode it first + if hasattr(str, 'decode'): + plaintext = plaintext.encode('utf-8') + encrypted = base64.b64encode(iv + cipher.encrypt(plaintext)) - return excrypted + return encrypted def decrypt(ciphertext, key): @@ -99,8 +103,15 @@ def pqencryptpassword(password, user): # Place salt at the end because it may be known by users trying to crack # the MD5 output. - - m.update(password.encode()) - m.update(user.encode()) + # Handling of non-ascii password (Python2) + if hasattr(str, 'decode'): + password = password.encode('utf-8') + user = user.encode('utf-8') + else: + password = password.encode() + user = user.encode() + + m.update(password) + m.update(user) return "md5" + m.hexdigest() diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py index 4cafeb2..3390cfe 100644 --- a/web/pgadmin/utils/driver/psycopg2/__init__.py +++ b/web/pgadmin/utils/driver/psycopg2/__init__.py @@ -260,10 +260,13 @@ class Connection(BaseConnection): try: password = decrypt(encpass, user.password) - + # Handling of non ascii password (Python2) + if hasattr(str, 'decode'): + password = password.decode('utf-8').encode('utf-8') # password is in bytes, for python3 we need it in string - if isinstance(password, bytes): + elif isinstance(password, bytes): password = password.decode() + except Exception as e: current_app.logger.exception(e) return False, \ @@ -306,12 +309,12 @@ class Connection(BaseConnection): msg = e.diag.message_detail else: msg = str(e) - current_app.logger.info(""" + current_app.logger.info(u""" Failed to connect to the database server(#{server_id}) for connection ({conn_id}) with error message as below: {msg}""".format( server_id=self.manager.sid, conn_id=conn_id, - msg=msg + msg=msg.decode('utf-8') if hasattr(str, 'decode') else msg ) )