Compare commits

..
114 Commits
Author SHA1 Message Date
Akshay Joshi 901e3ede39 Increase the value of --max-old-space-size to fix the Treser Plugin issue. 2022-03-14 09:56:15 +05:30
Akshay Joshi e89f205aa6 Update version for release. 2022-03-11 18:22:53 +05:30
Akshay Joshi dccd4f0bba Ensure that upload paths are children of the storage directory. Fixes #7233 2022-03-11 18:20:16 +05:30
Khushboo Vashi 99c6b171e4 Fixed the default Public IP range in AWS deployment. 2022-03-11 14:33:30 +05:30
Akshay Joshi 0f5d4cd7b7 Fixed an issue where pgAdmin 4 took ~75 seconds to display the 'Starting pgAdmin' text on the splash screen. Fixes #7230 2022-03-10 19:02:11 +05:30
Akshay Joshi e256f734df Fixed a schema diff issue where difference SQL isn't generated when foreign key values for a table differ. Fixes #7220 2022-03-10 14:41:21 +05:30
Akshay Joshi 9ed2506062 Fixed a schema diff issue where string separator '_$PGADMIN$_' is visible for identical user mappings. Fixes #7228 2022-03-10 14:40:38 +05:30
Akshay Joshi adf4634459 Added '--max-old-space-size' to fix any memory consumption issues while bundling the package. 2022-03-07 17:28:04 +05:30
Akshay Joshi 2dbd09530e Update version for release. 2022-03-07 15:40:46 +05:30
Akshay Joshi d8ecbcf293 Update Dependencies. 2022-03-07 15:39:03 +05:30
Yogesh Mahajan 3ad0862c59 Fixed feature test failure. 2022-03-07 15:36:10 +05:30
Nikhil Mohite 1b7dce124b Fixes an issue where the connect server/database menu was not updated correctly. Fixes #7186 2022-03-07 15:28:28 +05:30
Akshay Joshi 24c0816042 Fixed an issue where the parent partition table was not displayed during autocomplete. Fixes #7105 2022-03-07 14:06:40 +05:30
Domenico Sgarbossa 9d6098ddf2 Update Italian translation. 2022-03-07 10:59:21 +05:30
Libor M 4d6b019949 Update Czech translation. 2022-03-07 10:57:36 +05:30
Akshay Joshi cee65fbf9a Update message catalog. 2022-03-04 19:09:38 +05:30
Aditya Toshniwal f9707a8bf5 Allow users to scroll and enter input when there is a validation error. Fixes #7172 2022-03-04 17:25:36 +05:30
Akshay Joshi 1af431dcc2 Fixed a schema diff issue in which user mappings were not compared correctly. Fixes #6956 2022-03-04 17:21:30 +05:30
Akshay Joshi 4033bf3748 Fixed typo in User Management 2022-03-04 11:40:28 +05:30
Yogesh Mahajan 0f5a97fa6e AWS cloud deployment issues fixed:
1) A console error was logged for db version 9.6.1 due to an update to boto3
 2) Unmask Access Key Field.
 3) Update the supported database version list to include Postgres 10 and above.

refs #7177
2022-03-04 11:13:06 +05:30
Aparna Patil 8eeb12b600 Include the package priority in Debian/Ubuntu packages 2022-03-03 12:22:52 +00:00
Khushboo Vashi 69069e9af3 The following issues related to cloud deployment have been resolved:
- Masking the credentials input fields
- The loading symbol doesn't work while reloading the options in the select control
- Reduce the wizard opening timeout
- urllib library upgrade impacts host IP fetch

refs #7177
2022-03-02 19:04:15 +05:30
Dave Page 83660ec9ed Update EPAS server icon. 2022-03-02 13:30:59 +00:00
Akshay Joshi 6b9ae466c2 Fixed audit issues 2022-03-02 12:13:59 +05:30
Aditya Toshniwal 5ce3c4a5c8 Ensure that Flask-Security-Too is using the latest version. Fixes #7202 2022-03-02 10:56:02 +05:30
Dave Page f8df935404 Disable RPATH checking, as it will fail with some of the paths in the Python virtualenv, in particular Pillow.libs. 2022-03-01 13:55:00 +00:00
Khushboo Vashi ffc1c6c3b7 Fixed following issues related to cloud deployment:
1) The Mumbai region issue has been resolved
2) Display name of regions has been modified appropriately
3) The password field has been validated the same way as AWS
4) Added support for a list of IP addresses in the public IP address range field.
2022-02-28 18:19:18 +05:30
Akshay Joshi dd4849070a Upgraded Pillow module to the latest version if Python version is greater than 3.6 2022-02-23 17:59:37 +05:30
Aditya Toshniwal 44b2f49839 Enhances the modal provider to make it more reusable. 2022-02-23 14:27:48 +05:30
Akshay Joshi 0cd67b15cb Update the release date in the release notes. Fixes #7191 2022-02-19 10:29:02 +05:30
Khushboo Vashi 448ede53c6 Fixed following issues related to cloud deployment:
1) No options are shown in the instance type.
  2) No options for the last 2 types.
  3) Unable to change Storage config - size and iops
  4) Unable to create an instance when pgAdmin is installed using the installer in Desktop mode
  5) Can not create cloud instance with the temporary credentials.
  6) Mapped region display name (hardcoded) with region code.
2022-02-18 14:37:05 +05:30
Akshay Joshi cbd29cf45b Change the hostname validation to check only for leading and trailing spaces.
refs #7181
2022-02-18 11:39:11 +05:30
Chethana Kumar 3414de9ab2 Updated splash screen 2022-02-17 12:36:44 +00:00
Akshay Joshi 30dc805cf6 Fix audit issue 2022-02-16 18:10:55 +05:30
Yogesh Mahajan ce8e6b47c1 Fixed feature tests. 2022-02-16 18:03:42 +05:30
Charlet, Christoph aca97d9f57 Fixed an issue where pgadmin cannot connect to LDAP when STARTTLS is required before bind. Fixes #6991 2022-02-16 18:01:39 +05:30
Yogesh Mahajan b539637426 Fixed an issue where a warning is flashed every time for an email address when
authentication sources are internal and ldap. Fixes #6999
2022-02-16 13:34:24 +05:30
Akshay Joshi b1221d5517 Ensure that the user should be able to add new server with unix socket connection. Fixes #7181 2022-02-16 13:20:40 +05:30
Akshay Joshi 5a8c916bc0 Added comments column for the functions collection node. Fixes #7152 2022-02-16 12:22:52 +05:30
Akshay Joshi 677221cd9c Rename the menu 'Disconnect Database' to 'Disconnect from database'. Fixes #7180 2022-02-15 18:34:31 +05:30
Akshay Joshi d2efee5943 Use Robocopy only to copy web directories, and XCOPY for all other operations. 2022-02-15 16:11:22 +05:30
Akshay Joshi 0010935707 Ensure Robocopy exit codes are handled properly. 2022-02-15 12:56:59 +05:30
Akshay Joshi 6fb4df67a9 Remove __pycache__ to fix 'venv/bin/__pycache__: not a regular file' error. 2022-02-14 18:23:52 +05:30
Khushboo Vashi 0fa4609220 1) Fixed API test cases for Utilities.
2) Try to fix Jenkins build for __pycache__.
2022-02-14 17:26:27 +05:30
Akshay Joshi 1cdbb9a643 Fixed an issue where the User Management dialog is not opening. Fixes #7173 2022-02-14 15:17:48 +05:30
Akshay Joshi e90b3dad01 Fix an insufficient memory issue by replacing the XCOPY with the ROBOCOPY command for Windows. 2022-02-14 13:23:25 +05:30
Khushboo Vashi e61a1045f5 Added capability to deploy PostgreSQL servers on Amazon RDS. Fixes #7177 2022-02-14 12:13:48 +05:30
Akshay Joshi b89e306df0 Updated supported platform in README 2022-02-11 17:34:24 +05:30
Akshay Joshi f002b11106 Uncomment the incorrectly commented code in the previous commit. 2022-02-11 10:56:13 +05:30
Aditya Toshniwal bc4e8a3c82 Implemented utilities in React to make porting easier for pgAdmin tools. 2022-02-11 10:36:24 +05:30
Yogesh Mahajan 76a4dee451 Fixed the schema diff issue where tables have different column positions and a column has a default value. Fixes #7124 2022-02-11 10:21:43 +05:30
Aditya Toshniwal f62c20d0b9 Fixed one wcDocker issue. 2022-02-07 21:18:12 +05:30
Akshay Joshi ccd28101d6 Update version for release. 2022-02-07 16:19:33 +05:30
Akshay Joshi 4ca60e07b2 Update Dependencies. 2022-02-07 16:17:20 +05:30
Akshay Joshi 6d1926bb63 Rename the menu 'Disconnect Server' to 'Disconnect from server'. Fixes #7163 2022-02-07 16:12:30 +05:30
Yogesh Mahajan 1141aeb524 1) Fixes the incorrect title shown for the error message in restore/backup.
2) Doc updates for webserver authentication.
3) Cleanup task for API tests.
2022-02-07 11:51:27 +05:30
Identifier Anonymous 9fec812366 Update Japanese translation. 2022-02-07 11:35:17 +05:30
Fred Escallier a811841735 Update French translation. 2022-02-07 11:33:28 +05:30
Domenico Sgarbossa a2307c230a Update Italian translation. 2022-02-07 11:31:33 +05:30
Libor M 7b5fd9bfea Update Czech translation. 2022-02-07 11:28:33 +05:30
Khushboo Vashi a7ee4e5909 Acquire a lock regardless of the authentication sources while getting the database server connection. 2022-02-07 11:25:08 +05:30
Akshay Joshi 9cc2985d13 Update message catalog. 2022-02-04 16:35:33 +05:30
Akshay Joshi 19beb62f81 Added support to open SQL help, Dialog help, and online help in an external web browser. Fixes #7139 2022-02-04 16:05:30 +05:30
Aditya Toshniwal 28be10a1b5 Ensure that layout should not be reset if a query tool is opened and pgAdmin is restaretd. Fixes #7154 2022-02-04 15:20:55 +05:30
Rahul Shirsat 444a364a8d Fixed an issue when uploading a CSV throwing an error in the Desktop mode. Fixes #7150 2022-02-04 15:10:13 +05:30
Nikhil Mohite 4a195e7ef6 Fixed value error in the restore dialog. Fixes #7151 2022-02-03 17:44:54 +05:30
Akshay Joshi ad64491a98 Fixed debugger issue introduce due to SonarQube fixes. 2022-02-03 11:32:15 +05:30
Pradip Parkale 7a2716bf77 Fixed issues related to porting of dependent, dependencies, and statistics panel.
refs #7016
2022-02-03 11:13:39 +05:30
Nikhil Mohite 64c419e6f8 Fixed Jasmine test cases.
refs #7110
2022-02-02 17:55:14 +05:30
Dave Page 23aac4f580 Update default Python version 2022-02-02 10:59:39 +00:00
Nikhil Mohite b4b658c59d Ensure that cursor should be focused on the first options of the Utility dialogs. Fixes #7110 2022-02-02 14:48:35 +05:30
Rahul Shirsat 4d727015fd Fixed an issue where the query tool is displaying an incorrect label. Fixes #7136 2022-02-02 14:45:31 +05:30
Akshay Joshi 78f0c9c4a5 Ensure that owner should be ignored while comparing extensions. Fixes #7145 2022-02-02 11:25:07 +05:30
Akshay Joshi c2d9219add Added JSON as a supported type in Storage Manager. 2022-02-01 16:18:32 +05:30
Akshay Joshi fddcbbff67 Fixed event trigger comparing issue in Schema Diff tool. Fixes #7146 2022-02-01 14:14:18 +05:30
Akshay Joshi aa5b1d50b9 Fixed issues introduce by SonarQube fixes. 2022-02-01 14:11:18 +05:30
Akshay Joshi 21359c6c74 Reverting patch for the upgrade of Pillow module. 2022-01-31 20:35:56 +05:30
Yogesh Mahajan c38bf04f51 Correct documentation for 'Add named restore point'. Fixes #7086 2022-01-31 20:24:15 +05:30
Akshay Joshi 5f9ea22941 Fixed audit issues. 2022-01-31 20:20:53 +05:30
Murtuza Zabuawala 00e13b0811 Upgrade the Pillow module to the latest. 2022-01-31 20:10:00 +05:30
Akshay Joshi b9e533e31a Fixed code smell 'Update this function so that its implementation is not identical' reported by SonarQube. 2022-01-31 20:04:04 +05:30
Aditya Toshniwal bc0b25d995 1) Fixed an issue where a warning message was shown after database creation/modification. Fixes #7142.
2) Added error boundary to schema view which will improve the exception stack trace details.
3) Fixed Jasmine test cases.
2022-01-31 13:41:22 +05:30
Akshay Joshi 1a89c1f85f Fixed code smell 'Update this function so that its implementation is not identical' reported by SonarQube. 2022-01-28 17:20:34 +05:30
Nikhil Mohite 37d82d457c Fixed an issue where the F2 Function key removes browser panel contents. Fixes #7126 2022-01-28 10:55:23 +05:30
Khushboo Vashi 8f7b30075e Fixed SonarQube issues. 2022-01-27 17:22:19 +05:30
Yogesh Mahajan 47479e5e5c Fixed issue of duplicate values shown in Column>Columns to Import/Export dropdown when a value(values) is unselected.
refs #7017
2022-01-27 17:20:05 +05:30
Yogesh Mahajan 8fd3ddc4ae Make the size blank for all the directories in the file select dialog. Fixes #7109 2022-01-27 12:11:09 +05:30
Rahul Shirsat deab1bfaba Ensure that JSON files should be downloaded properly from the storage manager. Fixes #7118 2022-01-25 20:17:50 +05:30
Nikhil Mohite 04729f63b8 Fixed an issue where restore generates incorrect options for the schema. Fixes #7123 2022-01-25 20:14:10 +05:30
Akshay Joshi 0ce3434631 Fixed code smell 'Update this function so that its implementation is not identical' reported by SonarQube. 2022-01-25 20:10:31 +05:30
Pradip Parkale 094129e2be Port Dependent, dependencies, statistics panel to React. Fixes #7016 2022-01-24 14:13:02 +05:30
Akshay Joshi 3e86ed5d21 Added validation for Hostname in the server dialog. Fixes #7127 2022-01-24 12:04:35 +05:30
Nikhil Mohite 41bcce09ce Remove the support of the 'Move object to another tablespace' feature. 2022-01-21 19:39:21 +05:30
Akshay Joshi 343c3ee49c Fixed following code smells reported by SonarQube:
1) Remove this redundant jump.
 2) Remove this commented out code.
 3) Variables should not be shadowed.
2022-01-21 18:54:23 +05:30
Dave Page 12d6271b13 Quote string 2022-01-21 13:23:13 +00:00
Dave Page c65f60771a Enforce the minimum Windows version that the installer will run on. Fixes #7135 2022-01-21 12:59:01 +00:00
Yogesh Mahajan c983aae881 Port Import/Export dialog to React. Fixes #7017. 2022-01-21 11:48:52 +05:30
Akshay Joshi 1013d7ccdd Fixed code smell reported by SonarQube. 2022-01-20 16:58:21 +05:30
Nikhil Mohite d945c6f843 Fixed an issue where connections keep open to (closed) connections on the initial connection to the database server. Fixes #7035 2022-01-19 15:02:05 +05:30
Akshay Joshi dabe64a8df Fixed enable/disable menu issue introduced by SonarQube fix. 2022-01-19 12:16:57 +05:30
Aditya Toshniwal fbc3b1a318 Added support for grouping in input select boxes and allow setting default selected options. 2022-01-18 18:44:55 +05:30
Akshay Joshi 6adc1bfd42 Fixed context menu issue. 2022-01-18 18:43:34 +05:30
Nikhil Mohite e7e4d5cf0a Fixed feature test cases for maintenance dialog. 2022-01-18 14:51:02 +05:30
Akshay Joshi 9f836f5433 Fixed following code smells reported by SonarQube:
1) Immediately return this expression instead of assigning it to the temporary variable.
 2) Extract this nested ternary operation into an independent statement.
 3) Expected a `for-of` loop instead of a `for` loop with this simple iteration.
2022-01-18 14:49:54 +05:30
Akshay Joshi e3807ec3d6 Fixed following code smells reported by SonarQube:
1) Boolean checks should not be inverted.
 2) Review this redundant assignment.
 3) Extract this nested ternary operation into an independent statement.
 4) Unexpected empty function.
 5) Immediately return this expression instead of assigning it to the temporary variable.
2022-01-17 13:56:01 +05:30
Nikhil Mohite 40fa1aff6b Added flag in runtime to disable GPU hardware acceleration. Fixes #6916 2022-01-13 13:01:40 +05:30
Nikhil Mohite 4787de6968 CSS changes in the browser tree.
refs #7085
2022-01-13 12:52:55 +05:30
Akshay Joshi 3f7e921cce Fixed code smell 'Unexpected empty arrow function' reported by SonarQube. 2022-01-12 18:59:21 +05:30
Akshay Joshi 4e414f57e6 Fixed code smell 'Default parameters should be last' reported by SonarQube. 2022-01-12 18:40:18 +05:30
Akshay Joshi c98fb887cc Fixed code smell 'Unexpected empty arrow function' reported by SonarQube. 2022-01-12 17:32:20 +05:30
Nikhil Mohite d2457f2a1d Ensure that Partitioned tables should be visible correctly when creating multiple partition levels. Fixes #7085 2022-01-12 16:29:13 +05:30
Akshay Joshi e38c38cd58 Fixed following SonarQube code smells:
1) Remove this useless assignment to a variable.
2) Remove the unused local variable.
2022-01-12 14:53:19 +05:30
Nikhil Mohite 374c5e952f Fixed an issue where the Browser tree gets disappears when scrolling sequences. Fixes #7100 2022-01-11 18:03:11 +05:30
Libor M 38e5ded821 Update Czech translation. 2022-01-11 17:40:49 +05:30
460 changed files with 40835 additions and 38733 deletions

