diff --git a/requirements.txt b/requirements.txt index 08dc344db..605b335d3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,3 +37,4 @@ sshtunnel==0.* ldap3==2.* Flask-BabelEx==0.* gssapi==1.6.* +httpagentparser==1.9.* \ No newline at end of file diff --git a/runtime/package.json b/runtime/package.json index bdc024b18..82628732d 100644 --- a/runtime/package.json +++ b/runtime/package.json @@ -6,6 +6,7 @@ "author": "pgAdmin Development Team (https://www.pgadmin.org/)", "license": "PostgreSQL", "chromium-args": "--disable-popup-blocking", + "user-agent": "Nwjs:%nwver-%osinfo-%chromium_ver", "window": { "width": 440, "height": 170, diff --git a/web/pgadmin/about/__init__.py b/web/pgadmin/about/__init__.py index 94ffefe6e..d40de006a 100644 --- a/web/pgadmin/about/__init__.py +++ b/web/pgadmin/about/__init__.py @@ -10,13 +10,15 @@ """A blueprint module implementing the about box.""" import sys -from flask import Response, render_template, __version__, url_for +from flask import Response, render_template, __version__, url_for, request from flask_babelex import gettext from flask_security import current_user, login_required from pgadmin.utils import PgAdminModule from pgadmin.utils.menu import MenuItem from pgadmin.utils.constants import MIMETYPE_APP_JS import config +import httpagentparser +from pgadmin.model import User MODULE_NAME = 'about' @@ -59,23 +61,74 @@ blueprint = AboutModule(MODULE_NAME, __name__, static_url_path='') @login_required def index(): """Render the about box.""" - info = { - 'python_version': sys.version, - 'flask_version': __version__ - } + info = {} + # Get OS , NW.js, Browser details + browser, os_details, nwjs_version = detect_browser(request) + + if nwjs_version: + info['nwjs'] = nwjs_version + + info['browser_details'] = browser + info['os_details'] = os_details + info['config_db'] = config.SQLITE_PATH + info['log_file'] = config.LOG_FILE if config.SERVER_MODE: info['app_mode'] = gettext('Server') + admin = is_admin(current_user.email) + info['admin'] = admin else: info['app_mode'] = gettext('Desktop') info['current_user'] = current_user.email + settings = '' + for setting in dir(config): + if not setting.startswith('_') and setting.isupper() and \ + setting not in ['CSRF_SESSION_KEY', + 'SECRET_KEY', + 'SECURITY_PASSWORD_SALT', + 'SECURITY_PASSWORD_HASH', + 'ALLOWED_HOSTS']: + settings = settings + '{} = {}\n'.format(setting, + getattr(config, setting)) + + info['settings'] = settings + return render_template( MODULE_NAME + '/index.html', info=info, _=gettext ) +def is_admin(load_user): + user = User.query.filter_by(email=load_user).first() + return user.has_role("Administrator") + + +def detect_browser(request): + """This function returns the browser and os details""" + nwjs_version = None + agent = request.environ.get('HTTP_USER_AGENT') + + if 'Nwjs' in agent: + agent = agent.split('-') + nwjs_version = agent[0].split(':')[1] + browser = agent[2] + os_details = agent[1].split('; ')[1] + + else: + browser = httpagentparser.detect(agent) + os_details = browser['platform']['name'] + ' ' + browser['platform'][ + 'version'] + if not browser: + browser = agent.split('/')[0] + else: + browser = browser['browser']['name'] + ' ' + browser['browser'][ + 'version'] + + return browser, os_details, nwjs_version + + @blueprint.route("/about.js") @login_required def script(): diff --git a/web/pgadmin/about/static/js/about.js b/web/pgadmin/about/static/js/about.js index c6c73e6c2..a1e45bdba 100644 --- a/web/pgadmin/about/static/js/about.js +++ b/web/pgadmin/about/static/js/about.js @@ -62,7 +62,7 @@ define( function(data) { alertify.aboutDialog( gettext('About %s', pgAdmin.Browser.utils.app_name), data - ).resizeTo(pgAdmin.Browser.stdW.md, pgAdmin.Browser.stdH.md); + ).resizeTo(pgAdmin.Browser.stdW.md, 450); }); }, }; diff --git a/web/pgadmin/about/templates/about/index.html b/web/pgadmin/about/templates/about/index.html index 607e6c298..c7c260822 100644 --- a/web/pgadmin/about/templates/about/index.html +++ b/web/pgadmin/about/templates/about/index.html @@ -4,29 +4,41 @@
{{ config.APP_VERSION }}
-
{{ _('Copyright') }}
-
{{ config.APP_COPYRIGHT }}
+
{{ _('Application Mode') }}
+
{{ info.app_mode }}
-
{{ _('Python Version') }}
-
{{ info.python_version }}
+
{{ _('Current User') }}
+
{{ info.current_user }}
+ {% if info.nwjs %} +
+
{{ _('NW.js Version') }}
+
{{ info.nwjs }}
+
+ {% endif %}
-
{{ _('Flask Version') }}
-
{{ info.flask_version }}
+
{{ _('Browser Details') }}
+
{{ info.browser_details }}
-
{{ _('Application Mode') }}
-
{{ info.app_mode }}
+
{{ _('OS') }}
+
{{ info.os_details }}
-
{{ _('Current User') }}
-
{{ info.current_user }}
+
{{ _('Config DB') }}
+
{{ info.config_db }}
+
+
+
{{ _('Log file') }}
+
{{ info.log_file }}
+
+ {%if (info.app_mode == 'Desktop') or (info.app_mode == 'Server' and info.admin)%} +
+
{{ _('Server Configuration') }}
-
{{ config.APP_NAME }} {{ _('logo') }}
+
+ {% endif %}