No files matched your search

+39 -49
View File
@@ -35,36 +35,39 @@ Flask-Paranoid 0.2.0
Flask-Babel 2.0.0 BSD http://github.com/python-babel/flask-babel
Flask-Security-Too 4.1.2 MIT https://github.com/Flask-Middleware/flask-security
Flask-SocketIO 5.1.1 UNKNOWN https://github.com/miguelgrinberg/flask-socketio
WTForms 3.0.0 BSD-3-Clause https://wtforms.readthedocs.io/
WTForms 3.0.1 BSD-3-Clause https://wtforms.readthedocs.io/
passlib 1.7.4 BSD https://passlib.readthedocs.io
pytz 2021.3 MIT http://pythonhosted.org/pytz
simplejson 3.17.6 MIT License https://github.com/simplejson/simplejson
six 1.16.0 MIT https://github.com/benjaminp/six
speaklater3 1.4 UNKNOWN https://github.com/ThomasWaldmann/speaklater
sqlparse 0.4.2 BSD-3-Clause https://github.com/andialbrecht/sqlparse
psutil 5.8.0 BSD https://github.com/giampaolo/psutil
psycopg2 2.9.2 LGPL with exceptions https://psycopg.org/
psutil 5.9.0 BSD https://github.com/giampaolo/psutil
psycopg2 2.9.3 LGPL with exceptions https://psycopg.org/
python-dateutil 2.8.2 Dual License https://github.com/dateutil/dateutil
SQLAlchemy 1.4.28 MIT https://www.sqlalchemy.org
SQLAlchemy 1.4.31 MIT https://www.sqlalchemy.org
bcrypt 3.2.0 Apache License, Version 2.0 https://github.com/pyca/bcrypt/
cryptography 3.4.8 BSD or Apache License, Version 2.0 https://github.com/pyca/cryptography
sshtunnel 0.4.0 MIT https://github.com/pahaz/sshtunnel
ldap3 2.9.1 LGPL v3 https://github.com/cannatag/ldap3
gssapi 1.7.2 LICENSE.txt https://github.com/pythongssapi/python-gssapi
eventlet 0.33.0 UNKNOWN http://eventlet.net
httpagentparser 1.9.1 http://www.opensource.org/licenses/mit-license.php http://shon.github.com/httpagentparser
httpagentparser 1.9.2 http://www.opensource.org/licenses/mit-license.php https://github.com/shon/httpagentparser
user-agents 2.2.0 MIT https://github.com/selwin/python-user-agents
pywinpty 1.1.* Unknown Unknown
Authlib 0.15.5 BSD-3-Clause https://authlib.org/
requests 2.25.1 Apache 2.0 https://requests.readthedocs.io
pyotp 2.6.0 MIT License https://github.com/pyotp/pyotp
qrcode 7.3.1 BSD https://github.com/lincolnloop/python-qrcode
Pillow 8.3.2 HPND https://python-pillow.org
Pillow 9.0.1 HPND https://python-pillow.org
boto3 1.20.54 Apache License 2.0 https://github.com/boto/boto3
botocore 1.23.54 Apache License 2.0 https://github.com/boto/botocore
urllib3 1.26.8 MIT https://urllib3.readthedocs.io/
NOTE: This report was generated using Python 3.10. Full information may not be
shown for Python modules that are not required with this version.
37 dependencies listed.
40 dependencies listed.
Javascript Dependencies
=======================
@@ -103,6 +106,7 @@ Name Version
@babel/plugin-transform-react-pure-annotations 7.12.1 MIT https://github.com/babel/babel.git
@babel/preset-react 7.13.13 MIT https://github.com/babel/babel.git
@babel/runtime 7.14.0 MIT https://github.com/babel/babel.git
@babel/runtime 7.17.0 MIT https://github.com/babel/babel.git
@babel/template 7.14.5 MIT https://github.com/babel/babel.git
@babel/traverse 7.14.7 MIT https://github.com/babel/babel.git
@babel/types 7.15.4 MIT https://github.com/babel/babel.git
@@ -138,6 +142,7 @@ Name Version
@projectstorm/react-diagrams-routing 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
@simonwep/pickr 1.8.1 MIT https://github.com/Simonwep/pickr.git
@sindresorhus/is 0.7.0 MIT https://github.com/sindresorhus/is.git
@szhsin/react-menu 2.3.3 MIT https://github.com/szhsin/react-menu.git
@tippyjs/react 4.2.3 MIT git+https://github.com/atomiks/tippyjs-react.git
@types/classnames 2.3.1 MIT Unknown
@types/component-emitter 1.2.10 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@@ -152,31 +157,21 @@ Name Version
@types/scheduler 0.16.1 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/styled-jsx 2.2.8 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
acitree 4.5.0-rc.7 MIT https://github.com/imsurinder90/jquery-aciTree.git
ajv 8.9.0 MIT https://github.com/ajv-validator/ajv.git
ajv 6.12.6 MIT https://github.com/ajv-validator/ajv.git
ajv 5.5.2 MIT https://github.com/epoberezkin/ajv.git
ajv-errors 1.0.1 MIT git+https://github.com/epoberezkin/ajv-errors.git
ajv-keywords 3.5.2 MIT git+https://github.com/epoberezkin/ajv-keywords.git
alertifyjs 1.7.1 MIT git@github.com:MohammadYounes/AlertifyJS.git
alphanum-sort 1.0.2 MIT https://github.com/TrySound/alphanum-sort.git
ansi-regex 2.1.1 MIT https://github.com/chalk/ansi-regex.git
ansi-styles 3.2.1 MIT https://github.com/chalk/ansi-styles.git
ansi-styles 2.2.1 MIT https://github.com/chalk/ansi-styles.git
aspen-core 1.0.4 MIT git+https://github.com/neeksandhu/aspen-core.git
aspen-decorations 1.1.1 MIT git+https://github.com/neeksandhu/aspen-decorations.git
aspen-tree-model 1.0.5 MIT git+https://github.com/neeksandhu/aspen-tree-model.git
async 2.6.3 MIT https://github.com/caolan/async.git
axios 0.21.4 MIT https://github.com/axios/axios.git
babel-code-frame 6.26.0 MIT https://github.com/babel/babel/tree/master/packages/babel-code-frame
babel-generator 6.26.1 MIT https://github.com/babel/babel/tree/master/packages/babel-generator
babel-messages 6.23.0 MIT https://github.com/babel/babel/tree/master/packages/babel-messages
babel-plugin-styled-components 1.12.0 MIT https://github.com/styled-components/babel-plugin-styled-components.git
babel-plugin-syntax-jsx 6.18.0 MIT https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx
babel-runtime 6.26.0 MIT https://github.com/babel/babel/tree/master/packages/babel-runtime
babel-template 6.26.0 MIT https://github.com/babel/babel/tree/master/packages/babel-template
babel-traverse 6.26.0 MIT https://github.com/babel/babel/tree/master/packages/babel-traverse
babel-types 6.26.0 MIT https://github.com/babel/babel/tree/master/packages/babel-types
babelify 10.0.0 MIT https://github.com/babel/babelify.git
babylon 6.18.0 MIT https://github.com/babel/babylon
backbone 1.4.0 MIT https://github.com/jashkenas/backbone.git
backbone 1.2.3 MIT https://github.com/jashkenas/backbone.git
backbone 1.3.3 MIT https://github.com/jashkenas/backbone.git
@@ -193,6 +188,8 @@ bignumber.js 9.0.1
bignumber.js 7.2.1 MIT https://github.com/MikeMcl/bignumber.js.git
bootstrap 4.6.0 MIT git+https://github.com/twbs/bootstrap.git
bootstrap4-toggle 3.6.1 MIT https://github.com/gitbrent/bootstrap4-toggle.git
bowser 2.11.0 MIT git+https://github.com/lancedikson/bowser.git
brace 0.11.1 MIT git://github.com/thlorenz/brace.git
brace-expansion 1.1.11 MIT git://github.com/juliangruber/brace-expansion.git
browserfs 1.4.3 MIT https://github.com/jvilk/BrowserFS.git
browserslist 4.16.6 MIT https://github.com/browserslist/browserslist.git
@@ -201,14 +198,12 @@ camelcase 6.2.0
camelize 1.0.0 MIT git://github.com/substack/camelize.git
caniuse-api 3.0.0 MIT https://github.com/nyalab/caniuse-api.git
chalk 2.4.2 MIT https://github.com/chalk/chalk.git
chalk 1.1.3 MIT https://github.com/chalk/chalk.git
chart.js 2.9.4 MIT https://github.com/chartjs/Chart.js.git
chartjs-color 2.4.1 MIT https://github.com/chartjs/chartjs-color.git
chartjs-color-string 0.6.0 MIT https://github.com/chartjs/chartjs-color-string.git
classnames 2.3.1 MIT https://github.com/JedWatson/classnames.git
closest 0.0.1 MIT https://github.com/ForbesLindesay/closest.git
clsx 1.1.1 MIT https://github.com/lukeed/clsx.git
co 4.6.0 MIT https://github.com/tj/co.git
codemirror 5.59.4 MIT https://github.com/codemirror/CodeMirror.git
color-convert 1.9.3 MIT https://github.com/Qix-/color-convert.git
color-name 1.1.3 MIT git@github.com:dfcreative/color-name.git
@@ -220,8 +215,8 @@ component-emitter 1.3.0
concat-map 0.0.1 MIT git://github.com/substack/node-concat-map.git
context-menu 2.0.0 MIT https://github.com/chipto/context-menu.git
convert-source-map 1.8.0 MIT git://github.com/thlorenz/convert-source-map.git
copy-to-clipboard 3.3.1 MIT git+https://github.com/sudodoki/copy-to-clipboard
core-js 3.12.1 MIT https://github.com/zloirock/core-js.git
core-js 2.6.12 MIT https://github.com/zloirock/core-js.git
cosmiconfig 7.0.0 MIT git+https://github.com/davidtheclark/cosmiconfig.git
css-color-names 1.0.1 MIT git://github.com/bahamas10/css-color-names.git
css-color-names 0.0.4 MIT git://github.com/bahamas10/css-color-names.git
@@ -240,10 +235,9 @@ csstype 3.0.8
dagre 0.8.5 MIT https://github.com/dagrejs/dagre.git
date-fns 2.24.0 MIT https://github.com/date-fns/date-fns
debug 4.3.1 MIT git://github.com/visionmedia/debug.git
debug 2.6.9 MIT git://github.com/visionmedia/debug.git
deep-diff 1.0.2 MIT git://github.com/flitbit/diff.git
detect-indent 4.0.0 MIT https://github.com/sindresorhus/detect-indent.git
diff-arrays-of-objects 1.1.8 MIT git+https://github.com/malcolmvr/diff-arrays-of-objects.git
dom-align 1.12.2 MIT git@github.com:yiminghe/dom-align.git
dom-helpers 5.2.0 MIT git+https://github.com/react-bootstrap/dom-helpers.git
dom-serializer 1.3.2 MIT git://github.com/cheeriojs/dom-renderer.git
dropzone 5.9.3 MIT https://github.com/dropzone/dropzone.git
@@ -254,15 +248,12 @@ error-ex 1.3.2
escalade 3.1.1 MIT https://github.com/lukeed/escalade.git
escape-string-regexp 1.0.5 MIT https://github.com/sindresorhus/escape-string-regexp.git
fast-deep-equal 3.1.3 MIT git+https://github.com/epoberezkin/fast-deep-equal.git
fast-deep-equal 1.1.0 MIT git+https://github.com/epoberezkin/fast-deep-equal.git
fast-json-stable-stringify 2.1.0 MIT git://github.com/epoberezkin/fast-json-stable-stringify.git
filename-reserved-regex 2.0.0 MIT https://github.com/sindresorhus/filename-reserved-regex.git
follow-redirects 1.14.4 MIT git@github.com:follow-redirects/follow-redirects.git
follow-redirects 1.14.8 MIT git@github.com:follow-redirects/follow-redirects.git
gensync 1.0.0-beta.2 MIT https://github.com/loganfsmyth/gensync.git
globals 11.12.0 MIT https://github.com/sindresorhus/globals.git
globals 9.18.0 MIT https://github.com/sindresorhus/globals.git
graphlib 2.1.8 MIT https://github.com/dagrejs/graphlib.git
has-ansi 2.0.0 MIT https://github.com/sindresorhus/has-ansi.git
has-cors 1.1.0 MIT git://github.com/component/has-cors.git
has-flag 3.0.0 MIT https://github.com/sindresorhus/has-flag.git
has-flag 4.0.0 MIT https://github.com/sindresorhus/has-flag.git
@@ -275,33 +266,29 @@ immutability-helper 3.1.1
import-fresh 3.3.0 MIT https://github.com/sindresorhus/import-fresh.git
imports-loader 2.0.0 MIT https://github.com/webpack-contrib/imports-loader.git
insert-if 1.2.0 MIT git+https://github.com/chipto/insert-if.git
invariant 2.2.4 MIT https://github.com/zertosh/invariant
ip-address 7.1.0 MIT git://github.com/beaugunderson/ip-address.git
is-absolute-url 3.0.3 MIT https://github.com/sindresorhus/is-absolute-url.git
is-any-array 1.0.0 MIT https://github.com/cheminfo-js/is-any-array.git
is-arrayish 0.2.1 MIT https://github.com/qix-/node-is-arrayish.git
is-color-stop 1.1.0 MIT git+https://github.com/pigcan/is-color-stop.git
is-finite 1.1.0 MIT https://github.com/sindresorhus/is-finite.git
is-in-browser 1.1.3 MIT git+https://github.com/tuxsudo/is-in-browser.git
is-relative 1.0.0 MIT https://github.com/jonschlinkert/is-relative.git
is-unc-path 1.0.0 MIT https://github.com/jonschlinkert/is-unc-path.git
istanbul-instrumenter-loader 3.0.1 MIT https://github.com/webpack-contrib/istanbul-instrumenter-loader.git
javascript-natural-sort 0.7.1 MIT https://github.com/Bill4Time/javascript-natural-sort.git
jquery 3.6.0 MIT https://github.com/jquery/jquery.git
jquery-contextmenu 2.9.2 MIT git://github.com/swisnl/jQuery-contextMenu.git
jquery-ui 1.13.0 MIT git://github.com/jquery/jquery-ui.git
js-tokens 4.0.0 MIT https://github.com/lydell/js-tokens.git
js-tokens 3.0.2 MIT https://github.com/lydell/js-tokens.git
jsbn 1.1.0 MIT https://github.com/andyperlitch/jsbn.git
jsesc 2.5.2 MIT https://github.com/mathiasbynens/jsesc.git
jsesc 1.3.0 MIT https://github.com/mathiasbynens/jsesc.git
json-bignumber 1.0.2 MIT git@github.com:wbuss/JSONBigNumber.git
json-parse-even-better-errors 2.3.1 MIT https://github.com/npm/json-parse-even-better-errors
json-schema-traverse 1.0.0 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
json-schema-traverse 0.4.1 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
json-schema-traverse 0.3.1 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
json-source-map 0.6.1 MIT git+https://github.com/epoberezkin/json-source-map.git
json5 2.2.0 MIT git+https://github.com/json5/json5.git
json5 1.0.1 MIT git+https://github.com/json5/json5.git
jsoneditor-react 3.1.2 MIT git+https://github.com/vankop/jsoneditor-react.git
jss 10.5.1 MIT https://github.com/cssinjs/jss
jss-plugin-camel-case 10.5.1 MIT https://github.com/cssinjs/jss
jss-plugin-default-unit 10.5.1 MIT https://github.com/cssinjs/jss
@@ -333,10 +320,8 @@ moment 2.29.1
moment 2.24.0 MIT https://github.com/moment/moment.git
moment-timezone 0.5.33 MIT https://github.com/moment/moment-timezone.git
ms 2.1.2 MIT https://github.com/zeit/ms.git
ms 2.0.0 MIT https://github.com/zeit/ms.git
nanocolors 0.1.12 MIT https://github.com/ai/nanocolors.git
nanoid 3.1.23 MIT https://github.com/ai/nanoid.git
nanoid 3.1.30 MIT https://github.com/ai/nanoid.git
nanoid 3.2.0 MIT https://github.com/ai/nanoid.git
nanopop 2.1.0 MIT https://github.com/Simonwep/nanopop.git
node-releases 1.1.72 MIT git+https://github.com/chicoxyzzy/node-releases.git
normalize-url 4.5.1 MIT https://github.com/sindresorhus/normalize-url.git
@@ -391,6 +376,15 @@ postcss-value-parser 4.1.0
prop-types 15.7.2 MIT https://github.com/facebook/prop-types.git
punycode 2.1.1 MIT https://github.com/bestiejs/punycode.js.git
raf 3.4.1 MIT git://github.com/chrisdickinson/raf.git
rc-align 4.0.11 MIT git@github.com:react-component/align.git
rc-dropdown 3.3.0 MIT git@github.com:react-component/dropdown.git
rc-menu 9.3.2 MIT git@github.com:react-component/menu.git
rc-motion 2.4.4 MIT git@github.com:react-component/motion.git
rc-overflow 1.2.2 MIT git@github.com:react-component/overflow.git
rc-resize-observer 1.2.0 MIT git@github.com:react-component/resize-observer.git
rc-tabs 11.10.5 MIT git@github.com:react-component/tabs.git
rc-trigger 5.2.10 MIT https://github.com/react-component/trigger.git
rc-util 5.17.0 MIT git@github.com:react-component/util.git
react 16.14.0 MIT git+https://github.com/facebook/react.git
react 17.0.2 MIT https://github.com/facebook/react.git
react-aspen 1.1.1 MIT https://github.com/neeksandhu/react-aspen.git
@@ -403,11 +397,12 @@ react-is 16.13.1
react-is 17.0.2 MIT https://github.com/facebook/react.git
react-select 4.3.1 MIT https://github.com/JedWatson/react-select/tree/master/packages/react-select
react-table 7.7.0 MIT https://github.com/tannerlinsley/react-table
react-transition-state 1.1.3 MIT https://github.com/szhsin/react-transition-state.git
react-virtualized-auto-sizer 1.0.6 MIT https://github.com/bvaughn/react-virtualized-auto-sizer.git
react-window 1.8.6 MIT https://github.com/bvaughn/react-window.git
regenerator-runtime 0.13.7 MIT https://github.com/facebook/regenerator/tree/master/packages/regenerator-runtime
regenerator-runtime 0.11.1 MIT https://github.com/facebook/regenerator/tree/master/packages/regenerator-runtime
repeating 2.0.1 MIT https://github.com/sindresorhus/repeating.git
require-from-string 2.0.2 MIT https://github.com/floatdrop/require-from-string.git
resize-observer-polyfill 1.5.1 MIT https://github.com/que-etc/resize-observer-polyfill.git
resolve-from 4.0.0 MIT https://github.com/sindresorhus/resolve-from.git
rgb-regex 1.0.1 MIT https://github.com/regexps/rgb-regex.git
rgba-regex 1.0.0 MIT https://github.com/johnotander/rgba-regex.git
@@ -416,7 +411,6 @@ safe-buffer 5.1.2
scheduler 0.19.1 MIT https://github.com/facebook/react.git
scheduler 0.20.2 MIT https://github.com/facebook/react.git
schema-utils 3.0.0 MIT https://github.com/webpack/schema-utils.git
schema-utils 0.3.0 MIT git+https://github.com/webpack-contrib/schema-utils.git
schema-utils 1.0.0 MIT https://github.com/webpack-contrib/schema-utils
select2 4.0.13 MIT git://github.com/select2/select2.git
shallowequal 1.1.0 MIT https://github.com/dashed/shallowequal.git
@@ -428,13 +422,11 @@ socket.io-parser 4.0.4
source-list-map 1.1.2 MIT https://github.com/webpack/source-list-map.git
split.js 1.6.4 MIT https://github.com/nathancahill/split
stable 0.1.8 MIT https://github.com/Two-Screen/stable.git
strip-ansi 3.0.1 MIT https://github.com/chalk/strip-ansi.git
strip-comments 2.0.1 MIT https://github.com/jonschlinkert/strip-comments.git
styled-components 5.2.1 MIT git+https://github.com/styled-components/styled-components.git
stylehacks 5.0.1 MIT https://github.com/cssnano/cssnano.git
stylis 4.0.10 MIT https://github.com/thysultan/stylis.js
supports-color 5.5.0 MIT https://github.com/chalk/supports-color.git
supports-color 2.0.0 MIT https://github.com/chalk/supports-color.git
supports-color 7.2.0 MIT https://github.com/chalk/supports-color.git
svgo 2.7.0 MIT git://github.com/svg/svgo.git
symbol-observable 1.2.0 MIT https://github.com/blesh/symbol-observable.git
@@ -445,8 +437,7 @@ tiny-emitter 2.1.0
tiny-warning 1.0.3 MIT https://github.com/alexreardon/tiny-warning.git
tippy.js 6.3.1 MIT git+https://github.com/atomiks/tippyjs.git
to-fast-properties 2.0.0 MIT https://github.com/sindresorhus/to-fast-properties.git
to-fast-properties 1.0.3 MIT https://github.com/sindresorhus/to-fast-properties.git
trim-right 1.0.1 MIT https://github.com/sindresorhus/trim-right.git
toggle-selection 1.0.6 MIT git+https://github.com/sudodoki/toggle-selection
unc-path-regex 0.1.2 MIT https://github.com/regexhq/unc-path-regex.git
underscore 1.13.1 MIT git://github.com/jashkenas/underscore.git
uniqs 2.0.0 MIT git://github.com/fgnass/uniqs.git
@@ -477,8 +468,8 @@ minimatch 3.0.4
postcss-modules-extract-imports 3.0.0 ISC https://github.com/css-modules/postcss-modules-extract-imports.git
postcss-modules-scope 3.0.0 ISC https://github.com/css-modules/postcss-modules-scope.git
postcss-modules-values 4.0.0 ISC git+https://github.com/css-modules/postcss-modules-values.git
react-timer-hook 3.0.5 ISC git+https://github.com/amrlabib/react-timer-hook.git
semver 7.3.4 ISC https://github.com/npm/node-semver
semver 5.7.1 ISC https://github.com/npm/node-semver
semver 6.3.0 ISC https://github.com/npm/node-semver
vanilla-picker 2.11.2 ISC https://github.com/Sphinxxxx/vanilla-picker.git
yallist 4.0.0 ISC git+https://github.com/isaacs/yallist.git
@@ -486,9 +477,7 @@ yaml 1.10.2
ace-builds 1.4.12 BSD-3-Clause https://github.com/ajaxorg/ace-builds.git
hoist-non-react-statics 3.3.2 BSD-3-Clause git://github.com/mridgway/hoist-non-react-statics.git
hyphenate-style-name 1.0.4 BSD-3-Clause git+ssh://git@github.com/rexxars/hyphenate-style-name.git
istanbul-lib-coverage 1.2.1 BSD-3-Clause git@github.com:istanbuljs/istanbuljs.git
istanbul-lib-coverage 3.0.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
istanbul-lib-instrument 1.10.2 BSD-3-Clause git@github.com:istanbuljs/istanbuljs.git
istanbul-lib-instrument 4.0.3 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
istanbul-lib-report 3.0.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
istanbul-lib-source-maps 4.0.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
@@ -503,15 +492,16 @@ indefinite-observable 2.0.1
jmespath 0.15.0 Apache-2.0 git://github.com/jmespath/jmespath.js
jsoneditor 9.5.6 Apache-2.0 https://github.com/josdejong/jsoneditor.git
paths-js 0.4.11 Apache-2.0 https://github.com/andreaferretti/paths-js.git
rc-dock 3.2.10 Apache-2.0 https://github.com/ticlo/rc-dock.git
rc-new-window 0.1.13 Apache-2.0 https://github.com/ticlo/rc-new-window.git
snapsvg 0.5.1 Apache-2.0 git@github.com:adobe-webplatform/Snap.svg.git
caniuse-lite 1.0.30001230 CC-BY-4.0 https://github.com/browserslist/caniuse-lite.git
caniuse-lite 1.0.30001309 CC-BY-4.0 https://github.com/browserslist/caniuse-lite.git
css-select 4.1.3 BSD-2-Clause git://github.com/fb55/css-select.git
css-what 5.1.0 BSD-2-Clause https://github.com/fb55/css-what
domelementtype 2.2.0 BSD-2-Clause git://github.com/fb55/domelementtype.git
domhandler 4.2.0 BSD-2-Clause git://github.com/fb55/domhandler.git
domutils 2.6.0 BSD-2-Clause git://github.com/fb55/domutils.git
entities 2.2.0 BSD-2-Clause git://github.com/fb55/entities.git
esutils 2.0.3 BSD-2-Clause http://github.com/estools/esutils.git
leaflet 1.7.1 BSD-2-Clause git://github.com/Leaflet/Leaflet.git
nth-check 2.0.1 BSD-2-Clause https://github.com/fb55/nth-check
uri-js 4.4.1 BSD-2-Clause http://github.com/garycourt/uri-js
@@ -524,5 +514,5 @@ precond 0.2.3
webcabin-docker 2.2.5 MIT* Unknown
tablesorter 2.31.3 (MIT OR GPL-2.0) git://github.com/Mottie/tablesorter.git
452 dependencies listed.
439 dependencies listed.
+14 -5
View File
@@ -211,7 +211,8 @@ REM Main build sequence Ends
RD /Q /S "%WD%\web\pgadmin\static\js\generated\.cache" 1> nul 2>&1
ECHO Copying web directory...
XCOPY /S /I /E /H /Y "%WD%\web" "%BUILDROOT%\web" > nul || EXIT /B 1
ROBOCOPY /S "%WD%\web" "%BUILDROOT%\web" > nul
CALL :CHECK_ROBOCOPY_ERROR
ECHO Installing javascript dependencies...
CD "%BUILDROOT%\web"
@@ -272,10 +273,15 @@ REM Main build sequence Ends
REM YARN END
REM WGET
FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
:GET_NW
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
REM Comment out the below for loop as the latest version (0.62.0) having
REM some problem, so for the time being hardcoded the version to 0.61.0
REM FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
REM :GET_NW
REM wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
REM IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
SET "NW_VERSION=0.61.0"
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
tar -C "%TMPDIR%" -xvf "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip" || EXIT /B 1
REM WGET END
@@ -365,3 +371,6 @@ REM Main build sequence Ends
EXIT /B 1
:CHECK_ROBOCOPY_ERROR
IF %ERRORLEVEL% GEQ 8 EXIT /B %ERRORLEVEL%
EXIT /B 0
+2 -2
View File
@@ -6,8 +6,8 @@
Use the *Add named restore point* dialog to take a named snapshot of the state
of the server for use in a recovery file. To create a named restore point, the
server's postgresql.conf file must specify a *wal_level* value of *archive*,
*hot_standby*, or *logical*. You must be a database superuser to create a
server's postgresql.conf file must specify a *wal_level* value of *replica*,
*logical*, or *minimal*. You must be a database superuser to create a
restore point.
.. image:: images/add_restore_point.png
+87
View File
@@ -0,0 +1,87 @@
.. _cloud_deployment:
******************************
`Cloud Deployment`:index:
******************************
The PostgreSQL server can be deployed on the Amazon AWS cloud using this module.
Currently only RDS is available, but in the future more cloud options will be available.
To launch the *Cloud Deployment...* tool, right click on the *Server Group* or *Server* of the tree control, and select
*Deploy a Cloud Instance* from the *Register* menu.
.. image:: images/cloud_deployment_provider.png
:alt: Cloud Deployment Provider
:align: center
Once you launch the tool, the Amazon RDS is already selected as this is the only option currently available.
Click on the *Next* button to proceed further.
.. image:: images/cloud_deployment_credentials.png
:alt: Cloud Deployment Provider
:align: center
In the Credentials dialog, provide the region in which you want to deploy the instance along with
*AWS access key* and *AWS secret access key*.
Provide *AWS session token* only if your AWS session is temporary.
To proceed further, click on the next button. Before going further, pgAdmin will validate your credentials.
.. image:: images/cloud_deployment_instance.png
:alt: Cloud Deployment Provider
:align: center
Use the fields from the Instance Specification tab to specify the Instance details.
* Use the *Instance name* field to add an instance name for the PostgreSQL server; the name
specified will be displayed in the *Browser* tree control too.
* Use the *Public IP* field to specify the IP Address range for permitting the inbound traffic.
* Use the *Database version* field to specify the PostgreSQL version to deploy.
* Use the *Instance class* field to allocate the computational, network, and memory capacity required by planned workload of this DB instance.
* Use the *Instance type* field to select the instance type.
* Use the *Storage type* field to select the instance storage type. Three options are available. General Purpose (SSD) storage, Provisioned IOPS (SSD) and Magnetic storage.
* Use the *Allocated storage* field to specify the storage capacity in GiB.
* Use the *Provisioned IOPS* in case of Provisioned IOPS (SSD) storage type.
.. image:: images/cloud_deployment_database.png
:alt: Cloud Deployment Provider
:align: center
Use the fields from the Database Details tab to specify the Instance details.
* Use the drop-down list box in the *Server group* field to select the parent
node for the server; the server will be displayed in the *Browser* tree
control within the specified group.
* Use the *Database name* field to add the database name for the PostgreSQL server.
* Use the *Username* field to specify the name of a role that will be used when
authenticating with the server.
* Use the *Password* field to provide a password that will be supplied when
authenticating with the server.
* Use the *Confirm password* field to repeat the password.
* Enter the listener port number of the server host in the *Port* field.
.. image:: images/cloud_deployment_review.png
:alt: Cloud Deployment Provider
:align: center
At the end, review the Instance details that you provided. Click on Finish button to deploy the instance on Amazon RDS.
.. image:: images/cloud_deployment_tree.png
:alt: Cloud Deployment Provider
:align: center
Once you click on the finish, one background process will start which will deploy the instance in the cloud
and monitor the progress of the deployment. The Server will be added to the tree with the cloud uploading icon.
Once the deployment is done, the necessary server details will be updated.
+1 -1
View File
@@ -18,7 +18,7 @@ control, and select *Server Group* from the *Create* menu.
Use the fields on the *Server* dialog to define the connection properties for
each new server that you wish to manage with pgAdmin. To open the *Server*
dialog, right-click on the *Servers* node of the tree control, and select
*Server* from the *Create* menu.
*Server* from the *Register* menu.
.. toctree::
+1
View File
@@ -17,3 +17,4 @@ will provide detailed information about creating a custom deployment.
desktop_deployment
server_deployment
container_deployment
cloud_deployment
+14 -11
View File
@@ -78,22 +78,25 @@ Use the *Runtime Menu* to access the *Configuration* dialog:
:alt: Runtime Configuration
:align: center
Following are the details of the *Fixed port number?*, *Port Number*, and *Connection
Timeout* configuration parameters:
Following are the details of the *Fixed port number?*, *Port Number*, *Connection
Timeout*, and 'Open Documentation in Default Browser?' configuration parameters:
.. table::
:class: longtable
:widths: 2 1 4
+--------------------------+--------------------+---------------------------------------------------------------+
| Key | Type | Purpose |
+==========================+====================+===============================================================+
| FixedPort | Boolean | Use a fixed network port number rather than a random one. |
+--------------------------+--------------------+---------------------------------------------------------------+
| PortNumber | Integer | The port number to use, if using a fixed port. |
+--------------------------+--------------------+---------------------------------------------------------------+
| ConnectionTimeout | Integer | The number of seconds to wait for application server startup. |
+--------------------------+--------------------+---------------------------------------------------------------+
+----------------------------------------+--------------------+---------------------------------------------------------------+
| Key | Type | Purpose |
+========================================+====================+===============================================================+
| FixedPort | Boolean | Use a fixed network port number rather than a random one. |
+----------------------------------------+--------------------+---------------------------------------------------------------+
| PortNumber | Integer | The port number to use, if using a fixed port. |
+----------------------------------------+--------------------+---------------------------------------------------------------+
| ConnectionTimeout | Integer | The number of seconds to wait for application server startup. |
+----------------------------------------+--------------------+---------------------------------------------------------------+
| Open Documentation in Default Browser | Boolean | By checking this option, all documentation links will open in |
| | | the default browser instead of in a new window. |
+----------------------------------------+--------------------+---------------------------------------------------------------+
Log dialog
----------
Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 83 KiB

-1
View File
@@ -15,7 +15,6 @@ database, right-click on the *Databases* node, and select *Create Database...*
:maxdepth: 1
database_dialog
move_objects
resource_group_dialog
role_dialog
tablespace_dialog
+3 -3
View File
@@ -53,20 +53,20 @@ following options (in alphabetical order):
| *Clear SSH Tunnel Password* | If you have saved the ssh tunnel password, click to clear the saved password. |
| | Enable only when password is already saved. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| *Connect Server...* | Click to open the :ref:`Connect to Server <connect_to_server>` dialog to establish a connection with a server. |
| *Connect Server* | Click to open the :ref:`Connect to Server <connect_to_server>` dialog to establish a connection with a server. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| *Create* | Click *Create* to access a context menu that provides context-sensitive selections. |
| | Your selection opens a *Create* dialog for creating a new object. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| *Delete/Drop* | Click to delete the currently selected object from the server. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| *Disconnect Server...* | Click to disconnect the currently selected server. |
| *Disconnect from server* | Click to disconnect from the currently selected server. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| *Drop Cascade* | Click to delete the currently selected object and all dependent objects from the server. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| *Properties...* | Click to review or modify the currently selected object's properties. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| *Refresh...* | Click to refresh the currently selected object. |
| *Refresh* | Click to refresh the currently selected object. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| *Remove Server* | Click to remove the currently selected server. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
-65
View File
@@ -1,65 +0,0 @@
.. _move_objects:
****************************
`Move Objects Dialog`:index:
****************************
Use the *Move Objects* dialog to move database objects from one tablespace to
another tablespace.
The *Move Objects* dialog organizes the movement of database objects with the
*General* tab; the *SQL* tab displays the SQL code generated by dialog
selections.
.. image:: images/move_objects_general.png
:alt: Move objects dialog general tab
:align: center
Use the fields in the *General* tab to identify the items that will be moved and
the tablespace to which they will be moved:
* Use the *New tablespace* drop-down listbox to select a pre-existing
tablespace to which the object will be moved. (To create a tablespace, use the
*Tablespace* dialog; access the dialog by right clicking *Tablespaces* in the
*pgAdmin* tree control and selecting *Create Tablespace...* from the
context-menu.)
* Use the *Object type* drop-down listbox to select from the following:
* Select *All* to move all tables, indexes, and materialized views from the
current tablespace (currently selected in the *pgAdmin* tree control) to
the new tablespace.
* Select *Tables* to move tables from the current tablespace to the new
tablespace.
* Select *Indexes* to move indexes from the current tablespace to the new
tablespace.
* Select *Materialized views* to move materialized views from the current
tablespace to the new tablespace.
* Use the *Object owner* drop-down listbox to select the role that owns the
objects selected in the *Object type* field. This field is optional.
Click the *SQL* tab to continue.
Your entries in the *Move Objects* dialog generate a SQL command (see an example
below). Use the *SQL* tab for review; revisit the *General* tab to modify the
SQL command.
Example
*******
The following is an example of the sql command generated by user selections in
the *Move Objects* dialog:
.. image:: images/move_objects_sql.png
:alt: Move Objects dialog sql tab
:align: center
The example shown demonstrates moving materialized views owned by Alice from
tablespace *tbspace_01* to *tbspace_02*.
* Click the *Help* button (?) to access online help.
* Click the *OK* button to save work.
* Click the *Cancel* button to exit without saving work.
+3
View File
@@ -11,6 +11,9 @@ notes for it.
.. toctree::
:maxdepth: 1
release_notes_6_7
release_notes_6_6
release_notes_6_5
release_notes_6_4
release_notes_6_3
release_notes_6_2
+1 -1
View File
@@ -2,7 +2,7 @@
Version 6.4
************
Release date: 2021-01-13
Release date: 2022-01-13
This release contains a number of bug fixes and new features since the release of pgAdmin4 6.3.
+42
View File
@@ -0,0 +1,42 @@
************
Version 6.5
************
Release date: 2022-02-11
This release contains a number of bug fixes and new features since the release of pgAdmin4 6.4.
New features
************
| `Issue #7139 <https://redmine.postgresql.org/issues/7139>`_ - Added support to open SQL help, Dialog help, and online help in an external web browser.
Housekeeping
************
| `Issue #7016 <https://redmine.postgresql.org/issues/7016>`_ - Port Dependent, dependencies, statistics panel to React.
| `Issue #7017 <https://redmine.postgresql.org/issues/7017>`_ - Port Import/Export dialog to React.
| `Issue #7163 <https://redmine.postgresql.org/issues/7163>`_ - Rename the menu 'Disconnect Server' to 'Disconnect from server'.
Bug fixes
*********
| `Issue #6916 <https://redmine.postgresql.org/issues/6916>`_ - Added flag in runtime to disable GPU hardware acceleration.
| `Issue #7035 <https://redmine.postgresql.org/issues/7035>`_ - Fixed an issue where connections keep open to (closed) connections on the initial connection to the database server.
| `Issue #7085 <https://redmine.postgresql.org/issues/7085>`_ - Ensure that Partitioned tables should be visible correctly when creating multiple partition levels.
| `Issue #7086 <https://redmine.postgresql.org/issues/7086>`_ - Correct documentation for 'Add named restore point'.
| `Issue #7100 <https://redmine.postgresql.org/issues/7100>`_ - Fixed an issue where the Browser tree gets disappears when scrolling sequences.
| `Issue #7109 <https://redmine.postgresql.org/issues/7109>`_ - Make the size blank for all the directories in the file select dialog.
| `Issue #7110 <https://redmine.postgresql.org/issues/7110>`_ - Ensure that cursor should be focused on the first options of the Utility dialogs.
| `Issue #7118 <https://redmine.postgresql.org/issues/7118>`_ - Ensure that JSON files should be downloaded properly from the storage manager.
| `Issue #7123 <https://redmine.postgresql.org/issues/7123>`_ - Fixed an issue where restore generates incorrect options for the schema.
| `Issue #7126 <https://redmine.postgresql.org/issues/7126>`_ - Fixed an issue where the F2 Function key removes browser panel contents.
| `Issue #7127 <https://redmine.postgresql.org/issues/7127>`_ - Added validation for Hostname in the server dialog.
| `Issue #7135 <https://redmine.postgresql.org/issues/7135>`_ - Enforce the minimum Windows version that the installer will run on.
| `Issue #7136 <https://redmine.postgresql.org/issues/7136>`_ - Fixed an issue where the query tool is displaying an incorrect label.
| `Issue #7142 <https://redmine.postgresql.org/issues/7142>`_ - Fixed an issue where a warning message was shown after database creation/modification.
| `Issue #7145 <https://redmine.postgresql.org/issues/7145>`_ - Ensure that owner should be ignored while comparing extensions.
| `Issue #7146 <https://redmine.postgresql.org/issues/7146>`_ - Fixed event trigger comparing issue in Schema Diff tool.
| `Issue #7150 <https://redmine.postgresql.org/issues/7150>`_ - Fixed an issue when uploading a CSV throwing an error in the Desktop mode.
| `Issue #7151 <https://redmine.postgresql.org/issues/7151>`_ - Fixed value error in the restore dialog.
| `Issue #7154 <https://redmine.postgresql.org/issues/7154>`_ - Ensure that the layout should not be reset if a query tool is opened and pgAdmin is restarted.
+33
View File
@@ -0,0 +1,33 @@
************
Version 6.6
************
Release date: 2022-03-10
This release contains a number of bug fixes and new features since the release of pgAdmin4 6.5.
New features
************
| `Issue #7177 <https://redmine.postgresql.org/issues/7177>`_ - Added capability to deploy PostgreSQL servers on Amazon RDS.
Housekeeping
************
| `Issue #7180 <https://redmine.postgresql.org/issues/7180>`_ - Rename the menu 'Disconnect Database' to 'Disconnect from database'.
Bug fixes
*********
| `Issue #6956 <https://redmine.postgresql.org/issues/6956>`_ - Fixed a schema diff issue in which user mappings were not compared correctly.
| `Issue #6991 <https://redmine.postgresql.org/issues/6991>`_ - Fixed an issue where pgadmin cannot connect to LDAP when STARTTLS is required before bind.
| `Issue #6999 <https://redmine.postgresql.org/issues/6999>`_ - Fixed an issue where a warning is flashed every time for an email address when authentication sources are internal and ldap.
| `Issue #7105 <https://redmine.postgresql.org/issues/7105>`_ - Fixed an issue where the parent partition table was not displayed during autocomplete.
| `Issue #7124 <https://redmine.postgresql.org/issues/7124>`_ - Fixed the schema diff issue where tables have different column positions and a column has a default value.
| `Issue #7152 <https://redmine.postgresql.org/issues/7152>`_ - Added comments column for the functions collection node.
| `Issue #7172 <https://redmine.postgresql.org/issues/7172>`_ - Allow users to scroll and enter input when there is a validation error.
| `Issue #7173 <https://redmine.postgresql.org/issues/7173>`_ - Fixed an issue where the User Management dialog is not opening.
| `Issue #7181 <https://redmine.postgresql.org/issues/7181>`_ - Ensure that the user should be able to add new server with unix socket connection.
| `Issue #7186 <https://redmine.postgresql.org/issues/7186>`_ - Fixes an issue where the connect server/database menu was not updated correctly.
| `Issue #7202 <https://redmine.postgresql.org/issues/7202>`_ - Ensure that Flask-Security-Too is using the latest version.
+26
View File
@@ -0,0 +1,26 @@
************
Version 6.7
************
Release date: 2022-03-14
This release contains a number of bug fixes and new features since the release of pgAdmin4 6.6.
.. note:: **Security Release**
Please note that this release includes a security update to fix an issue
where a user could upload files to directories outside of their storage directory, when using pgAdmin
running in server mode.
Users running pgAdmin in server mode, including the standard container based distribution, should upgrade
to this release as soon as possible.
This issue does not affect users running in desktop mode.
Bug fixes
*********
| `Issue #7220 <https://redmine.postgresql.org/issues/7220>`_ - Fixed a schema diff issue where difference SQL isn't generated when foreign key values for a table differ.
| `Issue #7228 <https://redmine.postgresql.org/issues/7228>`_ - Fixed a schema diff issue where string separator '_$PGADMIN$_' is visible for identical user mappings.
| `Issue #7230 <https://redmine.postgresql.org/issues/7230>`_ - Fixed an issue where pgAdmin 4 took ~75 seconds to display the 'Starting pgAdmin' text on the splash screen.
| `Issue #7233 <https://redmine.postgresql.org/issues/7233>`_ - Ensure that upload paths are children of the storage directory.
+1 -1
View File
@@ -53,7 +53,7 @@ following selections (options appear in alphabetical order):
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
| *Disconnect Database...* | Click to terminate a database connection. |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
| *Disconnect Server...* | Click to refresh the currently selected object. |
| *Disconnect from server* | Click to disconnect from the currently selected server. |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
| *Drop Cascade* | Click to delete the currently selected object and all dependent objects from the server. |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
+3 -2
View File
@@ -32,8 +32,9 @@ and modify the values for the following parameters:
"WEBSERVER_AUTO_CREATE_USER", "Set the value to *True* if you want to automatically
create a pgAdmin user corresponding to a successfully authenticated Webserver user.
Please note that password is not stored in the pgAdmin database."
"WEBSERVER_REMOTE_USER", "The default value is REMOTE_USER, set this variable to any header
or environemnt variable to get the webserver remote user details. Possible values: REMOTE_USER,
"WEBSERVER_REMOTE_USER", "To get the web server remote user details, set this variable to any header or
environment variable name which comes from the web server after webserver authentication.
The default value is REMOTE_USER and the possible values are REMOTE_USER,
HTTP_X_FORWARDED_USER, X-Forwarded-User."
+7
View File
@@ -10,6 +10,9 @@ OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
OS_ARCH=$(dpkg-architecture -qDEB_HOST_ARCH)
# Stop creating pyc files.
export PYTHONDONTWRITEBYTECODE=1
# Common Linux build functions
source pkg/linux/build-functions.sh
@@ -35,6 +38,7 @@ Package: ${APP_NAME}-server
Version: ${APP_LONG_VERSION}
Architecture: ${OS_ARCH}
Section: database
Priority: optional
Depends: python3, libpq5 (>= 11.0), libgssapi-krb5-2
Recommends: postgresql-client | postgresql-client-14 | postgresql-client-13 | postgresql-client-12 | postgresql-client-11 | postgresql-client-10
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
@@ -57,6 +61,7 @@ Package: ${APP_NAME}-desktop
Version: ${APP_LONG_VERSION}
Architecture: ${OS_ARCH}
Section: database
Priority: optional
Depends: ${APP_NAME}-server (= ${APP_LONG_VERSION}), libatomic1, xdg-utils
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
Description: The desktop user interface for pgAdmin. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
@@ -82,6 +87,7 @@ Package: ${APP_NAME}-web
Version: ${APP_LONG_VERSION}
Architecture: all
Section: database
Priority: optional
Depends: ${APP_NAME}-server (= ${APP_LONG_VERSION}), apache2, libapache2-mod-wsgi-py3
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
Description: The web interface for pgAdmin, hosted under Apache HTTPD. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
@@ -106,6 +112,7 @@ Package: ${APP_NAME}
Version: ${APP_LONG_VERSION}
Architecture: all
Section: database
Priority: optional
Depends: ${APP_NAME}-server (= ${APP_LONG_VERSION}), ${APP_NAME}-desktop (= ${APP_LONG_VERSION}), ${APP_NAME}-web (= ${APP_LONG_VERSION})
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
Description: Installs all required components to run pgAdmin in desktop and web modes. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
+7 -1
View File
@@ -65,6 +65,9 @@ _create_python_virtualenv() {
sed -i 's/setenv VIRTUAL_ENV .*/setenv VIRTUAL_ENV "\/usr\/pgadmin4\/venv"/g' venv/bin/activate.csh
sed -i 's/set -gx VIRTUAL_ENV .*/set -gx VIRTUAL_ENV "\/usr\/pgadmin4\/venv"/g' venv/bin/activate.fish
# Remove __pycache__
find . -name "__pycache__" -type d -print0 | xargs -0 rm -rf
# Fixup hash bangs
sed -i 's/#!.*\/python3/#\!\/usr\/pgadmin4\/venv\/bin\/python3/g' venv/bin/*
@@ -125,7 +128,10 @@ _build_runtime() {
# YARN END
# WGET:
NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
# Comment out the below line as the latest version (0.62.0) having some
# problem, so for the time being hardcoded the version to 0.61.0
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
NW_VERSION="0.61.0"
pushd "${BUILDROOT}" > /dev/null
while true;do
+4 -1
View File
@@ -33,7 +33,10 @@ _build_runtime() {
# YARN END
# WGET:
NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
# Comment out the below line as the latest version (0.62.0) having some
# problem, so for the time being hardcoded the version to 0.61.0
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
NW_VERSION="0.61.0"
pushd "${BUILD_ROOT}" > /dev/null
while true;do
+2 -2
View File
@@ -46,8 +46,8 @@ if [ "x${PGADMIN_POSTGRES_DIR}" == "x" ]; then
fi
if [ "x${PGADMIN_PYTHON_VERSION}" == "x" ]; then
echo "PGADMIN_PYTHON_VERSION not set. Setting it to the default: 3.9.5"
export PGADMIN_PYTHON_VERSION=3.9.5
echo "PGADMIN_PYTHON_VERSION not set. Setting it to the default: 3.9.9"
export PGADMIN_PYTHON_VERSION=3.9.9
fi
source ${SCRIPT_DIR}/build-functions.sh
+4 -2
View File
@@ -5,8 +5,10 @@ Redhat distributions.
## Supported platforms
* Fedora 30, 31 & 32
* RHEL/CentOS 7 & 8
* Fedora 34 & 35
* RHEL 7 & 8
* CentOS 7
* Rocky Linux 8 (x86_64)
## Build configuration
+7
View File
@@ -13,6 +13,9 @@ OS_ARCH=$(arch)
# Make sure we get the right libpq
export PATH=/usr/pgsql-14/bin:$PATH
# Stop creating pyc files.
export PYTHONDONTWRITEBYTECODE=1
# Common Linux build functions
source pkg/linux/build-functions.sh
@@ -43,6 +46,10 @@ cat << EOF > "${BUILDROOT}/server.spec"
%global __provides_exclude_from ^/.*$
%global _build_id_links none
# Disable RPATH checking, as it will fail with some of the paths in the Python
# virtualenv, in particular Pillow.libs.
%global __brp_check_rpaths %{nil}
# Bytecompiling Python 3 doesn't work on RHEL/CentOS 7, so make it a no-op
%if 0%{?rhel} && 0%{?rhel} == 7
%define __python /bin/true
+2
View File
@@ -10,6 +10,7 @@
#define MyAppInvalidPath "Please provide a valid path."
#define MyAppErrorMsgIsWin32 "You already have a 32 bit installation of pgAdmin 4. Please uninstall this before installing the 64 bit version."
#define MyAppErrorMsgIsWin64 "You already have a 64 bit installation of pgAdmin 4. Please uninstall this before installing the 32 bit version."
#define MinimumWindowsVer "6.2.9200"
[Setup]
AppId={#MyAppName}{#MyAppVersion}
@@ -35,6 +36,7 @@ UninstallDisplayIcon={app}\runtime\{#MyAppExeName}
ArchitecturesInstallIn64BitMode={#MyAppArchitecturesMode}
AllowNoIcons=yes
WizardImageFile=sidebar.bmp
MinVersion={#MinimumWindowsVer}
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
+6 -2
View File
@@ -18,7 +18,7 @@ Flask-WTF==1.*
Flask-Compress==1.*
Flask-Paranoid==0.*
Flask-Babel==2.*
Flask-Security-Too==4.*
Flask-Security-Too==4.1.*
Flask-SocketIO>=5.0.1
WTForms==3.*
passlib==1.*
@@ -44,4 +44,8 @@ Authlib==0.15.*
requests==2.25.*
pyotp==2.*
qrcode==7.*
Pillow==8.3.*
Pillow==8.3.*; python_version <= '3.6'
Pillow==9.*; python_version >= '3.7'
boto3==1.20.*
botocore==1.23.*
urllib3==1.26.*
+1 -1
View File
@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 130"><defs><style>.cls-1{stroke:#000;stroke-width:10.19px;}.cls-2{fill:#336791;}.cls-3,.cls-4,.cls-9{fill:none;}.cls-3,.cls-4,.cls-5,.cls-6{stroke:#fff;}.cls-3,.cls-4{stroke-linecap:round;stroke-width:3.4px;}.cls-3{stroke-linejoin:round;}.cls-4{stroke-linejoin:bevel;}.cls-5,.cls-6{fill:#fff;}.cls-5{stroke-width:1.13px;}.cls-6{stroke-width:0.57px;}.cls-7{fill:#2775b6;}.cls-8{fill:#333;}.cls-9{stroke:#333;stroke-width:3px;}</style></defs><title>pgAdmin_PostgreSQL</title><g id="Layer_1" data-name="Layer 1"><g id="Layer_3"><path class="cls-1" d="M95.59,93.65c.77-6.44.54-7.38,5.33-6.34l1.21.11a27.6,27.6,0,0,0,11.34-1.91c6.09-2.83,9.71-7.55,3.7-6.31-13.71,2.83-14.65-1.81-14.65-1.81C117,55.91,123,28.64,117.82,22,103.57,3.76,78.91,12.37,78.5,12.6l-.13,0a48.65,48.65,0,0,0-9.15-.95C63,11.57,58.31,13.29,54.74,16c0,0-44-18.12-41.95,22.8.44,8.7,12.48,65.86,26.84,48.6C44.88,81.08,50,75.75,50,75.75A13.39,13.39,0,0,0,58.65,78l.25-.21a9,9,0,0,0,.1,2.46c-3.7,4.13-2.62,4.86-10,6.38s-3.09,4.29-.22,5c3.48.87,11.53,2.1,17-5.52l-.22.87c1.46,1.16,1.36,8.35,1.56,13.48s.55,9.93,1.6,12.75,2.28,10.1,12,8C88.81,119.46,95,117,95.59,93.65"/><path class="cls-2" d="M117.17,79.2c-13.71,2.83-14.65-1.81-14.65-1.81C117,55.91,123,28.64,117.82,22,103.57,3.76,78.91,12.37,78.5,12.6l-.13,0a48.65,48.65,0,0,0-9.15-.95C63,11.57,58.31,13.29,54.74,16c0,0-44-18.12-41.95,22.8.44,8.7,12.48,65.86,26.84,48.6C44.88,81.08,50,75.75,50,75.75A13.39,13.39,0,0,0,58.65,78l.25-.21A9.41,9.41,0,0,0,59,80.22c-3.7,4.13-2.61,4.86-10,6.38s-3.08,4.29-.21,5c3.48.87,11.53,2.1,17-5.52l-.22.87c1.45,1.16,2.47,7.56,2.3,13.35s-.28,9.77.86,12.88,2.28,10.1,12,8C88.81,119.46,93,115,93.6,107.42,94,102.07,95,102.87,95,98.08l.75-2.26c.87-7.26.14-9.6,5.15-8.51l1.21.11a27.6,27.6,0,0,0,11.34-1.91c6.09-2.83,9.71-7.55,3.7-6.31Z"/><path class="cls-3" d="M66.33,83.36c-.38,13.5.09,27.09,1.41,30.39s4.15,9.73,13.88,7.64c8.12-1.74,11.08-5.11,12.36-12.55.94-5.47,2.77-20.67,3-23.79"/><path class="cls-3" d="M54.67,15.7s-44-18-42,22.93c.44,8.7,12.48,65.87,26.84,48.6,5.25-6.32,10-11.27,10-11.27"/><path class="cls-3" d="M78.45,12.42c-1.52.47,24.49-9.51,39.28,9.38,5.22,6.67-.83,33.94-15.31,55.42"/><path class="cls-4" d="M102.42,77.22s.94,4.64,14.65,1.81c6-1.24,2.4,3.48-3.7,6.31-5,2.32-16.21,2.92-16.39-.29-.47-8.27,5.9-5.76,5.44-7.83-.42-1.87-3.26-3.7-5.15-8.27-1.64-4-22.57-34.58,5.8-30,1-.22-7.4-27-33.95-27.42S43.45,44.14,43.45,44.14"/><path class="cls-3" d="M58.9,80.05c-3.7,4.13-2.61,4.86-10,6.38s-3.09,4.29-.22,5c3.48.87,11.53,2.1,17-5.52,1.66-2.32,0-6-2.28-7-1.1-.46-2.57-1-4.46,1.09Z"/><path class="cls-3" d="M58.66,80c-.38-2.44.79-5.33,2.05-8.71C62.6,66.19,67,61.11,63.47,45c-2.6-12-20-2.5-20-.87a81.48,81.48,0,0,1-.29,16c-1.41,10.06,6.4,18.57,15.39,17.7"/><path class="cls-5" d="M54.51,43.9c-.08.55,1,2,2.45,2.23a2.62,2.62,0,0,0,2.72-1.51c.08-.56-1-1.17-2.44-1.37s-2.65.09-2.73.65Z"/><path class="cls-6" d="M98,42.76c.07.56-1,2-2.45,2.24a2.64,2.64,0,0,1-2.73-1.52c-.07-.55,1-1.16,2.45-1.36s2.65.09,2.73.64Z"/><path class="cls-3" d="M103.07,38.92c.24,4.36-.94,7.33-1.08,12-.22,6.74,3.21,14.46-2,22.19"/></g><path class="cls-7" d="M154.72,28.15h5.16v4.16A12.84,12.84,0,0,1,163.35,29a11.17,11.17,0,0,1,6.28-1.76,11.84,11.84,0,0,1,9.08,4.09c2.48,2.72,3.73,6.62,3.73,11.67q0,10.26-5.38,14.65a12.2,12.2,0,0,1-7.95,2.79,10.78,10.78,0,0,1-6-1.56,13.55,13.55,0,0,1-3.14-3v16h-5.28Zm19.84,24.6Q177,49.65,177,43.5a17,17,0,0,0-1.09-6.44,7.51,7.51,0,0,0-7.53-5.19q-5.49,0-7.52,5.48a21.49,21.49,0,0,0-1.09,7.44A15.64,15.64,0,0,0,160.88,51a8,8,0,0,0,13.68,1.78Z"/><path class="cls-7" d="M206,29.26a14.6,14.6,0,0,1,3,3V28.3h4.86V56.83c0,4-.58,7.13-1.75,9.44q-3.27,6.38-12.35,6.38a15.07,15.07,0,0,1-8.5-2.27,8.86,8.86,0,0,1-3.85-7.1h5.36a6,6,0,0,0,1.52,3.25q1.77,1.75,5.59,1.76,6,0,7.9-4.28,1.1-2.52,1-9a10.39,10.39,0,0,1-3.8,3.57,13.56,13.56,0,0,1-14.75-2.45q-3.81-3.62-3.81-12,0-7.89,3.84-12.31a11.85,11.85,0,0,1,9.27-4.42A11.37,11.37,0,0,1,206,29.26Zm.64,5.66a7.61,7.61,0,0,0-6.09-2.81A7.52,7.52,0,0,0,193,37.32a20.56,20.56,0,0,0-1.08,7.3c0,3.53.72,6.22,2.14,8.07a6.93,6.93,0,0,0,5.76,2.77,8.09,8.09,0,0,0,8-5.13A16.72,16.72,0,0,0,209,43.56Q209,37.73,206.62,34.92Z"/><path class="cls-7" d="M235.16,16.34h6.58l15.62,43H251l-4.5-12.89H229.6l-4.67,12.89h-6Zm9.67,25.4-6.63-19-6.88,19Z"/><path class="cls-7" d="M279.16,29a14.3,14.3,0,0,1,3.18,3.08V16.2h5.07V59.38h-4.75V55a11.33,11.33,0,0,1-4.35,4.19,12.51,12.51,0,0,1-5.75,1.28,11.61,11.61,0,0,1-9-4.4q-3.82-4.41-3.83-11.74a20.35,20.35,0,0,1,3.49-11.88,11.41,11.41,0,0,1,10-5A11.15,11.15,0,0,1,279.16,29ZM267.39,52.5q2.13,3.39,6.82,3.39a7.17,7.17,0,0,0,6-3.14c1.56-2.1,2.35-5.12,2.35-9s-.81-6.9-2.42-8.81a7.56,7.56,0,0,0-6-2.85,7.88,7.88,0,0,0-6.43,3c-1.64,2-2.46,5-2.46,9A15.62,15.62,0,0,0,267.39,52.5Z"/><path class="cls-7" d="M295.29,28h5.21v4.46a17.4,17.4,0,0,1,3.4-3.37,10.24,10.24,0,0,1,5.92-1.79,9.34,9.34,0,0,1,6,1.85,9.61,9.61,0,0,1,2.34,3.1,11.37,11.37,0,0,1,4.13-3.73,11.52,11.52,0,0,1,5.33-1.22q6.33,0,8.62,4.57a15,15,0,0,1,1.23,6.62V59.38H332V3Line truncated
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 768 668"><defs><style>.cls-1{fill:#e9f8ff;opacity:0.9;}.cls-2{fill:url(#linear-gradient);}.cls-3{fill:url(#linear-gradient-2);}.cls-4{fill:url(#linear-gradient-3);}.cls-5{fill:url(#linear-gradient-4);}.cls-6{fill:url(#linear-gradient-5);}.cls-7{fill:url(#linear-gradient-6);}.cls-8{fill:url(#linear-gradient-7);}.cls-9{fill:url(#linear-gradient-8);}.cls-10{fill:url(#linear-gradient-9);}.cls-11{fill:url(#linear-gradient-10);}.cls-12{fill:url(#linear-gradient-11);}.cls-13{fill:url(#linear-gradient-12);}.cls-14{fill:url(#linear-gradient-13);}.cls-15{stroke:#000;stroke-width:5.11px;}.cls-16{fill:#336791;}.cls-17,.cls-18{fill:none;stroke-linecap:round;stroke-width:1.7px;}.cls-17,.cls-18,.cls-19,.cls-20{stroke:#fff;}.cls-17{stroke-linejoin:round;}.cls-18{stroke-linejoin:bevel;}.cls-19,.cls-20,.cls-21,.cls-23{fill:#fff;}.cls-19{stroke-width:0.57px;}.cls-20{stroke-width:0.29px;}.cls-21{font-size:35px;}.cls-21,.cls-23{font-family:Helvetica-Light, Helvetica;font-weight:300;}.cls-22{font-family:Helvetica-Bold, Helvetica;font-weight:700;}.cls-23{font-size:16px;}</style><linearGradient id="linear-gradient" x1="206.44" y1="286.69" x2="130.27" y2="158.12" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4a519d"/><stop offset="1" stop-color="#643e99"/></linearGradient><linearGradient id="linear-gradient-2" x1="507.22" y1="289.91" x2="430.57" y2="160.52" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-3" x1="505.78" y1="463.51" x2="655.22" y2="463.51" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#5a96bd"/><stop offset="1" stop-color="#5997bd"/></linearGradient><linearGradient id="linear-gradient-4" x1="282.24" y1="332.89" x2="360.13" y2="204.7" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#47539d"/><stop offset="1" stop-color="#534b9b"/></linearGradient><linearGradient id="linear-gradient-5" x1="285.87" y1="154.1" x2="210.32" y2="283.03" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#7c5da9"/><stop offset="1" stop-color="#686cac"/></linearGradient><linearGradient id="linear-gradient-6" x1="733.76" y1="142.12" x2="658.21" y2="271.05" gradientTransform="translate(1310.01 397) rotate(180)" xlink:href="#linear-gradient-5"/><linearGradient id="linear-gradient-7" x1="655.22" y1="345.3" x2="710.53" y2="345.3" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4e5ea3"/><stop offset="1" stop-color="#4e5ea3"/></linearGradient><linearGradient id="linear-gradient-8" x1="91.81" y1="377.04" x2="147.13" y2="377.04" xlink:href="#linear-gradient-7"/><linearGradient id="linear-gradient-9" x1="206.9" y1="377.04" x2="356.34" y2="377.04" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3e6ba6"/><stop offset="1" stop-color="#3d6ba6"/></linearGradient><linearGradient id="linear-gradient-10" x1="356.34" y1="377.04" x2="505.78" y2="377.04" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4773ab"/><stop offset="1" stop-color="#4a71ab"/></linearGradient><linearGradient id="linear-gradient-11" x1="505.78" y1="377.04" x2="655.22" y2="377.04" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#396ea7"/><stop offset="1" stop-color="#3e6aa6"/></linearGradient><linearGradient id="linear-gradient-12" x1="356.34" y1="290.76" x2="505.78" y2="290.76" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#535ba3"/><stop offset="1" stop-color="#535ca3"/></linearGradient><linearGradient id="linear-gradient-13" x1="356.34" y1="463.32" x2="505.78" y2="463.32" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1a73a6"/><stop offset="1" stop-color="#1e71a5"/></linearGradient></defs><g id="Layer_2" data-name="Layer 2"><rect class="cls-1" width="768" height="668" rx="10"/></g><g id="Layer_1" data-name="Layer 1"><polygon class="cls-2" points="206.9 204.49 206.9 290.76 132.19 247.63 57.47 204.49 132.19 161.35 206.9 118.21 206.9 204.49"/><polygon class="cls-3" points="505.78 204.49 505.78 290.76 431.06 247.63 356.34 204.49 431.06 161.35 505.78 118.21 505.78 204.49"/><polygon class="cls-4" points="655.22 463.51 655.22 549.79 580.5 506.65 505.78 463.51 580.5 420.37 655.22 377.24 655.22 463.51"/><polygon class="cls-5" points="356.34 290.76 356.34 377.04 281.62 333.9 206.9 290.76 281.62 247.63 356.34 204.49 356.34 290.76"/><polygon class="cls-6" points="206.9 204.49 206.9 118.21 281.62 161.35 356.34 204.49 281.62 247.63 206.9 290.76 206.9 204.49"/><polygon class="cls-7" points="655.22 204.49 655.22 290.76 580.5 247.63 505.78 204.49 580.5 161.35 655.22 118.21 655.22 204.49"/><polygon class="cls-8" points="655.22 345.3 655.22 313.36 682.88 329.33 710.53 345.3 682.88 361.27 655.22 377.24 655.22 345.3"/><polygon class="cls-9" points="91.81 377.04 91.81 345.11 119.47 361.08 147.13 377.04 119.47 393.01 91.81 408.98 91.81 377.04"/><polygon class="cls-10" points="206.9 377.04 206.9 290.76 281.62 333.9 356.34 377.04 281.62 420.18 206.9 463.32 206.9 377.04"/><pLine truncated

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

+4 -4
View File
@@ -5,11 +5,11 @@
"repository": "https://github.com/postgres/pgadmin4.git",
"author": "pgAdmin Development Team (https://www.pgadmin.org/)",
"license": "PostgreSQL",
"chromium-args": "--disable-popup-blocking",
"chromium-args": "--disable-popup-blocking --disable-gpu",
"user-agent": "Nwjs:%nwver-%osinfo-%chromium_ver",
"window": {
"width": 440,
"height": 170,
"width": 750,
"height": 600,
"toolbar": false,
"fullscreen": false,
"frame": false,
@@ -24,7 +24,7 @@
},
"devDependencies": {
"eslint": "^6.3.0",
"nw": "^0.59.0"
"nw": "0.61.0"
},
"scripts": {
"linter": "yarn eslint --no-eslintrc -c .eslintrc.js --ext .js ."
+16
View File
@@ -54,6 +54,22 @@
</div>
</div>
</div>
<div class="card shadow-sm mt-3">
<div class="card-header h6">Open Documentation</div>
<div class="card-body">
<div class="form-group">
<label> By checking this option, all documentation links will open in the default browser instead of in a new window.
</label>
</div>
<div class="form-inline">
<div class="form-check mr-3">
<label class="form-check-label mr-2" for="fixedPortCheck">Open Documentation in Default Browser?</label>
<input type="checkbox" class="form-check-input" id="openDocsInBrowser"
data-name="open_docs_in_browser"/>
</div>
</div>
</div>
</div>
<div class="p-2 d-flex fixed-bottom shadow bg-white">
<div class="mr-auto" id="status-text"></div>
<div class="ml-auto">
+1 -1
View File
@@ -8,7 +8,7 @@
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 14px;
margin: 0 10px;
background-color: #fff;
background-color: #e9f8ff;
}
.bg {
+10 -2
View File
@@ -35,6 +35,7 @@ function saveConfiguration() {
misc.ConfigureStore.set('fixedPort', document.getElementById('fixedPortCheck').checked);
misc.ConfigureStore.set('portNo', parseInt(document.getElementById('portNo').value));
misc.ConfigureStore.set('connectionTimeout', parseInt(document.getElementById('timeOut').value));
misc.ConfigureStore.set('openDocsInBrowser', document.getElementById('openDocsInBrowser').checked);
misc.ConfigureStore.saveConfig();
@@ -61,8 +62,9 @@ function enableDisableSaveButton() {
let configData = misc.ConfigureStore.getConfigData();
if (configData['fixedPort'] !== document.getElementById('fixedPortCheck').checked ||
configData['portNo'] !== document.getElementById('portNo').value ||
configData['connectionTimeout'] !== document.getElementById('timeOut').value) {
configData['portNo'] != document.getElementById('portNo').value ||
configData['connectionTimeout'] != document.getElementById('timeOut').value ||
configData['openDocsInBrowser'] !== document.getElementById('openDocsInBrowser').checked) {
document.getElementById('btnSave').removeAttribute('disabled');
} else {
document.getElementById('btnSave').setAttribute('disabled', 'disabled');
@@ -85,9 +87,15 @@ configWindow.on('loaded', function() {
document.getElementById('portNo').value = configData['portNo'];
document.getElementById('timeOut').value = configData['connectionTimeout'];
if (configData['openDocsInBrowser']) {
document.getElementById('openDocsInBrowser').checked = true;
} else {
document.getElementById('openDocsInBrowser').checked = false;
}
// Add event listeners
document.getElementById('btnSave').addEventListener('click', checkConfiguration);
document.getElementById('fixedPortCheck').addEventListener('change', onCheckChange);
document.getElementById('portNo').addEventListener('change', enableDisableSaveButton);
document.getElementById('timeOut').addEventListener('change', enableDisableSaveButton);
document.getElementById('openDocsInBrowser').addEventListener('change', enableDisableSaveButton);
});
+5 -5
View File
@@ -147,7 +147,7 @@ const getAvailablePort = (fixedPort) => {
const currentTime = (new Date()).getTime();
const serverLogFile = path.join(getLocalAppDataPath(), 'pgadmin4.' + currentTime.toString() + '.log');
const configFileName = path.join(getAppDataPath(), 'runtime_config.json');
const DEFAULT_CONFIG_DATA = {'fixedPort': false, 'portNo': 5050, 'connectionTimeout': 90, 'zoomLevel': 0};
const DEFAULT_CONFIG_DATA = {'fixedPort': false, 'portNo': 5050, 'connectionTimeout': 90, 'zoomLevel': 0, 'openDocsInBrowser': true};
// This function is used to read the file and return the content
const readServerLog = () => {
@@ -293,8 +293,8 @@ const setZoomEvents = () => {
// This function is used to iterate all open windows and set the zoom level.
const setZoomLevelForAllWindows = () => {
nw.Window.getAll(function(winArray) {
for (var i = 0; i < winArray.length; i++) {
winArray[i].zoomLevel = pgAdminWindowObject.zoomLevel;
for (let arr_val of winArray) {
arr_val.zoomLevel = pgAdminWindowObject.zoomLevel;
}
})
};
@@ -336,9 +336,9 @@ const toggleFullScreen = () => {
// Change the menu label.
var menu_label = pgAdminWindowObject.window.document.querySelector('#mnu_toggle_fullscreen_runtime span').innerHTML;
if (menu_label.indexOf('Enter Full Screen') > 0) {
if (menu_label.indexOf('Enter Full Screen') >= 0) {
pgAdminWindowObject.window.document.querySelector('#mnu_toggle_fullscreen_runtime span').innerHTML = menu_label.replace('Enter', 'Exit');
} else if (menu_label.indexOf('Exit Full Screen') > 0) {
} else if (menu_label.indexOf('Exit Full Screen') >= 0) {
pgAdminWindowObject.window.document.querySelector('#mnu_toggle_fullscreen_runtime span').innerHTML = menu_label.replace('Exit', 'Enter');
}
}
+18 -1
View File
@@ -19,6 +19,8 @@ let serverCheckUrl = null;
let serverPort = 5050;
let docsURLSubStrings = ['www.enterprisedb.com', 'www.postgresql.org', 'www.pgadmin.org', 'help/help'];
// Paths to the rest of the app
let pythonPath = misc.getPythonPath();
let pgadminFile = '../web/pgAdmin4.py';
@@ -101,7 +103,7 @@ function startDesktopMode() {
nw.Window.open('src/html/configure.html', {
'frame': true,
'width': 600,
'height': 420,
'height': 585,
'position': 'center',
'resizable': false,
'focus': true,
@@ -231,6 +233,20 @@ function launchPgAdminWindow() {
// Set the width and height for the new window.
pgadminWindow.on('new-win-policy', function(frame, url, policy) {
if(!frame) {
let openDocsInBrowser = misc.ConfigureStore.get('openDocsInBrowser', true);
let isDocURL = false;
docsURLSubStrings.forEach(function(key) {
if(url.indexOf(key) >= 0) {
isDocURL = true;
}
});
if (openDocsInBrowser && isDocURL) {
// Do not open the window
policy.ignore();
// Open URL in the external browser.
nw.Shell.openExternal(url);
} else {
policy.setNewWindowManifest({
'icon': '../../assets/pgAdmin4.png',
'frame': true,
@@ -240,6 +256,7 @@ function launchPgAdminWindow() {
'width': pgadminWindow.width,
'height': pgadminWindow.height,
});
}
}
});
+4 -4
View File
@@ -1008,10 +1008,10 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
nw@^0.59.0:
version "0.59.0"
resolved "https://registry.yarnpkg.com/nw/-/nw-0.59.0.tgz#c7eff1622c917834b2b31581ba5c386816d98db1"
integrity sha512-cLGZgP+u+nDfgT956Z7timXuyQN8OOi5Ele6OF3yVEkk6CNiMC6m2rblb5aB8y4QNwLf6O+tkt64XxSUPxvutQ==
nw@0.61.0:
version "0.61.0"
resolved "https://registry.yarnpkg.com/nw/-/nw-0.61.0.tgz#c35e80be4ad7a5570659796d66bdc16d11e0e890"
integrity sha512-SazcPW9+kplf7/K2KuTaamOFGtKnnH4Gs/cHHRMf9luTkCGe2cFsnb6/fEP5xvu9tpoW9Z/oUKzj9lZ6kylFWQ==
dependencies:
chalk "~1.1.3"
decompress "^4.2.0"
+2 -2
View File
@@ -43,7 +43,7 @@ APP_ICON = 'pg-icon'
# Application version number components
APP_RELEASE = 6
APP_REVISION = 4
APP_REVISION = 7
# Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string
# for GA releases.
@@ -52,7 +52,7 @@ APP_SUFFIX = ''
# Numeric application version for upgrade checks. Should be in the format:
# [X]XYYZZ, where X is the release version, Y is the revision, with a leading
# zero if needed, and Z represents the suffix, with a leading zero if needed
APP_VERSION_INT = 60400
APP_VERSION_INT = 60700
# DO NOT CHANGE!
# The application version string, constructed from the components
+38
View File
@@ -0,0 +1,38 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
"""Added server id for cloud deployment
Revision ID: 1586db67b98e
Revises: 15c88f765bc8
Create Date: 2022-01-04 13:08:05.484598
"""
from pgadmin.model import db
# revision identifiers, used by Alembic.
revision = '1586db67b98e'
down_revision = '15c88f765bc8'
branch_labels = None
depends_on = None
def upgrade():
db.engine.execute(
'ALTER TABLE process ADD COLUMN server_id INTEGER DEFAULT 0'
)
db.engine.execute(
'ALTER TABLE server ADD COLUMN cloud_status INTEGER DEFAULT 0'
)
def downgrade():
# pgAdmin only upgrades, downgrade not implemented.
pass
+15 -6
View File
@@ -11,6 +11,7 @@
"@babel/eslint-parser": "^7.12.13",
"@babel/eslint-plugin": "^7.12.13",
"@babel/plugin-proposal-object-rest-spread": "^7.10.1",
"@babel/plugin-syntax-jsx": "^7.16.0",
"@babel/preset-env": "^7.10.2",
"@babel/preset-typescript": "^7.8.3",
"@emotion/core": "^10.0.14",
@@ -18,6 +19,7 @@
"@emotion/react": "^11.1.5",
"@emotion/styled": "^10.0.14",
"@emotion/utils": "^1.0.0",
"@svgr/webpack": "^5.5.0",
"@wojtekmaj/enzyme-adapter-react-17": "^0.4.1",
"autoprefixer": "^10.2.4",
"axios-mock-adapter": "^1.17.0",
@@ -40,9 +42,10 @@
"imagemin-pngquant": "^9.0.1",
"imagemin-svgo": "^8.0.0",
"is-docker": "^2.1.1",
"istanbul-instrumenter-loader": "^3.0.1",
"jasmine-core": "^3.6.0",
"jasmine-enzyme": "^7.1.2",
"karma": "^6.3.2",
"karma": "^6.3.15",
"karma-babel-preprocessor": "^8.0.0",
"karma-browserify": "^8.0.0",
"karma-chrome-launcher": "^3.1.0",
@@ -63,7 +66,7 @@
"sass-resources-loader": "^2.2.1",
"style-loader": "^2.0.0",
"stylis": "^4.0.7",
"svgo": "^1.1.1",
"svgo": "^2.7.0",
"svgo-loader": "^2.2.0",
"terser-webpack-plugin": "^5.1.1",
"typescript": "^3.2.2",
@@ -86,11 +89,13 @@
"@material-ui/pickers": "^3.2.10",
"@projectstorm/react-diagrams": "^6.6.1",
"@simonwep/pickr": "^1.5.1",
"@szhsin/react-menu": "^2.2.0",
"@tippyjs/react": "^4.2.0",
"@types/classnames": "^2.2.6",
"@types/react": "^16.7.18",
"@types/react-dom": "^16.0.11",
"acitree": "git+https://github.com/imsurinder90/jquery-aciTree.git#rc.7",
"ajv": "^8.8.2",
"alertifyjs": "git+https://github.com/EnterpriseDB/AlertifyJS/#72c1d794f5b6d4ec13a68d123c08f19021afe263",
"aspen-decorations": "^1.0.2",
"axios": "^0.21.1",
@@ -103,12 +108,14 @@
"bootstrap": "^4.3.1",
"bootstrap-datepicker": "^1.8.0",
"bootstrap4-toggle": "^3.6.1",
"brace": "^0.11.1",
"browserfs": "^1.4.3",
"chart.js": "^2.9.3",
"classnames": "^2.2.6",
"closest": "^0.0.1",
"codemirror": "^5.59.2",
"context-menu": "^2.0.0",
"copy-to-clipboard": "^3.3.1",
"css-loader": "^5.0.1",
"cssnano": "^5.0.2",
"dagre": "^0.8.4",
@@ -120,12 +127,12 @@
"imports-loader": "^2.0.0",
"insert-if": "^1.1.0",
"ip-address": "^7.1.0",
"istanbul-instrumenter-loader": "^3.0.1",
"jquery": "^3.6.0",
"jquery-contextmenu": "^2.9.2",
"jquery-ui": "^1.13.0",
"json-bignumber": "^1.0.1",
"jsoneditor": "^9.5.4",
"jsoneditor-react": "^3.1.1",
"karma-coverage": "^2.0.3",
"leaflet": "^1.5.1",
"lodash": "4.*",
@@ -138,9 +145,10 @@
"path-fx": "^2.0.0",
"pathfinding": "^0.4.18",
"paths-js": "^0.4.9",
"pgadmin4-tree": "git+https://github.com/EnterpriseDB/pgadmin4-treeview/#90e62d4371d3d25a957b3ffc7c6cb81a928da06f",
"pgadmin4-tree": "git+https://github.com/EnterpriseDB/pgadmin4-treeview/#bf7ac7be65898883e3e05c9733426152a1da6422",
"postcss": "^8.2.15",
"raf": "^3.4.1",
"rc-dock": "^3.2.9",
"react": "^17.0.1",
"react-aspen": "^1.1.0",
"react-checkbox-tree": "^1.7.2",
@@ -148,6 +156,7 @@
"react-draggable": "^4.4.4",
"react-select": "^4.2.1",
"react-table": "^7.6.3",
"react-timer-hook": "^3.0.5",
"react-virtualized-auto-sizer": "^1.0.6",
"react-window": "^1.8.5",
"select2": "^4.0.13",
@@ -163,7 +172,7 @@
"underscore": "^1.13.1",
"url-loader": "^1.1.2",
"valid-filename": "^2.0.1",
"webcabin-docker": "git+https://github.com/EnterpriseDB/wcDocker/#5a5a1c96b89e965cb4900520ca7d5740e6a53afa",
"webcabin-docker": "git+https://github.com/EnterpriseDB/wcDocker/#40d025e0d86ee3cf058a52e01d2042113f134cdd",
"wkx": "^0.5.0",
"xterm": "^4.11.0",
"xterm-addon-fit": "^0.5.0",
@@ -177,7 +186,7 @@
"bundle:watch": "yarn run linter && yarn run webpacker:watch",
"bundle:dev": "yarn run linter && yarn run webpacker",
"bundle:analyze": "cross-env NODE_ENV=production ANALYZE=true yarn run bundle:dev",
"bundle": "cross-env NODE_ENV=production yarn run bundle:dev",
"bundle": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=8192 yarn run bundle:dev",
"test:karma-once": "yarn run linter && yarn run karma start --single-run",
"test:karma": "yarn run linter && yarn run karma start",
"test:karma-coverage": "yarn run test:karma-once --reporters coverage,progress",
+96
View File
@@ -0,0 +1,96 @@
#!/usr/bin/env python3
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
import argparse
import os
def load_providers():
""" Loads all the providers """
providers = {}
path = os.path.dirname(os.path.realpath(__file__))
modules = os.listdir(path + '/providers')
for filename in modules:
filename = path + '/providers/' + filename
if os.path.isfile(filename):
basename = os.path.basename(filename)
base, extension = os.path.splitext(basename)
if extension == ".py" and not basename.startswith("_"):
module = __import__("providers." + basename[:-3],
fromlist=["providers"])
provider = module.load()
providers[basename[:-3]] = provider
return providers
def get_args(providers):
""" Creates the parsers and returns the args """
# Create the top-level parser
parser = argparse.ArgumentParser(prog='pgacloud.py')
parser.add_argument('--debug', action=argparse.BooleanOptionalAction,
default=True, help='send debug messages to stderr')
# Create the provider sub-parser
parsers = parser.add_subparsers(help='provider help', dest='provider')
# Load the provider parsers
for provider in providers:
providers[provider].init_args(parsers)
args = parser.parse_args()
return parser, args
def execute_command(providers, parser, args):
""" Executes the command in the provider """
# Switch - for _ in command names. We use - in the CLI syntax for ease of
# use, but we need an _ in Python function names
if 'command' in args and args.command is not None:
args.command = args.command.replace('-', '_')
# Figure out what provider the command was for (if any) and call the
# relevant function. If we don't get a match, print the help
if args.provider in providers and \
'command' in args and \
args.command is not None:
command = providers[args.provider].commands()[args.command]
command(args)
else:
# If no provider has been given, display the top level help,
# otherwise, call the help() method in the provider
if args.provider is None:
parser.print_help()
else:
command = providers[args.provider].commands()['help']
command()
def main():
""" Entry point """
# Load the providers
providers = load_providers()
# Get the args
parser, args = get_args(providers)
# Execute the command
execute_command(providers, parser, args)
if __name__ == '__main__':
main()
View File
Whitespace-only changes.
+31
View File
@@ -0,0 +1,31 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
class AbsProvider:
""" Abstract provider """
parser = None
def init_args(self, parsers):
"""Not Required."""
pass
def commands(self):
""" Get the list of commands for the current provider. """
attrs = filter(lambda attr: attr.startswith('cmd_'), dir(self))
commands = {}
for attr in attrs:
method = getattr(self, attr)
commands[attr[4:]] = method
return commands
def cmd_help(self):
""" Prints the provider level help """
self.parser.print_help()
+319
View File
@@ -0,0 +1,319 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
""" Amazon RDS PostgreSQL provider """
import os
import time
import boto3
from providers._abstract import AbsProvider
from utils.io import debug, error, output
from utils.misc import get_my_ip, get_random_id
DEL_SEC_GROUP_MSG = 'Deleting security group: {}...'
class RdsProvider(AbsProvider):
def __init__(self):
self._clients = {}
self._access_key = None
self._secret_key = None
self._session_token = None
self._database_pass = None
self._default_region = None
# Get the credentials
if 'AWS_ACCESS_KEY_ID' in os.environ:
self._access_key = os.environ['AWS_ACCESS_KEY_ID']
if 'AWS_SECRET_ACCESS_KEY' in os.environ:
self._secret_key = os.environ['AWS_SECRET_ACCESS_KEY']
if 'AWS_SESSION_TOKEN' in os.environ:
self._session_token = os.environ['AWS_SESSION_TOKEN']
if 'AWS_DATABASE_PASSWORD' in os.environ:
self._database_pass = os.environ['AWS_DATABASE_PASSWORD']
def init_args(self, parsers):
""" Create the command line parser for this provider """
self.parser = parsers.add_parser('rds',
help='Amazon AWS RDS PostgreSQL',
epilog='Credentials are read from '
'~/.aws/config by default and '
'can be overridden in the '
'AWS_ACCESS_KEY_ID and '
'AWS_SECRET_ACCESS_KEY '
'environment variables. '
'The default region is read '
'from ~/.aws/config and will '
'fall back to us-east-1 if '
'not present.')
self.parser.add_argument('--region', default=self._default_region,
help='name of the AWS region (default: {})'
.format(self._default_region))
# Create the command sub-parser
parsers = self.parser.add_subparsers(help='RDS commands',
dest='command')
# Create the create instance command parser
parser_create_instance = parsers.add_parser('create-instance',
help='create a new '
'instance')
parser_create_instance.add_argument('--name', required=True,
help='name of the instance')
parser_create_instance.add_argument('--db-name', default='postgres',
help='name of the default '
'database '
'(default: postgres)')
parser_create_instance.add_argument('--db-password', required=False,
help='password for the database')
parser_create_instance.add_argument('--db-username',
default='postgres',
help='user name for the database '
'(default: postgres)')
parser_create_instance.add_argument('--db-port', type=int,
default=5432,
help='port of the database '
'(default: 5432)')
parser_create_instance.add_argument('--db-version',
default='13.3',
help='version of PostgreSQL '
'to deploy (default: 13.3)')
parser_create_instance.add_argument('--instance-type', required=True,
help='machine type for the '
'instance nodes, e.g. '
'db.m3.large')
parser_create_instance.add_argument('--storage-iops', type=int,
default=0,
help='storage IOPs to allocate '
'(default: 0)')
parser_create_instance.add_argument('--storage-size', type=int,
required=True,
help='storage size in GB')
parser_create_instance.add_argument('--storage-type', default='gp2',
help='storage type for the data '
'database (default: gp2)')
parser_create_instance.add_argument('--public-ip', default='127.0.0.1',
help='Public IP '
'(default: 127.0.0.1)')
# Create the delete instance command parser
parser_delete_instance = parsers.add_parser('delete-instance',
help='delete an instance')
parser_delete_instance.add_argument('--name', required=True,
help='name of the instance')
parser_delete_instance.add_argument('--security-group',
help='name of a security group to'
'delete as well')
##########################################################################
# AWS Helper functions
##########################################################################
def _get_aws_client(self, type, args):
""" Create/cache/return an AWS client object """
if type in self._clients:
return self._clients[type]
session = boto3.Session(
aws_access_key_id=self._access_key,
aws_secret_access_key=self._secret_key,
aws_session_token=self._session_token
)
self._clients['type'] = session.client(type, region_name=args.region)
return self._clients['type']
def _create_security_group(self, args):
""" Create a new security group for the instance """
ec2 = self._get_aws_client('ec2', args)
ip = args.public_ip if args.public_ip else get_my_ip()
ip = ip.split(',')
# Deploy the security group
try:
name = 'pgacloud_{}_{}_{}'.format(args.name,
ip[0].replace('.', '-'),
get_random_id())
debug(args, 'Creating security group: {}...'.format(name))
output({'Creating': 'Creating security group: {}...'.format(name)})
response = ec2.create_security_group(
Description='Inbound access for {} to RDS instance {}'.format(
ip[0], args.name),
GroupName=name
)
except Exception as e:
error(args, str(e))
return response['GroupId']
def _add_ingress_rule(self, args, security_group):
""" Add a local -> PostgreSQL ingress rule to a security group """
ec2 = self._get_aws_client('ec2', args)
ip = args.public_ip if args.public_ip else\
'{}/32'.format(get_my_ip())
port = args.db_port or 5432
IpRanges = []
ip = ip.split(',')
for i in ip:
IpRanges.append({
'CidrIp': i,
'Description': 'pgcloud client {}'.format(i)
})
try:
output({'Adding': 'Adding ingress rule for: {}...'.format(ip)})
debug(args,
'Adding ingress rule for: {}...'.format(ip))
ec2.authorize_security_group_ingress(
GroupId=security_group,
IpPermissions=[
{
'FromPort': port,
'ToPort': port,
'IpProtocol': 'tcp',
'IpRanges': IpRanges
},
]
)
except Exception as e:
error(args, e)
def _create_rds_instance(self, args, security_group):
""" Create an RDS instance """
ec2 = self._get_aws_client('ec2', args)
rds = self._get_aws_client('rds', args)
db_password = self._database_pass if self._database_pass is not None\
else args.db_password
try:
debug(args, 'Creating RDS instance: {}...'.format(args.name))
rds.create_db_instance(DBInstanceIdentifier=args.name,
AllocatedStorage=args.storage_size,
DBName=args.db_name,
Engine='postgres',
Port=args.db_port,
EngineVersion=args.db_version,
StorageType=args.storage_type,
StorageEncrypted=True,
Iops=args.storage_iops,
AutoMinorVersionUpgrade=True,
MultiAZ=False,
MasterUsername=args.db_username,
MasterUserPassword=db_password,
DBInstanceClass=args.instance_type,
VpcSecurityGroupIds=[
security_group,
])
except rds.exceptions.DBInstanceAlreadyExistsFault as e:
try:
debug(args, DEL_SEC_GROUP_MSG.format(security_group))
ec2.delete_security_group(GroupId=security_group)
except Exception:
pass
error(args, 'RDS instance {} already exists.'.format(args.name))
except Exception as e:
try:
debug(args, DEL_SEC_GROUP_MSG.format(security_group))
ec2.delete_security_group(GroupId=security_group)
except Exception:
pass
error(args, str(e))
# Wait for completion
running = True
while running:
response = rds.describe_db_instances(
DBInstanceIdentifier=args.name)
db_instance = response['DBInstances'][0]
status = db_instance['DBInstanceStatus']
if status != 'creating' and status != 'backing-up':
running = False
if running:
time.sleep(5)
return response['DBInstances']
def _delete_rds_instance(self, args, name):
""" Delete an RDS instance """
rds = self._get_aws_client('rds', args)
debug(args, 'Deleting RDS instance: {}...'.format(name))
try:
rds.delete_db_instance(
DBInstanceIdentifier=name,
SkipFinalSnapshot=True,
DeleteAutomatedBackups=True
)
except Exception as e:
error(args, str(e))
# Wait for completion
while True:
try:
rds.describe_db_instances(DBInstanceIdentifier=args.name)
except rds.exceptions.DBInstanceNotFoundFault:
return
except Exception as e:
error(args, str(e))
time.sleep(5)
def _delete_security_group(self, args, id):
""" Delete a security group """
ec2 = self._get_aws_client('ec2', args)
debug(args, 'Deleting security group: {}...'.format(id))
try:
ec2.delete_security_group(
GroupId=id
)
except Exception as e:
error(args, str(e))
##########################################################################
# User commands
##########################################################################
def cmd_create_instance(self, args):
""" Create an RDS instance and security group """
security_group = self._create_security_group(args)
self._add_ingress_rule(args, security_group)
instance = self._create_rds_instance(args, security_group)
data = {'instance': {
'Id': instance[0]['DBInstanceIdentifier'],
'Location': instance[0]['AvailabilityZone'],
'SecurityGroupId': security_group,
'Hostname': instance[0]['Endpoint']['Address'],
'Port': instance[0]['Endpoint']['Port'],
'Database': instance[0]['DBName'],
'Username': instance[0]['MasterUsername']
}}
output(data)
def cmd_delete_instance(self, args):
""" Delete an RDS instance and (optionally) a security group """
self._delete_rds_instance(args, args.name)
if args.security_group is not None:
self._delete_security_group(args, args.security_group)
def load():
""" Loads the current provider """
return RdsProvider()
View File
Whitespace-only changes.
+38
View File
@@ -0,0 +1,38 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
import datetime
import json
import sys
import time
def debug(args, message):
""" Print a debug message """
if not args.debug:
return
now = datetime.datetime.now()
print('[{}]: {}'.format(now.strftime("%H:%M:%S"), message),
file=sys.stderr, flush=True)
def error(args, message):
""" Print an error message and exit """
debug(args, message)
output({'error': message})
sys.exit(1)
def output(data):
""" Dump JSON output from a dict """
print(json.dumps(data), flush=True)
+42
View File
@@ -0,0 +1,42 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
import random
import string
import urllib3
import ipaddress
def get_my_ip():
""" Return the public IP of this host """
http = urllib3.PoolManager()
try:
external_ip = http.request('GET', 'https://ident.me').data
except Exception:
try:
external_ip = http.request('GET', 'https://ifconfig.me/ip').data
except Exception:
external_ip = '127.0.0.1'
if type(external_ip) == bytes:
external_ip = external_ip.decode('utf-8')
ip = ipaddress.ip_address(external_ip)
if isinstance(ip, ipaddress.IPv4Address):
return '{}/{}'.format(external_ip, 32)
elif isinstance(ip, ipaddress.IPv6Address):
return '{}/{}'.format(external_ip, 128)
return '{}/{}'.format(external_ip, 32)
def get_random_id():
""" Return a random 10 byte string """
letters = string.ascii_letters + string.digits
return(''.join(random.choice(letters) for _ in range(10)))
+7 -8
View File
@@ -91,7 +91,7 @@ class PgAdmin(Flask):
for key in list(module.__dict__.keys()):
if isinstance(module.__dict__[key], PgAdminModule):
yield module.__dict__[key]
except Exception as _:
except Exception:
return []
@property
@@ -372,7 +372,7 @@ def create_app(app_name=None):
os.environ[
'CORRUPTED_DB_BACKUP_FILE'] = backup_file_name
app.logger.info('Database migration completed.')
except Exception as e:
except Exception:
app.logger.error('Database migration failed')
app.logger.error(traceback.format_exc())
raise RuntimeError('Migration failed')
@@ -384,7 +384,7 @@ def create_app(app_name=None):
try:
db_upgrade(app)
os.environ['CORRUPTED_DB_BACKUP_FILE'] = ''
except Exception as e:
except Exception:
backup_db_file()
# check all tables are present in the db.
@@ -785,11 +785,10 @@ def create_app(app_name=None):
)
abort(401)
login_user(user)
elif config.SERVER_MODE and \
not current_user.is_authenticated and \
request.endpoint in ('redirects.index', 'security.login'):
if app.PGADMIN_EXTERNAL_AUTH_SOURCE in [KERBEROS, WEBSERVER]:
return authenticate.login()
elif config.SERVER_MODE and not current_user.is_authenticated and \
request.endpoint in ('redirects.index', 'security.login') and \
app.PGADMIN_EXTERNAL_AUTH_SOURCE in [KERBEROS, WEBSERVER]:
return authenticate.login()
# if the server is restarted the in memory key will be lost
# but the user session may still be active. Logout the user
# to get the key again when login
+5 -1
View File
@@ -211,10 +211,14 @@ class AuthSourceManager:
def validate(self):
"""Validate through all the sources."""
err_msg = None
for src in self.auth_sources:
source = get_auth_sources(src)
if source.validate(self.form):
status, err_msg = source.validate(self.form)
if status:
return True
if err_msg:
flash(err_msg, 'warning')
return False
def authenticate(self):
+6 -6
View File
@@ -54,14 +54,14 @@ class BaseAuthentication(object):
form.email.errors = list(form.email.errors)
form.email.errors.append(gettext(
self.messages('EMAIL_NOT_PROVIDED')))
return False
return False, None
if password is None or password == '':
form.password.errors = list(form.password.errors)
form.password.errors.append(
self.messages('PASSWORD_NOT_PROVIDED'))
return False
return False, None
return True
return True, None
def login(self, form):
username = form.data['email']
@@ -99,10 +99,10 @@ class InternalAuthentication(BaseAuthentication):
"""User validation"""
# validate the email id first
if not validate_email(form.data['email']):
flash(self.messages('INVALID_EMAIL'), 'warning')
return False
return False, self.messages('INVALID_EMAIL')
# Flask security validation
return form.validate_on_submit()
submit = form.validate_on_submit()
return submit, None
def authenticate(self, form):
username = form.data['email']
+1 -1
View File
@@ -163,7 +163,7 @@ class KerberosAuthentication(BaseAuthentication):
return gettext("kerberos")
def validate(self, form):
return True
return True, None
def authenticate(self, frm):
+18 -19
View File
@@ -12,7 +12,7 @@
import ssl
import config
from ldap3 import Connection, Server, Tls, ALL, ALL_ATTRIBUTES, ANONYMOUS,\
SIMPLE
SIMPLE, AUTO_BIND_TLS_BEFORE_BIND, AUTO_BIND_NO_TLS
from ldap3.core.exceptions import LDAPSocketOpenError, LDAPBindError,\
LDAPInvalidScopeError, LDAPAttributeError, LDAPInvalidFilterError,\
LDAPStartTLSError, LDAPSSLConfigurationError
@@ -29,6 +29,9 @@ from pgadmin.utils.constants import LDAP
ERROR_SEARCHING_LDAP_DIRECTORY = gettext(
"Error searching the LDAP directory: {}")
ERROR_CONNECTING_LDAP_SERVER = gettext(
"Error connecting to the LDAP server: {}\n")
class LDAPAuthentication(BaseAuthentication):
"""Ldap Authentication Class"""
@@ -105,45 +108,41 @@ class LDAPAuthentication(BaseAuthentication):
if not status:
return status, server
auto_bind = AUTO_BIND_TLS_BEFORE_BIND if self.start_tls \
else AUTO_BIND_NO_TLS
# Create the connection
try:
if self.anonymous_bind:
self.conn = Connection(server,
auto_bind=True,
auto_bind=auto_bind,
authentication=ANONYMOUS
)
else:
self.conn = Connection(server,
user=self.bind_user,
password=self.bind_pass,
auto_bind=True,
auto_bind=auto_bind,
authentication=SIMPLE
)
except LDAPSocketOpenError as e:
current_app.logger.exception(
"Error connecting to the LDAP server: {}\n".format(e))
return False, gettext("Error connecting to the LDAP server: {}\n"
).format(e.args[0])
ERROR_CONNECTING_LDAP_SERVER.format(e))
return False, ERROR_CONNECTING_LDAP_SERVER.format(e.args[0])
except LDAPBindError as e:
current_app.logger.exception(
"Error binding to the LDAP server.")
return False, gettext("Error binding to the LDAP server.")
except LDAPStartTLSError as e:
current_app.logger.exception(
"Error starting TLS: {}\n".format(e))
return False, gettext("Error starting TLS: {}\n"
).format(e.args[0])
except Exception as e:
current_app.logger.exception(
"Error connecting to the LDAP server: {}\n".format(e))
return False, gettext("Error connecting to the LDAP server: {}\n"
).format(e.args[0])
# Enable TLS if STARTTLS is configured
if self.start_tls:
try:
self.conn.start_tls()
except LDAPStartTLSError as e:
current_app.logger.exception(
"Error starting TLS: {}\n".format(e))
return False, gettext("Error starting TLS: {}\n"
).format(e.args[0])
ERROR_CONNECTING_LDAP_SERVER.format(e))
return False, ERROR_CONNECTING_LDAP_SERVER.format(e.args[0])
return True, None
+1 -1
View File
@@ -115,7 +115,7 @@ class OAuth2Authentication(BaseAuthentication):
return self.oauth2_config[self.oauth2_current_client]['OAUTH2_NAME']
def validate(self, form):
return True
return True, None
def login(self, form):
profile = self.get_user_profile()
+2 -2
View File
@@ -74,7 +74,7 @@ class WebserverAuthentication(BaseAuthentication):
return gettext("webserver")
def validate(self, form):
return True
return True, None
def get_user(self):
username = request.environ.get(config.WEBSERVER_REMOTE_USER)
@@ -91,7 +91,7 @@ class WebserverAuthentication(BaseAuthentication):
"Webserver authenticate failed.")
session['pass_enc_key'] = ''.join(
(random.choice(string.ascii_lowercase) for x in range(10)))
(random.choice(string.ascii_lowercase) for _ in range(10)))
useremail = request.environ.get('mail')
if not useremail:
useremail = ''
+1 -1
View File
@@ -763,7 +763,7 @@ def index():
mfa_enabled=is_mfa_enabled(),
login_url=login_url,
_=gettext,
auth_only_internal=auth_only_internal
auth_only_internal=auth_only_internal,
))
# Set the language cookie after login, so next time the user will have that
@@ -112,6 +112,10 @@ def server_icon_and_background(is_connected, manager, server):
return 'icon-shared-server-not-connected{0}'.format(
server_background_color
)
elif server.cloud_status == -1:
return 'icon-server-cloud-deploy{0}'.format(
server_background_color
)
else:
return 'icon-server-not-connected{0}'.format(
server_background_color
@@ -256,7 +260,8 @@ class ServerModule(sg.ServerGroupPluginModule):
user_name=server.username,
shared=server.shared,
is_kerberos_conn=bool(server.kerberos_conn),
gss_authenticated=manager.gss_authenticated
gss_authenticated=manager.gss_authenticated,
cloud_status=server.cloud_status
)
@property
@@ -998,7 +1003,8 @@ class ServerNode(PGChildNodeView):
'tunnel_authentication': tunnel_authentication,
'kerberos_conn': bool(server.kerberos_conn),
'gss_authenticated': manager.gss_authenticated,
'gss_encrypted': manager.gss_encrypted
'gss_encrypted': manager.gss_encrypted,
'cloud_status': server.cloud_status
}
return ajax_response(response)
@@ -1512,10 +1518,10 @@ class ServerNode(PGChildNodeView):
# Check if any psql terminal is running for the current disconnecting
# server. If any terminate the psql tool connection.
if 'sid_soid_mapping' in current_app.config and str(sid) in \
current_app.config['sid_soid_mapping']:
if str(sid) in current_app.config['sid_soid_mapping']:
for i in current_app.config['sid_soid_mapping'][str(sid)]:
sio.emit('disconnect-psql', namespace='/pty', to=i)
current_app.config['sid_soid_mapping'] and \
str(sid) in current_app.config['sid_soid_mapping']:
for i in current_app.config['sid_soid_mapping'][str(sid)]:
sio.emit('disconnect-psql', namespace='/pty', to=i)
status = manager.release()
@@ -88,7 +88,7 @@ define('pgadmin.node.cast', [
}),
getSchema: function(treeNodeInfo, itemNodeData){
let schema = new CastSchema({
return new CastSchema({
getTypeOptions: ()=>getNodeAjaxOptions('get_type', this, treeNodeInfo, itemNodeData),
getFuncOptions: (srcTyp, trgtyp) =>
{
@@ -113,15 +113,14 @@ define('pgadmin.node.cast', [
.catch((err)=>{
reject(err);
});
}else{
let data = [];
} else {
data = [];
resolve(data);
}
});
},
},
);
return schema;
},
});
@@ -10,7 +10,7 @@ import gettext from 'sources/gettext';
import BaseUISchema from 'sources/SchemaView/base_schema.ui';
import { isEmptyString } from 'sources/validators';
export default class CastSchema extends BaseUISchema {
constructor(fieldOptions={}, initValues) {
constructor(fieldOptions={}, initValues={}) {
super({
name: undefined, // Name of the cast
encoding: 'UTF8',
@@ -29,6 +29,16 @@ export default class CastSchema extends BaseUISchema {
return 'oid';
}
getCastName(state) {
var srctype = state.srctyp;
var trgtype = state.trgtyp;
if(srctype != undefined && srctype != '' &&
trgtype != undefined && trgtype != '')
return state.name = srctype+'->'+trgtype;
else
return state.name = '';
}
get baseFields() {
let obj = this;
return [{
@@ -53,13 +63,7 @@ export default class CastSchema extends BaseUISchema {
* target type are set, if yes then fetch values from both
* controls and generate cast name
*/
var srctype = state.srctyp;
var trgtype = state.trgtyp;
if(srctype != undefined && srctype != '' &&
trgtype != undefined && trgtype != '')
return state.name = srctype+'->'+trgtype;
else
return state.name = '';
return obj.getCastName(state);
},
},
@@ -83,13 +87,7 @@ export default class CastSchema extends BaseUISchema {
* target type are set, if yes then fetch values from both
* controls and generate cast name
*/
var srctype = state.srctyp;
var trgtype = state.trgtyp;
if(srctype != undefined && srctype != '' &&
trgtype != undefined && trgtype != '')
return state.name = srctype+'->'+trgtype;
else
return state.name = '';
return obj.getCastName(state);
},
},
/*
@@ -172,8 +170,7 @@ export default class CastSchema extends BaseUISchema {
setError('srctyp', errmsg);
return true;
} else {
errmsg = null;
setError('srctyp', errmsg);
setError('srctyp', null);
}
if (isEmptyString(state.trgtyp)) {
@@ -181,8 +178,7 @@ export default class CastSchema extends BaseUISchema {
setError('trgtyp', errmsg);
return true;
} else {
errmsg = null;
setError('trgtyp', errmsg);
setError('trgtyp', null);
}
return false;
}
@@ -174,7 +174,8 @@ class EventTriggerView(PGChildNodeView, SchemaDiffObjectCompare):
'fopts': [{'get': 'get_event_funcs'}, {'get': 'get_event_funcs'}]
})
keys_to_ignore = ['oid', 'xmin', 'oid-2', 'eventfuncoid']
keys_to_ignore = ['oid', 'xmin', 'oid-2', 'eventfuncoid', 'schemaoid',
'source']
def check_precondition(f):
"""
@@ -14,7 +14,7 @@ import { isEmptyString } from 'sources/validators';
export default class EventTriggerSchema extends BaseUISchema {
constructor(fieldOptions={}, initValues) {
constructor(fieldOptions={}, initValues={}) {
super({
oid: undefined,
name: undefined,
@@ -118,14 +118,12 @@ export default class EventTriggerSchema extends BaseUISchema {
setError('eventfunname', errmsg);
return true;
} else {
errmsg = null;
setError('eventfunname', errmsg);
setError('eventfunname', null);
}
} else {
errmsg = null;
_.each(['eventfunname'], (item) => {
setError(item, errmsg);
setError(item, null);
});
}
}
@@ -120,6 +120,8 @@ class ExtensionView(PGChildNodeView, SchemaDiffObjectCompare):
'children': [{'get': 'children'}]
})
keys_to_ignore = ['oid', 'oid-2', 'owner']
def check_precondition(f):
"""
This function will behave as a decorator which will checks
@@ -201,9 +201,9 @@ define('pgadmin.node.extension', [
}),
getSchema: (treeNodeInfo, itemNodeData)=>{
let nodeObj = pgAdmin.Browser.Nodes['extension'];
let schema = new ExtensionsSchema(
return new ExtensionsSchema(
{
extensionsList:()=>getNodeAjaxOptions('avails', nodeObj, treeNodeInfo, itemNodeData, { cacheLevel: 'server'},
extensionsList:()=>getNodeAjaxOptions('avails', nodeObj, treeNodeInfo, itemNodeData, { cacheLevel: 'server'},
(data)=>{
let res = [];
if (data && _.isArray(data)) {
@@ -216,7 +216,6 @@ define('pgadmin.node.extension', [
schemaList:()=>getNodeListByName('schema', treeNodeInfo, itemNodeData)
}
);
return schema;
}
});
}
@@ -166,8 +166,7 @@ export default class ExtensionsSchema extends BaseUISchema {
setError('name', errmsg);
return true;
} else {
errmsg = null;
setError('name', errmsg);
setError('name', null);
}
return false;
}
@@ -12,7 +12,7 @@ import BaseUISchema from 'sources/SchemaView/base_schema.ui';
import OptionsSchema from '../../../../../static/js/options.ui';
export default class ForeignServerSchema extends BaseUISchema {
constructor(getPrivilegeRoleSchema, fieldOptions={}, initValues) {
constructor(getPrivilegeRoleSchema, fieldOptions={}, initValues={}) {
super({
name: undefined,
fsrvtype: undefined,
@@ -83,4 +83,4 @@ export default class ForeignServerSchema extends BaseUISchema {
}
];
}
}
}
@@ -25,6 +25,7 @@ from pgadmin.utils.driver import get_driver
from config import PG_DEFAULT_DRIVER
from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry
from pgadmin.tools.schema_diff.compare import SchemaDiffObjectCompare
from pgadmin.utils.constants import PGADMIN_STRING_SEPARATOR
class UserMappingModule(CollectionNodeModule):
@@ -916,7 +917,14 @@ class UserMappingView(PGChildNodeView, SchemaDiffObjectCompare):
# the empty list.
if 'umoptions' in data and data['umoptions'] is None:
data['umoptions'] = []
res[row['name']] = data
mapping_name = row['name']
if 'srvname' in data:
mapping_name = \
row['name'] + PGADMIN_STRING_SEPARATOR + \
data['srvname']
res[mapping_name] = data
return res
@@ -12,7 +12,7 @@ import BaseUISchema from 'sources/SchemaView/base_schema.ui';
import OptionsSchema from '../../../../../../static/js/options.ui';
export default class UserMappingSchema extends BaseUISchema {
constructor(fieldOptions={}, initValues) {
constructor(fieldOptions={}, initValues={}) {
super({
name: undefined,
is_sys_obj: undefined,
@@ -53,4 +53,4 @@ export default class UserMappingSchema extends BaseUISchema {
}
];
}
}
}
@@ -5,7 +5,7 @@ FROM pg_catalog.pg_foreign_server srv
LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=srv.oid AND des.objsubid=0 AND des.classoid='pg_foreign_server'::regclass)
WHERE srv.oid = {{fserid}}::oid
{% elif fsid or umid %}
SELECT u.umid AS oid, u.usename AS name, u.srvid AS fsid, umoptions AS umoptions, fs.srvfdw AS fdwid
SELECT u.umid AS oid, u.usename AS name, fs.srvname, u.srvid AS fsid, umoptions AS umoptions, fs.srvfdw AS fdwid
FROM pg_catalog.pg_user_mappings u
LEFT JOIN pg_catalog.pg_foreign_server fs ON fs.oid = u.srvid
{% if fsid %} WHERE u.srvid = {{fsid}}::oid {% endif %} {% if umid %} WHERE u.umid= {{umid}}::oid {% endif %}
@@ -12,7 +12,7 @@ import BaseUISchema from 'sources/SchemaView/base_schema.ui';
import OptionsSchema from '../../../../static/js/options.ui';
export default class ForeignDataWrapperSchema extends BaseUISchema {
constructor(getPrivilegeRoleSchema, fieldOptions={}, initValues) {
constructor(getPrivilegeRoleSchema, fieldOptions={}, initValues={}) {
super({
name: undefined,
fdwowner: undefined,
@@ -104,7 +104,7 @@ define('pgadmin.node.language', [
}),
getSchema: function(treeNodeInfo, itemNodeData){
let schema = new LanguageSchema(
return new LanguageSchema(
(privileges)=>getNodePrivilegeRoleSchema(this, treeNodeInfo, itemNodeData, privileges),
{
lan_functions: ()=>getNodeAjaxOptions('get_functions', this, treeNodeInfo, itemNodeData),
@@ -116,7 +116,6 @@ define('pgadmin.node.language', [
node_info: treeNodeInfo.server,
},
);
return schema;
},
});
}
@@ -13,7 +13,7 @@ import SecLabelSchema from '../../../../static/js/sec_label.ui';
import _ from 'lodash';
export default class LanguageSchema extends BaseUISchema {
constructor(getPrivilegeRoleSchema, fieldOptions={}, node_info, initValues) {
constructor(getPrivilegeRoleSchema, fieldOptions={}, node_info={}, initValues={}) {
super({
name: undefined,
lanowner: (node_info) ? node_info['node_info'].user.name: undefined,
@@ -38,13 +38,10 @@ export default class LanguageSchema extends BaseUISchema {
}
// This function check whether the server is less than 13 or not.
isLessThan13(){
if(!_.isUndefined(this.node_info)
return !_.isUndefined(this.node_info)
&& !_.isUndefined(this.node_info['node_info'])
&& !_.isUndefined(this.node_info['node_info'].version)
&& this.node_info['node_info'].version < 130000)
{ return true; }
else{ return false; }
&& this.node_info['node_info'].version < 130000;
}
isDisabled(state){
if (this.templateList.some(template => template.tmplname === state.name)){
@@ -228,8 +225,7 @@ export default class LanguageSchema extends BaseUISchema {
setError('lanproc', errmsg);
return true;
} else {
errmsg = null;
setError('lanproc', errmsg);
setError('lanproc', null);
}
return false;
}
@@ -148,7 +148,7 @@ define('pgadmin.node.publication', [
}),
getSchema: function(treeNodeInfo, itemNodeData){
let schema = new PublicationSchema(
return new PublicationSchema(
{
publicationTable: ()=>getNodeAjaxOptions('get_tables', this, treeNodeInfo, itemNodeData),
role:()=>getNodeListByName('role', treeNodeInfo, itemNodeData),
@@ -156,7 +156,6 @@ define('pgadmin.node.publication', [
node_info: treeNodeInfo.server,
},
);
return schema;
},
});
@@ -56,7 +56,7 @@ export class DefaultWithSchema extends BaseUISchema {
}
export default class PublicationSchema extends BaseUISchema {
constructor(fieldOptions={}, node_info, initValues) {
constructor(fieldOptions={}, node_info={}, initValues={}) {
super({
name: undefined,
pubowner: (node_info) ? node_info['node_info'].user.name: undefined,
@@ -77,8 +77,7 @@ define('pgadmin.node.aggregate', [
],
}),
getSchema: ()=>{
let schema = new AggregateSchema();
return schema;
return new AggregateSchema();
}
});
}
@@ -11,7 +11,7 @@ import BaseUISchema from 'sources/SchemaView/base_schema.ui';
import gettext from 'sources/gettext';
export default class AggregateSchema extends BaseUISchema {
constructor(fieldOptions = {},initValues) {
constructor(fieldOptions = {},initValues={}) {
super({
name: undefined,
oid: undefined,
@@ -12,7 +12,7 @@ import BaseUISchema from 'sources/SchemaView/base_schema.ui';
export default class CatalogObjectColumnSchema extends BaseUISchema {
constructor(fieldOptions={}, initValues) {
constructor(fieldOptions={}, initValues={}) {
super({
attname: undefined,
attowner: undefined,
@@ -107,7 +107,7 @@ define('pgadmin.node.collation', [
}),
getSchema: (treeNodeInfo, itemNodeData)=>{
let nodeObj = pgAdmin.Browser.Nodes['collation'];
let schema = new CollationSchema(
return new CollationSchema(
{
rolesList: ()=>getNodeListByName('role', treeNodeInfo, itemNodeData, {cacheLevel: 'server'}),
schemaList: ()=>getNodeListByName('schema', treeNodeInfo, itemNodeData, {cacheLevel: 'database'}),
@@ -118,7 +118,6 @@ define('pgadmin.node.collation', [
schema: ('schema' in treeNodeInfo)? treeNodeInfo.schema.label : ''
}
);
return schema;
}
});
}
@@ -12,7 +12,7 @@ import gettext from 'sources/gettext';
import { isEmptyString } from 'sources/validators';
export default class CollationSchema extends BaseUISchema {
constructor(fieldOptions = {},initValues) {
constructor(fieldOptions = {},initValues={}) {
super({
name: undefined,
oid: undefined,
@@ -67,7 +67,7 @@ export class DomainConstSchema extends BaseUISchema {
}
export default class DomainSchema extends BaseUISchema {
constructor(fieldOptions={}, initValues) {
constructor(fieldOptions={}, initValues={}) {
super({
name: undefined,
oid: undefined,
@@ -19,7 +19,7 @@ import { getNodeAjaxOptions } from '../../../../../../../static/js/node_ajax';
export default class ForeignTableSchema extends BaseUISchema {
constructor(getPrivilegeRoleSchema, getVariableSchema, getColumns, fieldOptions={}, initValues) {
constructor(getPrivilegeRoleSchema, getVariableSchema, getColumns, fieldOptions={}, initValues={}) {
super({
name: undefined,
oid: undefined,
@@ -73,7 +73,6 @@ export default class ForeignTableSchema extends BaseUISchema {
return t.value;
}
}
return;
}
@@ -133,9 +132,9 @@ export default class ForeignTableSchema extends BaseUISchema {
if(tabColsResponse) {
tabColsResponse.then((res)=>{
resolve((state)=>{
resolve((tmpstate)=>{
let finalCols = res.map((col)=>obj.columnsObj.getNewData(col));
finalCols = [...state.columns, ...finalCols];
finalCols = [...tmpstate.columns, ...finalCols];
return {
adding_inherit_cols: false,
columns: finalCols,
@@ -156,9 +155,9 @@ export default class ForeignTableSchema extends BaseUISchema {
removeOid = this.getTableOid(tabName);
}
if(removeOid) {
resolve((state)=>{
let finalCols = state.columns;
_.remove(state.columns, (col)=>col.inheritedid==removeOid);
resolve((tmpstate)=>{
let finalCols = tmpstate.columns;
_.remove(tmpstate.columns, (col)=>col.inheritedid==removeOid);
return {
adding_inherit_cols: false,
columns: finalCols
@@ -239,8 +238,7 @@ export default class ForeignTableSchema extends BaseUISchema {
setError('ftsrvname', errmsg);
return true;
} else {
errmsg = null;
setError('ftsrvname', errmsg);
setError('ftsrvname', null);
}
}
@@ -67,7 +67,7 @@ class TokenSchema extends BaseUISchema {
}
export default class FTSConfigurationSchema extends BaseUISchema {
constructor(fieldOptions={}, initValues) {
constructor(fieldOptions={}, initValues={}) {
super({
name: undefined, // FTS Configuration name
owner: undefined, // FTS Configuration owner
@@ -12,7 +12,7 @@ import BaseUISchema from 'sources/SchemaView/base_schema.ui';
import OptionsSchema from '../../../../../static/js/options.ui';
export default class FTSDictionarySchema extends BaseUISchema {
constructor(fieldOptions={}, initValues) {
constructor(fieldOptions={}, initValues={}) {
super({
name: undefined, // FTS Dictionary name
owner: undefined, // FTS Dictionary owner
@@ -11,7 +11,7 @@ import gettext from 'sources/gettext';
import BaseUISchema from 'sources/SchemaView/base_schema.ui';
export default class FTSParserSchema extends BaseUISchema {
constructor(fieldOptions = {}, initValues) {
constructor(fieldOptions = {}, initValues={}) {
super({
name: null,
oid: undefined,
@@ -66,18 +66,7 @@ export default class FTSParserSchema extends BaseUISchema {
controlProps: {
allowClear: true,
filter: (options) => {
let res = [];
if (state && obj.isNew(state)) {
options.forEach((option) => {
if(option && option.label == '') {
return;
}
res.push({ label: option.label, value: option.value });
});
} else {
res = options;
}
return res;
return obj.getFilterOptions(state, options);
}
}
};
@@ -93,18 +82,7 @@ export default class FTSParserSchema extends BaseUISchema {
controlProps: {
allowClear: true,
filter: (options) => {
let res = [];
if (state && obj.isNew(state)) {
options.forEach((option) => {
if(option && option.label == '') {
return;
}
res.push({ label: option.label, value: option.value });
});
} else {
res = options;
}
return res;
return obj.getFilterOptions(state, options);
}
}
};
@@ -120,18 +98,7 @@ export default class FTSParserSchema extends BaseUISchema {
controlProps: {
allowClear: true,
filter: (options) => {
let res = [];
if (state && obj.isNew(state)) {
options.forEach((option) => {
if(option && option.label == '') {
return;
}
res.push({ label: option.label, value: option.value });
});
} else {
res = options;
}
return res;
return obj.getFilterOptions(state, options);
}
}
};
@@ -147,18 +114,7 @@ export default class FTSParserSchema extends BaseUISchema {
controlProps: {
allowClear: true,
filter: (options) => {
let res = [];
if (state && obj.isNew(state)) {
options.forEach((option) => {
if(option && option.label == '') {
return;
}
res.push({ label: option.label, value: option.value });
});
} else {
res = options;
}
return res;
return obj.getFilterOptions(state, options);
}
}
};
@@ -174,18 +130,7 @@ export default class FTSParserSchema extends BaseUISchema {
controlProps: {
allowClear: true,
filter: (options) => {
let res = [];
if (state && obj.isNew(state)) {
options.forEach((option) => {
if(option && option.label == '') {
return;
}
res.push({ label: option.label, value: option.value });
});
} else {
res = options;
}
return res;
return obj.getFilterOptions(state, options);
}
}
};
@@ -11,7 +11,7 @@ import gettext from 'sources/gettext';
import BaseUISchema from 'sources/SchemaView/base_schema.ui';
export default class FTSTemplateSchema extends BaseUISchema {
constructor(fieldOptions = {}, initValues) {
constructor(fieldOptions = {}, initValues={}) {
super({
name: null,
oid: undefined,
@@ -66,18 +66,7 @@ export default class FTSTemplateSchema extends BaseUISchema {
controlProps: {
allowClear: true,
filter: (options) => {
let res = [];
if (state && obj.isNew(state)) {
options.forEach((option) => {
if(option && option.label == '') {
return;
}
res.push({ label: option.label, value: option.value });
});
} else {
res = options;
}
return res;
return obj.getFilterOptions(state, options);
}
}
};
@@ -96,18 +85,7 @@ export default class FTSTemplateSchema extends BaseUISchema {
controlProps: {
allowClear: true,
filter: (options) => {
let res = [];
if (state && obj.isNew(state)) {
options.forEach((option) => {
if(option && option.label == '') {
return;
}
res.push({ label: option.label, value: option.value });
});
} else {
res = options;
}
return res;
return obj.getFilterOptions(state, options);
}
}
};
@@ -139,8 +139,10 @@ define('pgadmin.node.function', [
id: 'pronamespace', label: gettext('Schema'), cell: 'string',
control: 'node-list-by-id', type: 'text', cache_level: 'database',
node: 'schema', disabled: 'isDisabled', mode: ['create', 'edit'],
},
],
},{
id: 'description', label: gettext('Comment'), cell: 'string',
type: 'multiline', disabled: 'isDisabled',
}],
}),
});
Loaded 100 of 460 files, more files were not shown because too many files have changed in this diff. Show more