Compare commits

..
162 Commits
Author SHA1 Message Date
Akshay Joshi 99c688f894 Update version for release 8.6 2024-04-29 13:42:28 +05:30
Khushboo Vashi f4761f55f7 Fixed Multi-Factor Authentication bypass vulnerability (CVE-2024-4215). #7425 2024-04-29 13:41:02 +05:30
Pravesh Sharma e18a8bf620 Fixed issue found during testing of #7163. 2024-04-29 13:12:21 +05:30
Pravesh Sharma 7c6fdcb12e Disabled auto-fill on password fields. #2410 2024-04-29 11:44:17 +05:30
Khushboo Vashi f88c89f3eb Fixed an issue when closing the materialized view data second tab; it raises the error that the 'MViewCommand' object has no attribute 'auto_commit'. 2024-04-26 15:53:15 +05:30
Domenico Sgarbossa 5949696ded Italian translation updated for v8.6 2024-04-26 14:43:17 +05:30
Akshay Joshi f724578463 Fixed API test cases for exec/call procedure. 2024-04-26 13:01:35 +05:30
Khushboo Vashi 2324337149 Trigger the browser tree destroyed event so the consequences of destroying the tree are handled properly. 2024-04-26 11:59:53 +05:30
Akshay Joshi 2dd009eb7c Update message catalogs for version 8.6 2024-04-25 18:03:28 +05:30
Akshay Joshi 92bb931b0a Fixed an issue where incorrect select/exec scripts were generated for functions/procedures. #7334 2024-04-25 17:24:02 +05:30
Khushboo Vashi eeee45e57c For some Debian platforms, the python3-dbus package is available instead of python-dbus. 2024-04-25 15:02:50 +05:30
Khushboo Vashi 10ba029980 Fixed an issue where connection to the database is not automatically re-established after connectivity drop. #7372 2024-04-24 14:37:33 +05:30
Pravesh Sharma fd65f1b644 Fixed all input boxes in pgAdmin to show browser auto-fill only where it is relevant. #2410 2024-04-24 11:27:08 +05:30
Akshay Joshi 9f6ddd3cf9 Fixed violates check constraint issue when creating a pgAgent schedule. #7390 2024-04-23 17:27:11 +05:30
Yogesh Mahajan 673b5ea5a1 Fix the date-time picker broken after MUI5 upgrade. 2024-04-23 17:03:34 +05:30
Khushboo Vashi 84c024f6fa Fixed an issue when closing the view data second tab; it raises the error that the 'ViewCommand' object has no attribute 'auto_commit'. #7384 2024-04-23 14:45:15 +05:30
Akshay Joshi 3e0ade5a59 Fixed an issue where pressing backspace should remove the spaces and not the entire tab width, on enabling 'Use spaces?' in the preferences. #7317 2024-04-22 12:33:38 +05:30
dependabot[bot] db23330939 Python dependency: Bump selenium in /web/regression (#7325)
Bumps [selenium](https://github.com/SeleniumHQ/Selenium) from 4.10.0 to 4.19.0.
- [Release notes](https://github.com/SeleniumHQ/Selenium/releases)
- [Commits](https://github.com/SeleniumHQ/Selenium/compare/selenium-4.10.0...selenium-4.19.0)

---
updated-dependencies:
- dependency-name: selenium
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-18 14:03:28 +05:30
Akshay Joshi bb24c445e6 Update yarn.lock in runtime 2024-04-18 13:03:10 +05:30
dependabot[bot] b44b06591b Javascript dependency: Bump eslint from 8.52.0 to 9.0.0 in /runtime (#7361)
Bumps [eslint](https://github.com/eslint/eslint) from 8.52.0 to 9.0.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.52.0...v9.0.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-18 12:48:45 +05:30
Akshay Joshi b475be93fa Update yarn.lock file 2024-04-18 12:46:00 +05:30
dependabot[bot] 3e47abed8f Python dependency: Bump sphinx from 7.2.6 to 7.3.5 in /tools (#7387)
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 7.2.6 to 7.3.5.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES.rst)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v7.2.6...v7.3.5)

---
updated-dependencies:
- dependency-name: sphinx
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-18 12:15:30 +05:30
Yogesh Mahajan f0185fbe7f Fix issues reported while testing MUI5 library update. 2024-04-17 17:31:55 +05:30
Khushboo Vashi 5f689a56dd Install dbus-python, an in-direct dependency of the Keyring package as a system package for Debian platforms. #7173 2024-04-17 16:21:50 +05:30
Pravesh Sharma 0d1e3f36e1 Revert "Fixed an issue where function arguments were getting enclosed in double quotes if written in upper case. #7222"
This reverts commit fc4b419987.
2024-04-17 11:33:25 +05:30
Aditya Toshniwal 29ccdb3242 Fixed an issue where debugger was not scrolling automatically on stepping. #7275 2024-04-16 15:33:42 +05:30
Akshay Joshi 0546e79aed Made adjustments to ensure the correct version of Authlib is used. #7362 2024-04-16 12:56:42 +05:30
Pravesh Sharma 5ee403fec7 Upgraded Flask, Flask-Security-Too, Werkzeug, and other dependencies, ensuring compatibility with Python 3.7. #7362 2024-04-16 12:23:03 +05:30
Neville Li 5a3fa59741 Fix id_token KeyError on OAuth2 logout. 2024-04-16 12:19:06 +05:30
Akshay Joshi 60497df04b Updated release note. 2024-04-15 11:54:31 +05:30
Pravesh Sharma f143aa05a3 Added support for excluding multiple tables while taking Backup. #7163 2024-04-15 11:50:08 +05:30
Aditya Toshniwal ee0687ecd3 Add a function getQueryAt to get the SQL query at given cursor position from a CodeMirror input 2024-04-13 15:47:18 +05:30
Aditya Toshniwal e612140473 Update release notes. 2024-04-10 18:00:57 +05:30
Yogesh Mahajan e384c9665a Fixed a XSS vulnerability in the /settings/store endpoint. #7282 2024-04-10 17:58:51 +05:30
Akshay Joshi 30d2d1b23e Fixed the following code smells:
1) useState call is not destructured into value + setter pair.
2) A fragment with only one child is redundant.
3) Unnecessary '.apply()' and '.call()'.
4) Expected the Promise rejection reason to be an Error.
2024-04-09 19:18:56 +05:30
Aditya Toshniwal ed2a73f7ff Fix artifact archive error for EPAS tests on github workflows 2024-04-09 09:52:39 +05:30
Aditya Toshniwal b5e5f8ac4c Update release notes. 2024-04-09 08:37:41 +05:30
Yogesh Mahajan 102e0a9839 - Update MUI v4 to v5
- Remove the SCSS dependency completely and use MUI for theming.
- Update - date-fns, @date-io, notistack. Remove - popper.js, sass-loader.
- Cleanup webpack config.
- Port PSQL tool to use MUI themes instead of SCSS theme.
- Theme change will reflect realtime without refreshing pgAdmin.
2024-04-09 08:21:14 +05:30
Akshay Joshi edec9adbfb Fixed SonarQube code smell 'Unnecessary use of boolean literals in conditional expression'. 2024-04-08 17:19:51 +05:30
Aditya Toshniwal c9345ad618 Fixed an issue where double dollar quoted code is treated as string in syntax highlighter. #7294 2024-04-08 15:32:01 +05:30
Pravesh Sharma fc4b419987 Fixed an issue where function arguments were getting enclosed in double quotes if written in upper case. #7222 2024-04-04 16:48:00 +05:30
Akshay Joshi 475e3689f7 Added the new columns last_seq_scan and last_idx_scan from the pg_stat_all_tables and pg_stat_all_indexes tables respectively to the Statistics tab. #6728 2024-04-04 16:39:12 +05:30
Akshay Joshi c90508cece Update version for release 8.5 2024-04-01 17:01:55 +05:30
Pravesh Sharma a85d907351 Fixed an issue where user was unable to share a newly registered server. #7111
* Fixed an issue where the clear SSH tunnel password option was disabled in desktop mode.
2024-04-01 16:57:47 +05:30
Akshay Joshi 9f31ec115a Fixed Schema Diff issues while comparing Materialized View. #7271 2024-04-01 16:56:18 +05:30
Khushboo Vashi fbbbfe22dd Fixed a remote code execution issue in the validate binary path (CVE-2024-3116). #7326 2024-04-01 11:34:01 +05:30
Libor M 26b279cc8a Czech translation for version 8.5 2024-04-01 11:09:48 +05:30
Domenico Sgarbossa 3ac271e702 Italian translation update for v8.5 2024-03-29 11:41:44 +05:30
JyotiEdb 4ae9132b59 Fixed an issue with empty locale provider while editing collation. #5611 2024-03-29 11:40:44 +05:30
Akshay Joshi 3fa48f26b8 Update message catalogs for v8.5 2024-03-28 17:58:24 +05:30
Akshay Joshi 00e17ef152 Fixed an issue where the 'Save Password' option for SSH tunneling password was consistently disabled. #7139 2024-03-28 13:58:03 +05:30
Aditya ToshniwalandAkshay Joshi ace73ebb60 Added support for viewing Log Based Clusters. #7216
Co-authored-by: Akshay Joshi <akshay.joshi@enterprisedb.com>
2024-03-28 12:19:34 +05:30
JyotiEdb 5931162556 Fixed an issue where maximize icon is missing from query tool panel. #7218 2024-03-28 11:53:56 +05:30
JyotiEdb 053b1e3d69 Fixed issues in create collation. #5611 2024-03-27 17:30:16 +05:30
Pravesh Sharma 082fb165d3 Implemented shortcut mapping for the edit menu in the query tool. 2024-03-27 16:41:08 +05:30
Anil Sahoo a02ebe192b Fixed rollback and commit button activation on execute button click. #7248 2024-03-27 16:38:42 +05:30
Akshay Joshi 8ab78dc40d Fixed an issue where serial, bigserial, and smallserial columns were always shown as different in the schema diff. 2024-03-27 16:11:40 +05:30
Khushboo Vashi 6ecd7b20f7 Update release notes. 2024-03-27 11:50:31 +05:30
Benjamin Blattberg 48a86f6c38 Fix the issue where the update-user CLI command doesn't change the password. #7304 2024-03-27 11:47:58 +05:30
Pravesh Sharma b742487dc3 Fixed an issue where table properties were not updating from properties dialog. #7210 2024-03-27 11:41:01 +05:30
Akshay Joshi 089f890f2e Fixed an issue where Triggers, Rules, Indexes were absent from the Schema Diff when comparing views. #7271
Fixed an issue in Schema Diff where Columns with sequences get altered unnecessarily. #4413
2024-03-27 11:40:23 +05:30
Khushboo Vashi 1f0a2fd150 Update release notes. 2024-03-26 18:24:44 +05:30
István Lantos 715839d295 Expose UNIX socket in entrypoint.sh for Docker implementation. #7221 2024-03-26 18:22:29 +05:30
Pravesh Sharma 1bcf343ceb Fixed an issue where taking backup of a shared server was using server owner's user name. #7255 2024-03-26 11:28:20 +05:30
Anil Sahoo e99fc02f9e Fixed issue related to email authentication of Two-factor authentication. #7308 2024-03-26 11:27:35 +05:30
Aditya Toshniwal c0a1429664 Fix failing feature tests 2024-03-26 11:20:04 +05:30
Aditya Toshniwal cc1ce09b73 More CodeMirror fixes. #7268
Fix query tool autocomplete results when cursor is in between the SQL query. #7299
Fix an issue in query tool where custom keyboard shortcuts are not working for some. #7305
2024-03-23 18:22:06 +05:30
JyotiEdb 25074e46b4 Added support for provider, deterministic, version and RULES parameter while creating collation. #5611 2024-03-19 16:52:22 +05:30
Anil Sahoo cee0945a78 Revert the changes made to include a separate 'ALTER TABLE ...' query for setting defaults, as per the previous fix for issue #7165. 2024-03-19 15:12:04 +05:30
Aditya Toshniwal 24b0c2e919 Update axios to the latest version 2024-03-18 16:23:54 +05:30
Akshay Joshi c56aef335b Fixed RESQL test cases for DBMS Schedule 2024-03-18 13:44:07 +05:30
Akshay Joshi 097b630738 Added support for EDB Job Scheduler. #7098 2024-03-18 11:53:59 +05:30
Aditya Toshniwal f351b10ed0 Fix an issue in query tool where toggle case of selected text loses selection. #7277
Also make changes to give pgAdmin shortcuts higher priority over CodeMirror default shortcuts.
2024-03-14 18:18:53 +05:30
Pravesh Sharma 1a02d13a28 Bug fixes and improvements in pgAdmin CLI. #7116 2024-03-14 18:12:28 +05:30
Anil Sahoo bece59d4b3 Fixed schema diff wrong query generation for table, foreign table and sequence. #7165 2024-03-14 11:21:19 +05:30
Akshay Joshi 30398219f4 Replace actions/upload-artifact@v3 with actions/upload-artifact@v4 for all the github actions. 2024-03-12 16:04:15 +05:30
Akshay Joshi 8545d846c0 Replace actions/checkout@v3 with actions/checkout@v4 for all the github actions. 2024-03-12 15:26:31 +05:30
Akshay Joshi 6d8c4bdb82 1) Checking actions/checkout@v4 working or not.
2) Added edb job scheduler command for EPAS 16 only.
2024-03-12 14:45:44 +05:30
Anthony DeBarros 496acf5598 Polish up the system_stats not installed message. 2024-03-12 10:50:09 +05:30
Aditya Toshniwal 36228fece7 Add a workaround in pgAdmin code to make Flask-Migrat>=4.0.6 work 2024-03-11 17:17:40 +05:30
Aditya Toshniwal 794c7cb335 Fixed multiple editor related issues:
1. Replace option in query tool edit menu is not working on non-Mac OS. #7262
2. Format SQL shortcut and multiline selection are not working. #7268
3. "Use Spaces?" Preference of Editor is not working. #7269
2024-03-11 16:52:56 +05:30
Akshay Joshi 9c9766ca0a Update release note. 2024-03-08 11:49:36 +05:30
Aditya Toshniwal 7374997425 Fix an issue in table dialog where changing column name was not syncing table constraints appropriately. #7229 2024-03-08 11:45:32 +05:30
Florian 134e651989 Added support to exclude multiple tables while taking backup. #7163 2024-03-08 11:44:29 +05:30
Akshay Joshi 8b130b3351 Added corepack enable command. 2024-03-04 17:30:16 +05:30
Akshay Joshi d26182d178 Update yarn version for OSX build functions. 2024-03-04 15:23:07 +05:30
Akshay Joshi 8ddcdbf499 Updated version for release 8.4 2024-03-04 14:50:23 +05:30
Akshay Joshi 4e49d752fb Unsafe Deserialization and Remote Code Execution by an Authenticated user in pgAdmin 4 (CVE-2024-2044). 2024-03-04 13:22:09 +05:30
Libor M 0cbb5324bf Czech translation for version 8.4 2024-03-04 11:12:05 +05:30
Akshay Joshi 1e90245650 Update release note 2024-03-01 12:14:43 +05:30
Florian 3425bc0349 Ensure that the OAuth2 session is logged out when users log out from pgAdmin. #7193 2024-03-01 12:09:01 +05:30
Domenico Sgarbossa 7593bb98c1 Italian translation update for v8.4 2024-03-01 11:56:47 +05:30
Akshay Joshi d8c007f644 Fixed duplicate explicit target name issue in the documentation. 2024-02-29 19:14:59 +05:30
Akshay Joshi 0ea51861c7 Update message catalogs for v8.4 2024-02-29 18:40:50 +05:30
Akshay Joshi cfbf4d8452 Updated URL in the container deployment docs. 2024-02-29 18:37:34 +05:30
Pravesh Sharma af88851228 Remove role related checks on the UI dashboard when terminating session/query and let PostgreSQL take care of it. #7217 2024-02-29 16:43:07 +05:30
Akshay Joshi 864f23c60d Update release note. 2024-02-29 11:53:33 +05:30
Anil Sahoo 8dffcf842f Added documentation for System Statistics tab. #7148 2024-02-29 11:34:54 +05:30
Pravesh Sharma 6971d8c3a1 Fixed an issue where preferences.json mapped to container was not having any effect on preferences. #6058 2024-02-27 12:11:59 +05:30
Aditya Toshniwal 43f4cc4e17 Fix an issue where type column in dependencies tab is not showing correct label. #7225 2024-02-26 11:59:30 +05:30
Aditya Toshniwal a5530f59f7 Fix sonarqube issues for the rule - 'If' statement should not be the only statement in 'else' block 2024-02-26 11:55:36 +05:30
Aditya Toshniwal e272552780 Fix doc builds failing because of release notes update 2024-02-23 14:13:06 +05:30
Aditya Toshniwal dfbbc3b1a1 Update release notes. 2024-02-23 14:08:56 +05:30
Anil Sahoo a8ab714606 Fix multiple issues where PasswordExecCommand was not working in server mode and PasswordExecCommand was not loaded when importing servers. #6792 2024-02-23 14:05:26 +05:30
Pravesh Sharma 2ab419c8a5 Fixed EPAS RESQL test case failure. 2024-02-23 11:25:54 +05:30
Aditya Toshniwal 29e85a6b06 Fix SonarQube issues 2024-02-22 16:54:20 +05:30
Khushboo Vashi 125d36e7d2 Update release notes. 2024-02-22 16:43:50 +05:30
Florian 16406f88a7 Add support for JSON log format. #7138 2024-02-22 16:39:25 +05:30
Pravesh Sharma dee1a2ae6b Upgrade python package Flask-Security-Too to 5.3.* #7234 2024-02-22 14:43:48 +05:30
Aditya Toshniwal 1f879b3e87 Upgrade python package cryptography to 42.0.* 2024-02-22 11:57:44 +05:30
Aditya Toshniwal b5bd236387 Fix edit menu related issues of query tool codemirror 2024-02-21 15:54:57 +05:30
Akshay Joshi 41812c9fde Update release note. 2024-02-21 11:25:55 +05:30
Pravesh Sharma 4faf2a3c6d Fixed an issue where dependencies and dependents were not showing if a composite type is used as an attribute in another composite type. #7027 2024-02-21 11:18:44 +05:30
Aditya Toshniwal d3ede3151a Upgrade CodeMirror from version 5 to 6. #7097 2024-02-21 11:15:25 +05:30
Aditya Toshniwal 721290b1e9 Fix an issue where type column in dependents/dependencies tab is not showing correct label. #7225 2024-02-20 16:23:05 +05:30
Khushboo Vashi 10929157b4 Update Release Note. 2024-02-15 15:00:48 +05:30
Yogesh Mahajan 5a74022e8a Allow preferences customization using a configuration file. #6058 2024-02-15 14:58:31 +05:30
Akshay Joshi a74b0232f9 Update release note 2024-02-15 11:41:42 +05:30
Anil Sahoo e81a036850 Fix an issue where the scripts created by generate script of Schema diff for Table with sequence was not working earlier. #7165 2024-02-15 11:38:44 +05:30
Khushboo Vashi 389896411a Update Release Notes. 2024-02-14 11:24:20 +05:30
octo-dama 6adae46a4c Add --yes option for skipping the confirmation prompt while deleting the user via CLI for scripting purpose. #7204 2024-02-14 11:20:44 +05:30
Akshay Joshi 96ed38292f Added release note for v8.4 2024-02-09 16:49:58 +05:30
Anil Sahoo 47b2bc8a83 1) Fix the tabbed panel backward/forward shortcut for tabs. #6808
2) Remove shortcuts for the dialog tab backward/forward.
3) Used hotkeys.js in place of mousetrap for listening to keyboard shortcuts.
2024-02-09 16:33:30 +05:30
Anil Sahoo 9ad223c41c Fix an issue where constraint check control is enabled in edit table dialog. #7164 2024-02-09 16:26:46 +05:30
Ashesh Vashi d09833744a Separate the application name, branding & version information from the configuration file. #7187 2024-02-09 16:25:03 +05:30
Akshay Joshi c92e9c2953 Fixed all broken submenus of the Help menu due to the SonarQube fix. 2024-02-08 12:24:40 +05:30
Akshay Joshi af1f4b3aa7 Update version for release v8.3 2024-02-05 12:38:40 +05:30
Domenico Sgarbossa 4b40aac89f Italian translation for version 8.3 2024-02-05 10:48:35 +05:30
Libor M 0ff34ab6ae Czech translation for version 8.3 2024-02-05 10:48:04 +05:30
Yogesh Mahajan 9462296d33 Fixed API tests failed due to #7113 changes. 2024-02-05 10:47:43 +05:30
Aditya Toshniwal 0904adaed0 Update release notes 2024-02-02 12:55:13 +05:30
Pravesh Sharma f7045b58d4 Fixed an issue where format sql was messing up operator. #5083
- The formatting is done on client side now using sql-formattor JS lib. Backend API based formatting is removed.
- Added new options data type case, expression width, function case, lines between queries, logical operator new line and new line before semicolon available in the new lib.
- Removed old options comma-first notations, re-indent aligned, re-indent, strip comments and wrap after N characters as not available in the new library.
- Capitalise casing is replaced with Preserve casing as it is not supported by the new library.
- Also fixes #6785, #6990, #7115.
2024-02-02 12:28:25 +05:30
Sebastian Bogaci 459121566c Fix wrong default for FORCE_LOWER in the FLASK_GRAVATAR module #7175 2024-02-02 11:47:14 +05:30
Akshay Joshi e12e8bc9cf Update message catalogs for v8.3 2024-02-01 21:27:06 +05:30
Kristof Mattei 956401015d Fixed an issue pgAdmin fails to launch due to inconsistent PATH variable name on windows. #7153, #7125 2024-02-01 21:07:39 +05:30
Khushboo Vashi 1ac385be27 Update documentation for creating the configuration database. 2024-02-01 14:37:09 +05:30
Anil Sahoo 8145e042a6 Fix a backend server error when creating a named restore point. #7166 2024-02-01 14:20:22 +05:30
Aditya Toshniwal cdf49d6300 Fix failing feature tests 2024-01-30 13:01:57 +05:30
Aditya Toshniwal 028b70203c Fix SonarQube bugs 2024-01-29 18:39:30 +05:30
Akshay Joshi e23ef5d9df Update release note. 2024-01-29 14:54:53 +05:30
Yogesh Mahajan 711181c752 Ensure that the correct SQL is generated when changing the column data type to "char". #7113 2024-01-29 14:53:03 +05:30
Pravesh Sharma 3de19f66f2 Added support for column storage syntax while creating table. #6450 2024-01-29 11:32:34 +05:30
Akshay Joshi 4c5324bd99 Fixed API test cases for Backup. 2024-01-25 18:07:40 +05:30
Akshay Joshi 639a28fbfc Fixed code smell 'Prefer using an optional chain expression instead, as it's more concise and easier to read'. 2024-01-25 16:51:40 +05:30
Akshay Joshi 41fe1db884 Fixed PEP8 2024-01-25 12:51:29 +05:30
Akshay Joshi cafe69c235 Fixed SonarQube Bugs and API test cases. 2024-01-25 12:46:55 +05:30
Akshay Joshi d55c35c0e8 Revert yarnrc.yml and yarn.lock 2024-01-24 18:55:32 +05:30
Akshay Joshi 0e0cbc40b8 Fixed SonarQube code smell Replace the unused local variable with '_'. 2024-01-24 18:33:43 +05:30
Aditya Toshniwal 47aa070cc3 Update release notes 2024-01-22 16:17:58 +05:30
Yogesh Mahajan 4fe47b8e92 Ensure that password exec command is included in exported server data json. #6792 2024-01-22 13:38:34 +05:30
Aditya Toshniwal e80e82cd7f Allow drag-n-drop columns collection tree node as comma separated columns. #4419 2024-01-22 13:19:04 +05:30
Khushboo Vashi 29f13f8832 Update release notes. 2024-01-22 12:41:43 +05:30
Akshay Joshi 81fccc87b5 Added support to rename columns in Views. #6380 2024-01-22 12:27:55 +05:30
Aditya Toshniwal 93d25eea0b Use COOKIE_DEFAULT_PATH or SCRIPT_NAME in session cookie path. #6557 2024-01-22 12:25:20 +05:30
Yogesh Mahajan a166f8dc89 Skip debugger test cases to fix "too many clients" error on github actions. 2024-01-18 16:41:18 +05:30
Aditya Toshniwal d26c167c76 Improve auto-focus of editable data grid when adding/editing rows 2024-01-17 18:38:00 +05:30
Akshay Joshi 60983a25d2 Updated release note. 2024-01-12 17:48:56 +05:30
Yogesh Mahajan 2d08b0dd13 Added configurable parameter to enable support for PasswordExecCommand in server mode. #6792 2024-01-12 17:34:40 +05:30
Pravesh Sharma b28df5874e Fixed an issue where multiple errors were showing if user does not have connect privileges. #7073 2024-01-12 17:20:51 +05:30
Nikhil Mohite ad0567bd85 Add support for selecting a schema in the backup database dialog with no tables, mviews, views or foreign tables. #7053
Fixed a UI border issue on the dependencies tab for columns with icon. #7055
2024-01-12 17:19:27 +05:30
Pravesh Sharma 701085adaf Fixed an issue where group membership information was displayed incorrectly. #7085 2024-01-12 16:48:49 +05:30
Akshay Joshi 5240e8ccf8 Added BYPASSRLS|NOBYPASSRLS option while creating a Role. #6392 2024-01-11 19:14:01 +05:30
749 changed files with 104537 additions and 81584 deletions

No files matched your search

+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Build the container
run: docker build .
+4 -4
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install platform dependencies
run: |
@@ -33,7 +33,7 @@ jobs:
make docs
- name: Archive HTML
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: pgadmin4-html-build-output
path: docs/en_US/_build/html/*
@@ -44,7 +44,7 @@ jobs:
make docs-epub
- name: Archive ePub
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: pgadmin4-epub-build-output
path: docs/en_US/_build/epub/pgAdmin4.epub
@@ -55,7 +55,7 @@ jobs:
make docs-pdf
- name: Archive PDF
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: pgadmin4-pdf-build-output
path: docs/en_US/_build/latex/pgadmin4.pdf
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Upgrade yarn
run: |
+2 -2
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install platform dependencies
run: |
@@ -33,7 +33,7 @@ jobs:
make pip
- name: Archive Python wheel
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: pgadmin4-python-build-output
path: dist/*
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install Python dependencies
run: |
+2 -2
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install platform dependencies
run: |
@@ -33,7 +33,7 @@ jobs:
make src
- name: Archive source tarball
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: pgadmin4-tarball-build-output
path: dist/*
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install platform dependencies
run: |
+4 -4
View File
@@ -26,7 +26,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup the EDB APT repo on Linux
run: |
@@ -157,21 +157,21 @@ jobs:
- name: Archive server log
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: server-log-pg${{ matrix.pgver }}
path: var/pgadmin4.log
- name: Archive regression log
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: regression-log-pg${{ matrix.pgver }}
path: web/regression/regression.log
- name: Archive screenshots
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: screenshots-pg${{ matrix.pgver }}
path: web/regression/screenshots
+4 -4
View File
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup the PGDG APT repo
run: |
@@ -160,21 +160,21 @@ jobs:
- name: Archive server log
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: server-log-pg${{ matrix.pgver }}
path: var/pgadmin4.log
- name: Archive regression log
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: regression-log-pg${{ matrix.pgver }}
path: web/regression/regression.log
- name: Archive screenshots
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: screenshots-pg${{ matrix.pgver }}
path: web/regression/screenshots
+3 -3
View File
@@ -22,11 +22,11 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: '18.x'
node-version: '20.x'
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Upgrade yarn
run: |
+11 -5
View File
@@ -37,7 +37,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup the EDB APT repo on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
@@ -78,6 +78,12 @@ jobs:
icacls "C:\EPAS\${{ matrix.pgver }}\tablespaces" /grant "NETWORK SERVICE":(OI)(CI)F /T
shell: cmd
- name: Add edb_job_scheduler into config file.
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver == 16 }}
run: |
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/edb_job_scheduler,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
sudo su -c "echo \"edb_job_scheduler.database_list = 'test_dbms_job_scheduler'\" >> /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf"
- name: Start PostgreSQL on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
@@ -272,14 +278,14 @@ jobs:
- name: Archive server log
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: server-log-epas${{ matrix.pgver }}
name: server-log-epas-${{ matrix.os }}-pg${{ matrix.pgver }}
path: var/pgadmin4.log
- name: Archive regression log
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: regression-log-epas${{ matrix.pgver }}
name: regression-log-epas-${{ matrix.os }}-pg${{ matrix.pgver }}
path: web/regression/regression.log
+3 -3
View File
@@ -26,7 +26,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup the PGDG APT repo on Linux
if: ${{ matrix.os == 'ubuntu-latest' }}
@@ -291,14 +291,14 @@ jobs:
- name: Archive server log
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: server-log-${{ matrix.os }}-pg${{ matrix.pgver }}
path: var/pgadmin4.log
- name: Archive regression log
if: success() || failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: regression-log-${{ matrix.os }}-pg${{ matrix.pgver }}
path: web/regression/regression.log
+1 -1
View File
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 0
+2 -2
View File
@@ -200,8 +200,8 @@ RUN apk add \
/venv/bin/python3 -m pip install --no-cache-dir gunicorn==20.1.0 && \
find / -type d -name '__pycache__' -exec rm -rf {} + && \
useradd -r -u 5050 -g root -s /sbin/nologin pgadmin && \
mkdir -p /var/lib/pgadmin && \
chown pgadmin:root /var/lib/pgadmin && \
mkdir -p /run/pgadmin /var/lib/pgadmin && \
chown pgadmin:root /run/pgadmin /var/lib/pgadmin && \
chmod g=u /var/lib/pgadmin && \
touch /pgadmin4/config_distro.py && \
chown pgadmin:root /pgadmin4/config_distro.py && \
+4 -4
View File
@@ -63,13 +63,13 @@ REM Main build sequence Ends
set "VCREDIST_FILE=vcredist_x64.exe"
REM Set additional variables we need
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_MAJOR=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\config.py') DO SET APP_MINOR=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\config.py') DO SET APP_VERSION_SUFFIX=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\version.py') DO SET APP_MAJOR=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\version.py') DO SET APP_MINOR=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\version.py') DO SET APP_VERSION_SUFFIX=%%a
REM remove single quote from the string
SET APP_VERSION_SUFFIX=%APP_VERSION_SUFFIX:'=%
SET APP_NAME=""
FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\config.py') DO SET APP_NAME=%%a
FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\branding.py') DO SET APP_NAME=%%a
FOR /f "tokens=1 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "print('%APP_NAME%'.lower().replace(' ', ''))"') DO SET APP_SHORTNAME=%%G
SET APP_VERSION=%APP_MAJOR%.%APP_MINOR%
SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%APP_VERSION_SUFFIX%-x64.exe
+3 -3
View File
@@ -9,9 +9,9 @@
SHELL = /bin/sh
APP_NAME := $(shell grep ^APP_NAME web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]' | tr -d "'" | awk '{print tolower($$0)}')
APP_RELEASE := $(shell grep ^APP_RELEASE web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
APP_REVISION := $(shell grep ^APP_REVISION web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
APP_NAME := $(shell grep ^APP_NAME web/branding.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]' | tr -d "'" | awk '{print tolower($$0)}')
APP_RELEASE := $(shell grep ^APP_RELEASE web/version.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
APP_REVISION := $(shell grep ^APP_REVISION web/version.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
#########################################################################
# High-level targets
+22 -4
View File
@@ -200,11 +200,29 @@ tab related to tables that should be included in the backup.
contents of the table that they have access to. This option is relevant
only when dumping the contents of a table which has row security.
* Move the switch next to *With OIDs* towards right position to include object
identifiers as part of the table data for each table.
* Use the *Include table(s) and Children* field to dump the tables and any partitions
or inheritance child tables of the tables matching the pattern.
**Note:** This option is visible only for database server greater than or
equal to 16.
* The Exclude patterns field is utilized to exclude patterns in the following manner:
* Use the *Exclude table data* field to not dump data for any tables
matching the table pattern.
* Use the *Table(s)* field to not dump the tables matching the
pattern. Multiple patterns can be given separated by space.
* Use the *Table(s) data* field to not dump data for any tables
matching the pattern. Multiple patterns can be given separated by
spaces.
* Use the *Table(s) and children* field to not dump the tables and any
partitions or inheritance child tables of the tables matching the pattern.
**Note:** This option is visible only for database server greater than or
equal to 16.
* Use the *Table(s) data and children* field to not dump data for the
tables and any partitions or inheritance child tables of the tables matching
the table pattern. **Note:** This option is visible only for database server
greater than or equal to 16.
Click the *Options* tab to continue. Use the fields in the *Options*
tab to provide other backup options.
-3
View File
@@ -136,9 +136,6 @@ tab related to tables that should be included in the backup.
partition itself. **Note:** This option is visible only for database server
greater than or equal to 11.
* Move the switch next to *With OIDs* towards right position to include object
identifiers as part of the table data for each table.
Click the *Options* tab to continue. Use the fields in the *Options*
tab to provide other backup options.
+10
View File
@@ -50,6 +50,16 @@ settings:
* Use the *LC_CTYPE* field to specify a locale with specified character
classification. The locale must be applicable to the current database encoding.
(See CREATE DATABASE for details.)
* Use the drop-down listbox next to *Locale Provider* to select a locale services associated
with the collation. Possible values are: icu, libc. libc is the default.
* Move the switch next to *Deterministic* to *YES* to specify whether the collation should use
deterministic comparisons. By default, this option is set to true. In a
deterministic comparison, strings that are not byte-wise equal are considered
unequal, even if they are considered logically equal in the comparison.
* Use the *Rules* field to specify a rules for customizing the behavior of the collation.
It includes considerations such as character ordering, case sensitivity, and accent
sensitivity.
* Use the *Version* field to specify version string to store with the collation object.
Click the *SQL* tab to continue.
+2
View File
@@ -43,6 +43,8 @@ are disabled if inapplicable.)
for the column. Compression is supported only for variable-width data types,
and is used only when the column's storage mode is main or extended. This
option is available from v14 and above.
* Use the drop-down listbox next to *Storage* to set the storage mode for the
column. This option is available from v16 and above.
Click the *Constraints* tab to continue.
+20 -4
View File
@@ -26,9 +26,9 @@ where *<tag name>* is one of the following:
+==========+===============================================================================+
| latest | The most recent release. |
+----------+-------------------------------------------------------------------------------+
| 7.4 | A specific version (7.4 in this case). |
| 8.4 | A specific version (8.4 in this case). |
+----------+-------------------------------------------------------------------------------+
| 7 | the latest release of a specific major version (major version 7 in this case).|
| 8 | the latest release of a specific major version (major version 8 in this case).|
+----------+-------------------------------------------------------------------------------+
| snapshot | The latest nightly test build. |
+----------+-------------------------------------------------------------------------------+
@@ -42,11 +42,11 @@ maintenance functions to be executed. Multiple versions are included in the
following directories to allow use with different versions of the database
server:
* PostgreSQL 11: */usr/local/pgsql-11*
* PostgreSQL 12: */usr/local/pgsql-12*
* PostgreSQL 13: */usr/local/pgsql-13*
* PostgreSQL 14: */usr/local/pgsql-14*
* PostgreSQL 15: */usr/local/pgsql-15*
* PostgreSQL 16: */usr/local/pgsql-16*
The default binary paths set in the container are as follows:
@@ -132,7 +132,15 @@ than using the default.
Override the default file path for the server definition list. See the
/pgadmin4/servers.json mapped file below for more information. See the format
of the `JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/import_export_servers.html#json-format>`_.
of the `Servers JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/import_export_servers.html#json-format>`_.
**PGADMIN_PREFERENCES_JSON_FILE**
*Default: /pgadmin4/preferences.json*
Override the default file path for the preferences customization at the container creation. See the
/pgadmin4/preferences.json mapped file below for more information. See the format
of the `Preferences JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/preferences.html#json-format>`_.
**GUNICORN_ACCESS_LOGFILE**
@@ -228,6 +236,14 @@ pgAdmin in the container. Note that server definitions are only loaded on first
launch, i.e. when the configuration database is created, and not on subsequent
launches using the same configuration database.
**/pgadmin4/preferences.json**
If this file is mapped, preferences defined in it will be updated at launch
time. This allows customization of preferences settings into the instance of
pgAdmin in the container. Note that preferences are only set on first
launch, i.e. when the configuration database is created, and not on subsequent
launches using the same configuration database.
**/certs/server.cert**
If TLS is enabled, this file will be used as the servers TLS certificate.
+108
View File
@@ -0,0 +1,108 @@
.. _dbms_job:
*****************
`DBMS Job`:index:
*****************
Use the *DBMS Job* dialog to create a DBMS Job.
.. image:: images/dbms_job_general.png
:alt: DBMS Job dialog general tab
:align: center
Use the fields in the *General* tab to create job:
* Use the *Name* field to add a descriptive name for the job. The name will
be displayed in the *pgAdmin* object explorer.
* Use the *Enabled?* switch to indicate that job should be enabled or disabled.
* Use the *Job Type* field to select the type of the job. Type could be SELF-CONTAINED or PRE-DEFINED.
If the Job Type is Self-Contained you need to specify the action and repeat interval in the Action and Repeat tabs respectively.
If the Job Type is Pre-Defined you need to specify the existing Program and Schedule names in the Pre-Defined tab.
* Store notes about the job in the *Comment* field.
Click the *Action* tab to continue.
.. image:: images/dbms_job_action.png
:alt: DBMS Job dialog action tab
:align: center
Use the *Action* tab to select the action for the job. This tab is only enabled when the job type is 'SELF-CONTAINED'.
* Use the *Type* field to select the type of the job. Type could be PLSQL BLOCK or STORED PROCEDURE.
* Use the *Procedure* field to select an existing procedure that executes when the job is invoked.
* *Number of Arguments* field is read-only and indicates the quantity of arguments necessary for the chosen procedure.
Click the *Code* tab to continue.
.. image:: images/dbms_job_code.png
:alt: DBMS Job dialog code tab
:align: center
* Use the *Code* field to write the code that executes when the job is invoked.
This tab is only enabled when the job type is 'SELF-CONTAINED' and type of the action is set to 'PLSQL BLOCK'.
Click the *Arguments* tab to continue.
.. image:: images/dbms_job_arguments.png
:alt: DBMS Job dialog arguments tab
:align: center
* *Arguments* tab outlines the arguments required by the selected procedure in the 'Action' tab. This tab is only enabled when the job type is 'SELF-CONTAINED'.
Click the *Repeat* tab to continue.
.. image:: images/dbms_job_repeat.png
:alt: DBMS Job dialog repeat tab
:align: center
Use the *Repeat* tab to select the repeat interval for the job. This tab is only enabled when the job type is 'SELF-CONTAINED'.
* Use the calendar selector in the *Start* field to specify the starting date
and time for the job.
* Use the calendar selector in the *End* field to specify the ending date and
time for the job.
* Use the *Frequency* field to select the frequency. Frequency is one of the following:
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY.
* Use the *Date* field to select the date on which job will execute.Date is YYYYMMDD.
* Use the *Months* field to select the months in which the job will execute.
* Use the *Week Days* field to select the days on which the job will execute.
* Use the *Month Days* field to select the numeric days on which the job will
execute.
* Use the *Hours* field to select the hour at which the job will execute.
* Use the *Minutes* field to select the minute at which the job will execute.
Click the *Pre-Defined* tab to continue.
.. image:: images/dbms_job_predefined.png
:alt: DBMS Job dialog predefined tab
:align: center
Use the *Pre-Defined* tab to select the existing program and schedule to create the job.
This tab is only enabled when the job type is 'PRE-DEFINED'.
* Use the *Program Name* field to select the existing program.
* Use the *Schedule Name* field to select an existing schedule.
Click the *SQL* tab to continue.
Your entries in the *DBMS Job* dialog generate a SQL command (see an example below).
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
SQL command.
**Example**
The following is an example of the sql command generated by user selections in
the *DBMS Job* dialog:
.. image:: images/dbms_job_sql.png
:alt: DBMS Job dialog sql tab
:align: center
* Click the *Info* button (i) to access online help.
* Click the *Help* button (?) to access dialog help.
* Click the *Save* button to save work.
* Click the *Close* button to exit without saving work.
* Click the *Reset* button to restore configuration parameters.
+45
View File
@@ -0,0 +1,45 @@
.. _dbms_job_scheduler:
********************************
`Using EDB Job Scheduler`:index:
********************************
In the past versions of EPAS, DBMS_SCHEDULER or DBMS_JOBS required the configuration
of pgAgent, an essential service for their functionality. Maintaining pgAgent in a
production environment is cumbersome. The need for correct configuration, regular updates,
and ensuring the service’s health added complexity.
EPAS 16 revolutionizes job scheduling by eliminating the need for the pgAgent component.
The new version introduces EDB Job Scheduler which is an extension that runs the job scheduler
as a background process for the DBMS_SCHEDULER and DBMS_JOB packages.
The EDB Job Scheduler has a scheduler process that starts when the database cluster starts.
To start the scheduler process, load the EDB Job Scheduler extension using the **shared_preload_libraries**
parameter. After you load the extension, create the extension **'edb_job_scheduler'** and **'dbms_scheduler'** using
the CREATE EXTENSION command. The database in which you're creating the extension must be listed in the
**edb_job_scheduler.database_list** parameter.
Instructions for configuring the EDB Job Scheduler can be found in the
`Configuring EDB Job Scheduler <https://www.enterprisedb.com/docs/pg_extensions/edb_job_scheduler/configuring/>`_.
.. image:: images/dbms_job_scheduler.png
:alt: DBMS Job Scheduler Object Browser
:align: center
Check the status of all the jobs
********************************
To check the running status of all the jobs select the 'DBMS Job Scheduler' collection node from the object
explorer and select the Properties tab.
.. image:: images/dbms_job_details.png
:alt: DBMS Job Details
:align: center
.. toctree::
:maxdepth: 1
dbms_job
dbms_program
dbms_schedule
+71
View File
@@ -0,0 +1,71 @@
.. _dbms_program:
*********************
`DBMS Program`:index:
*********************
Use the *DBMS Program* dialog to create a DBMS Program.
.. image:: images/dbms_program_general.png
:alt: DBMS Program dialog general tab
:align: center
Use the fields in the *General* tab to create program:
* Use the *Name* field to add a descriptive name for the program. The name will
be displayed in the *pgAdmin* object explorer.
* Use the *Enabled?* switch to indicate that program should be enabled or disabled.
* Store notes about the program in the *Comment* field.
Click the *Action* tab to continue.
.. image:: images/dbms_program_action.png
:alt: DBMS Program dialog action tab
:align: center
Use the *Action* tab to select the action for the program:
* Use the *Type* field to select the type of the program. Type could be PLSQL BLOCK or STORED PROCEDURE.
* Use the *Procedure* field to select an existing procedure that executes when the program is invoked.
* *Number of Arguments* field is read-only and indicates the quantity of arguments necessary for the chosen procedure.
Click the *Code* tab to continue.
.. image:: images/dbms_program_code.png
:alt: DBMS Program dialog code tab
:align: center
* Use the *Code* field to write the code that executes when the program is invoked.
This tab is only enabled when the type of the program is set to 'PLSQL BLOCK'.
Click the *Arguments* tab to continue.
.. image:: images/dbms_program_arguments.png
:alt: DBMS Program dialog arguments tab
:align: center
* *Arguments* tab is a read-only section that outlines the arguments required by the selected procedure in the 'Action' tab.
Click the *SQL* tab to continue.
Your entries in the *DBMS Program* dialog generate a SQL command (see an example below).
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
SQL command.
**Example**
The following is an example of the sql command generated by user selections in
the *DBMS Program* dialog:
.. image:: images/dbms_program_sql.png
:alt: DBMS Program dialog sql tab
:align: center
* Click the *Info* button (i) to access online help.
* Click the *Help* button (?) to access dialog help.
* Click the *Save* button to save work.
* Click the *Close* button to exit without saving work.
* Click the *Reset* button to restore configuration parameters.
+61
View File
@@ -0,0 +1,61 @@
.. _dbms_schedule:
**********************
`DBMS Schedule`:index:
**********************
Use the *DBMS Schedule* dialog to create a DBMS Schedule.
.. image:: images/dbms_schedule_general.png
:alt: DBMS Schedule dialog general tab
:align: center
Use the fields in the *General* tab to create schedule:
* Use the *Name* field to add a descriptive name for the schedule. The name will
be displayed in the *pgAdmin* object explorer.
* Store notes about the schedule in the *Comment* field.
Click the *Repeat* tab to continue.
.. image:: images/dbms_schedule_repeat.png
:alt: DBMS Schedule dialog repeat tab
:align: center
Use the *Repeat* tab to select the repeat interval for the schedule:
* Use the calendar selector in the *Start* field to specify the starting date
and time for the schedule.
* Use the calendar selector in the *End* field to specify the ending date and
time for the schedule.
* Use the *Frequency* field to select the frequency. Frequency is one of the following:
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY.
* Use the *Date* field to select the date on which schedule will execute.Date is YYYYMMDD.
* Use the *Months* field to select the months in which the schedule will execute.
* Use the *Week Days* field to select the days on which the schedule will execute.
* Use the *Month Days* field to select the numeric days on which the schedule will
execute.
* Use the *Hours* field to select the hour at which the schedule will execute.
* Use the *Minutes* field to select the minute at which the schedule will execute.
Click the *SQL* tab to continue.
Your entries in the *DBMS Schedule* dialog generate a SQL command (see an example below).
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
SQL command.
**Example**
The following is an example of the sql command generated by user selections in
the *DBMS Schedule* dialog:
.. image:: images/dbms_schedule_sql.png
:alt: DBMS Schedule dialog sql tab
:align: center
* Click the *Info* button (i) to access online help.
* Click the *Help* button (?) to access dialog help.
* Click the *Save* button to save work.
* Click the *Close* button to exit without saving work.
* Click the *Reset* button to restore configuration parameters.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 79 KiB

+1 -22
View File
@@ -26,10 +26,6 @@ When using main browser window, the following keyboard shortcuts are available:
+----------------------------+-------------------------------------------------------+
| Shift+Alt+d | Delete object |
+----------------------------+-------------------------------------------------------+
| Shift+Ctrl+[ | Dialog tab backward |
+----------------------------+-------------------------------------------------------+
| Shift+Ctrl+] | Dialog tab forward |
+----------------------------+-------------------------------------------------------+
| Shift+Alt+g | Direct debugging |
+----------------------------+-------------------------------------------------------+
| Shift+Alt+e | Edit object properties |
@@ -59,23 +55,6 @@ When using main browser window, the following keyboard shortcuts are available:
| Shift+Alt+v | View data |
+----------------------------+-------------------------------------------------------+
Dialog Tabs
***********
Use the shortcuts below to navigate the tabsets on dialogs:
.. table::
:class: longtable
:widths: 2 3
+----------------------------+-------------------------------------------------------+
| Shortcut for all platforms | Function |
+============================+=======================================================+
| Control+Shift+[ | Dialog tab backward |
+----------------------------+-------------------------------------------------------+
| Control+Shift+] | Dialog tab forward |
+----------------------------+-------------------------------------------------------+
Property Grid Controls
**********************
@@ -139,7 +118,7 @@ When using the syntax-highlighting SQL editors, the following shortcuts are avai
+--------------------------+----------------------+-------------------------------------+
| Shift + Tab | Shift + Tab | Un-indent selected text |
+--------------------------+----------------------+-------------------------------------+
| Alt + g | Option + g | Jump (to line:column) |
| Ctrl + l | Cmd + l | Go to line, column |
+--------------------------+----------------------+-------------------------------------+
| Ctrl + Space | Ctrl + Space | Auto-complete |
+--------------------------+----------------------+-------------------------------------+
+1
View File
@@ -18,4 +18,5 @@ database, right-click on the *Databases* node, and select *Create Database...*
resource_group_dialog
role_dialog
tablespace_dialog
replica_nodes_dialog
role_reassign_dialog
+1
View File
@@ -18,6 +18,7 @@ node, and select *Create Cast...*
:maxdepth: 1
cast_dialog
dbms_job_scheduler
collation_dialog
domain_dialog
domain_constraint_dialog
+43 -12
View File
@@ -486,26 +486,27 @@ Query Tool window navigation:
Use the fields on the *SQL formatting* panel to specify your preferences for
reformatting of SQL.
* Use the *Comma-first notation* option to specify whether to place commas
before or after column names.
* Use the *Data type case* option to specify whether to change data types
into upper, lower, or preserve case.
* Use the *Expression width* option to specify maximum number of characters
in parenthesized expressions to be kept on single line.
* Use the *Function case* option to specify whether to change function
names into upper, lower, or preserve case.
* Use the *Identifier case* option to specify whether to change identifiers
(object names) into upper, lower, or capitalized case.
* Use the *Keyword case* option to specify whether to change keywords into
upper, lower, or capitalized case.
* Use the *Re-indent aligned?* option to specify that indentations of statements
should be changed, aligned by keywords.
* Use the *Re-indent?* option to specify that indentations of statements should
be changed.
upper, lower, or preserve case.
* Use *Lines between queries* to specify how many empty lines to leave
between SQL statements. If set to zero it puts no new line.
* Use *Logical operator new line* to specify newline placement before or
after logical operators (AND, OR, XOR).
* Use *New line before semicolon?* to specify whether to place query
separator (;) on a separate line.
* Use the *Spaces around operators?* option to specify whether or not to include
spaces on either side of operators.
* Use the *Strip comments?* option to specify whether or not comments should be
removed.
* Use the *Tab size* option to specify the number of spaces per tab or indent.
* Use the *Use spaces?* option to select whether to use spaces or tabs when
indenting.
* Use the *Wrap after N characters* option to specify the column limit for
wrapping column separated lists (e.g. of column names in a table). If set to
0 (zero), each item will be on it's own line.
The Schema Diff Node
********************
@@ -589,3 +590,33 @@ If auth_source is not given, Internal authentication will be consider by default
# to specify an auth_source
/path/to/python /path/to/setup.py set-prefs user1@gmail.com sqleditor:editor:comma_first=true --auth-source=ldap
Updating Preferences preferences.json
*************************************
To update preferences defined in json file, simply run ``setup.py `` with ``set-prefs`` command followed by username
and JSON file containing the preferences.
.. code-block:: bash
/path/to/python /path/to/setup.py set-prefs user1@gmail.com --input-file /Users/yogeshmahajan/Desktop/pref.json
JSON format
***********
The JSON file simply contains preference_key=value. Preference key value mapping can be obtained by hovering the
individual preference in the Preference UI dialog.
The following is an typical example for preferences.json :
.. code-block:: python
{
"preferences":
{
"browser:display:show_system_objects": true,
"browser:display:show_user_defined_templates": true,
"browser:display:confirm_on_refresh_close": false,
"misc:themes:theme": "dark",
}
}
+1 -1
View File
@@ -87,7 +87,7 @@ Query Editing Options
| | Select *Replace* to locate and replace (with prompting) individual occurrences of the target. | Option+Cmd+F (MAC) |
| | | Ctrl+Shift+F (Others) |
| +---------------------------------------------------------------------------------------------------+-----------------------+
| | Select *Jump* to navigate to the next occurrence of the search target. | Alt+G |
| | Select *Go to Line/Column* to go to specified line number and column position | Cmd+L or Ctrl+L |
| +---------------------------------------------------------------------------------------------------+-----------------------+
| | Select *Indent Selection* to indent the currently selected text. | Tab |
| +---------------------------------------------------------------------------------------------------+-----------------------+
+5
View File
@@ -11,6 +11,11 @@ notes for it.
.. toctree::
:maxdepth: 1
release_notes_8_6
release_notes_8_5
release_notes_8_4
release_notes_8_3
release_notes_8_2
release_notes_8_1
release_notes_8_0
+46
View File
@@ -0,0 +1,46 @@
***********
Version 8.3
***********
Release date: 2024-02-09
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v8.2.
Supported Database Servers
**************************
**PostgreSQL**: 12, 13, 14, 15, and 16
**EDB Advanced Server**: 12, 13, 14, 15, and 16
Bundled PostgreSQL Utilities
****************************
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 16.0
New features
************
| `Issue #4419 <https://github.com/pgadmin-org/pgadmin4/issues/4419>`_ - Allow drag-n-drop columns collection tree node as comma separated columns.
| `Issue #6380 <https://github.com/pgadmin-org/pgadmin4/issues/6380>`_ - Added support to rename columns in Views.
| `Issue #6392 <https://github.com/pgadmin-org/pgadmin4/issues/6392>`_ - Added BYPASSRLS|NOBYPASSRLS option while creating a Role.
| `Issue #6450 <https://github.com/pgadmin-org/pgadmin4/issues/6450>`_ - Added support for column storage syntax while creating table.
| `Issue #6557 <https://github.com/pgadmin-org/pgadmin4/issues/6557>`_ - Use COOKIE_DEFAULT_PATH or SCRIPT_NAME in session cookie path.
| `Issue #6792 <https://github.com/pgadmin-org/pgadmin4/issues/6792>`_ - Added configurable parameter to enable support for PasswordExecCommand in server mode.
Housekeeping
************
Bug fixes
*********
| `Issue #5083 <https://github.com/pgadmin-org/pgadmin4/issues/5083>`_ - Fixed an issue where format sql was messing up operator. Included many other feature changes, more details `here <https://github.com/pgadmin-org/pgadmin4/commit/f7045b58d4d1b98b6a2f035267d2dd01c7235aa6>`_
| `Issue #6785 <https://github.com/pgadmin-org/pgadmin4/issues/6785>`_ - Fixed an issue where formatting inserts empty lines in specific case.
| `Issue #7053 <https://github.com/pgadmin-org/pgadmin4/issues/7053>`_ - Add support for selecting a schema in the backup database dialog with no tables, mviews, views or foreign tables.
| `Issue #7055 <https://github.com/pgadmin-org/pgadmin4/issues/7055>`_ - Fixed a UI border issue on the dependencies tab for columns with icon.
| `Issue #7073 <https://github.com/pgadmin-org/pgadmin4/issues/7073>`_ - Fixed an issue where multiple errors were showing if user does not have connect privileges.
| `Issue #7085 <https://github.com/pgadmin-org/pgadmin4/issues/7085>`_ - Fixed an issue where group membership information was displayed incorrectly.
| `Issue #7113 <https://github.com/pgadmin-org/pgadmin4/issues/7113>`_ - Ensure that the correct SQL is generated when changing the column data type to "char".
| `Issue #7153 <https://github.com/pgadmin-org/pgadmin4/issues/7153>`_ - Fixed an issue pgAdmin fails to launch due to inconsistent PATH variable name on windows.
| `Issue #7166 <https://github.com/pgadmin-org/pgadmin4/issues/7166>`_ - Fix a backend server error when creating a named restore point.
| `Issue #7175 <https://github.com/pgadmin-org/pgadmin4/issues/7175>`_ - Fix wrong default for FORCE_LOWER in the FLASK_GRAVATAR module.
+46
View File
@@ -0,0 +1,46 @@
***********
Version 8.4
***********
Release date: 2024-03-07
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v8.3.
Supported Database Servers
**************************
**PostgreSQL**: 12, 13, 14, 15, and 16
**EDB Advanced Server**: 12, 13, 14, 15, and 16
Bundled PostgreSQL Utilities
****************************
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 16.1
New features
************
| `Issue #6058 <https://github.com/pgadmin-org/pgadmin4/issues/6058>`_ - Allow preferences customization using a configuration file.
| `Issue #7138 <https://github.com/pgadmin-org/pgadmin4/issues/7138>`_ - Add support for JSON log format.
| `Issue #7204 <https://github.com/pgadmin-org/pgadmin4/issues/7204>`_ - Add --yes option for skipping the confirmation prompt while deleting the user via CLI for scripting purpose.
Housekeeping
************
| `Issue #7097 <https://github.com/pgadmin-org/pgadmin4/issues/7097>`_ - Upgrade CodeMirror from version 5 to 6.
| `Issue #7148 <https://github.com/pgadmin-org/pgadmin4/issues/7148>`_ - Added documentation for Dashboard's System Statistics tab.
| `Issue #7187 <https://github.com/pgadmin-org/pgadmin4/issues/7187>`_ - Separate the application name, branding & version information from the configuration file.
| `Issue #7234 <https://github.com/pgadmin-org/pgadmin4/issues/7234>`_ - Upgrade python packages cryptography to 42.0.x and Flask-Security-Too to 5.3.x.
Bug fixes
*********
| `Issue #6792 <https://github.com/pgadmin-org/pgadmin4/issues/6792>`_ - Fix multiple issues where PasswordExecCommand was not working in server mode and PasswordExecCommand was not loaded when importing servers.
| `Issue #6808 <https://github.com/pgadmin-org/pgadmin4/issues/6808>`_ - Fix the tabbed panel backward/forward shortcut for tabs.
| `Issue #7027 <https://github.com/pgadmin-org/pgadmin4/issues/7027>`_ - Fixed an issue where dependencies and dependents were not showing if a composite type is used as an attribute in another composite type.
| `Issue #7164 <https://github.com/pgadmin-org/pgadmin4/issues/7164>`_ - Fix an issue where constraint check control is enabled in the edit table dialog.
| `Issue #7165 <https://github.com/pgadmin-org/pgadmin4/issues/7165>`_ - Fix an issue where the scripts created by generate script of Schema diff for Table with sequence was not working earlier.
| `Issue #7193 <https://github.com/pgadmin-org/pgadmin4/issues/7193>`_ - Ensure that the OAuth2 session is logged out when users log out from pgAdmin.
| `Issue #7217 <https://github.com/pgadmin-org/pgadmin4/issues/7217>`_ - Remove role related checks on the UI dashboard when terminating session/query and let PostgreSQL take care of it.
| `Issue #7225 <https://github.com/pgadmin-org/pgadmin4/issues/7225>`_ - Fix an issue where type column in dependents/dependencies tab is not showing correct label.
| `Issue #7258 <https://github.com/pgadmin-org/pgadmin4/issues/7258>`_ - Unsafe Deserialization and Remote Code Execution by an Authenticated user in pgAdmin 4 (CVE-2024-2044).
+54
View File
@@ -0,0 +1,54 @@
***********
Version 8.5
***********
Release date: 2024-04-04
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v8.5.
Supported Database Servers
**************************
**PostgreSQL**: 12, 13, 14, 15, and 16
**EDB Advanced Server**: 12, 13, 14, 15, and 16
Bundled PostgreSQL Utilities
****************************
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 16.1
New features
************
| `Issue #5611 <https://github.com/pgadmin-org/pgadmin4/issues/5611>`_ - Added support for provider, deterministic, version and RULES parameter while creating collation.
| `Issue #7098 <https://github.com/pgadmin-org/pgadmin4/issues/7098>`_ - Added support for EDB Job Scheduler.
| `Issue #7216 <https://github.com/pgadmin-org/pgadmin4/issues/7216>`_ - Added support for viewing Log Streaming replication Based Clusters.
| `Issue #7221 <https://github.com/pgadmin-org/pgadmin4/issues/7221>`_ - Added support for UNIX socket in entrypoint.sh for Docker implementation.
Housekeeping
************
Bug fixes
*********
| `Issue #4413 <https://github.com/pgadmin-org/pgadmin4/issues/4413>`_ - Fixed an issue in Schema Diff where Columns with sequences get altered unnecessarily.
| `Issue #7111 <https://github.com/pgadmin-org/pgadmin4/issues/7111>`_ - Fixed an issue where user was unable to share a newly registered server.
| `Issue #7116 <https://github.com/pgadmin-org/pgadmin4/issues/7116>`_ - Bug fixes and improvements in pgAdmin CLI.
| `Issue #7139 <https://github.com/pgadmin-org/pgadmin4/issues/7139>`_ - Fixed an issue where the 'Save Password' option for SSH tunneling password was consistently disabled.
| `Issue #7165 <https://github.com/pgadmin-org/pgadmin4/issues/7165>`_ - Fixed schema diff wrong query generation for table, foreign table and sequence.
| `Issue #7210 <https://github.com/pgadmin-org/pgadmin4/issues/7210>`_ - Fixed an issue where table properties were not updating from properties dialog.
| `Issue #7218 <https://github.com/pgadmin-org/pgadmin4/issues/7218>`_ - Fixed an issue where maximize icon is missing from query tool panel.
| `Issue #7229 <https://github.com/pgadmin-org/pgadmin4/issues/7229>`_ - Fix an issue in table dialog where changing column name was not syncing table constraints appropriately.
| `Issue #7248 <https://github.com/pgadmin-org/pgadmin4/issues/7248>`_ - Fixed rollback and commit button activation on execute button click.
| `Issue #7255 <https://github.com/pgadmin-org/pgadmin4/issues/7255>`_ - Fixed an issue where taking backup of a shared server was using server owner's user name.
| `Issue #7262 <https://github.com/pgadmin-org/pgadmin4/issues/7262>`_ - Fix an issue in editor where replace option in query tool edit menu is not working on non-Mac OS.
| `Issue #7268 <https://github.com/pgadmin-org/pgadmin4/issues/7268>`_ - Fix an issue in editor where Format SQL shortcut and multiline selection are not working.
| `Issue #7269 <https://github.com/pgadmin-org/pgadmin4/issues/7269>`_ - Fix an issue in editor where "Use Spaces?" Preference of Editor is not working.
| `Issue #7271 <https://github.com/pgadmin-org/pgadmin4/issues/7271>`_ - Fixed an issue where Triggers, Rules, Indexes were absent from the Schema Diff when comparing views.
| `Issue #7277 <https://github.com/pgadmin-org/pgadmin4/issues/7277>`_ - Fix an issue in query tool where toggle case of selected text loses selection.
| `Issue #7299 <https://github.com/pgadmin-org/pgadmin4/issues/7299>`_ - Fix query tool autocomplete results when cursor is in between the SQL query.
| `Issue #7305 <https://github.com/pgadmin-org/pgadmin4/issues/7305>`_ - Fix an issue in query tool where custom keyboard shortcuts are not working for some.
| `Issue #7304 <https://github.com/pgadmin-org/pgadmin4/issues/7304>`_ - Fixed the issue where the update-user CLI command doesn't change the password.
| `Issue #7308 <https://github.com/pgadmin-org/pgadmin4/issues/7308>`_ - Fixed issue related to email authentication of Two-factor authentication.
| `Issue #7326 <https://github.com/pgadmin-org/pgadmin4/issues/7326>`_ - Fixed a remote code execution issue in the validate binary path (CVE-2024-3116).
+45
View File
@@ -0,0 +1,45 @@
***********
Version 8.6
***********
Release date: 2024-05-02
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v8.5.
Supported Database Servers
**************************
**PostgreSQL**: 12, 13, 14, 15, and 16
**EDB Advanced Server**: 12, 13, 14, 15, and 16
Bundled PostgreSQL Utilities
****************************
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 16.1
New features
************
| `Issue #6728 <https://github.com/pgadmin-org/pgadmin4/issues/6728>`_ - Added the new columns "last_seq_scan" and "last_idx_scan" from the pg_stat_all_tables and pg_stat_all_indexes tables respectively to the Statistics tab.
| `Issue #7163 <https://github.com/pgadmin-org/pgadmin4/issues/7163>`_ - Added support for excluding multiple tables while taking Backup.
Housekeeping
************
| `Issue #7213 <https://github.com/pgadmin-org/pgadmin4/issues/7213>`_ - Update UI library MUI from v4 to v5, more details `here <https://github.com/pgadmin-org/pgadmin4/commit/102e0a983956be57fdb63abb356b5b8fcb8b74ba>`_
| `Issue #7362 <https://github.com/pgadmin-org/pgadmin4/issues/7362>`_ - Upgraded Flask, Flask-Security-Too, Werkzeug, and other dependencies, ensuring compatibility with Python 3.7.
Bug fixes
*********
| `Issue #2410 <https://github.com/pgadmin-org/pgadmin4/issues/2410>`_ - Fixed all input boxes in pgAdmin to show browser auto-fill only where it is relevant.
| `Issue #7173 <https://github.com/pgadmin-org/pgadmin4/issues/7173>`_ - Install dbus-python, an in-direct dependency of the Keyring package as a system package for Debian platforms.
| `Issue #7275 <https://github.com/pgadmin-org/pgadmin4/issues/7275>`_ - Fixed an issue where debugger was not scrolling automatically on stepping.
| `Issue #7282 <https://github.com/pgadmin-org/pgadmin4/issues/7282>`_ - Fixed an XSS vulnerability in the /settings/store endpoint (CVE-2024-4216).
| `Issue #7294 <https://github.com/pgadmin-org/pgadmin4/issues/7294>`_ - Fixed an issue where double dollar quoted code is treated as string in syntax highlighter.
| `Issue #7317 <https://github.com/pgadmin-org/pgadmin4/issues/7317>`_ - Fixed an issue where pressing backspace should remove the spaces and not the entire tab width, on enabling 'Use spaces?' in the preferences.
| `Issue #7334 <https://github.com/pgadmin-org/pgadmin4/issues/7334>`_ - Fixed an issue where incorrect select/exec scripts were generated for functions/procedures.
| `Issue #7372 <https://github.com/pgadmin-org/pgadmin4/issues/7372>`_ - Fixed an issue where connection to the database is not automatically re-established after connectivity drop.
| `Issue #7384 <https://github.com/pgadmin-org/pgadmin4/issues/7384>`_ - Fixed an issue when closing the view data second tab; it raises the error that the 'ViewCommand' object has no attribute 'auto_commit'.
| `Issue #7390 <https://github.com/pgadmin-org/pgadmin4/issues/7390>`_ - Fixed violates check constraint issue when creating a pgAgent schedule.
| `Issue #7425 <https://github.com/pgadmin-org/pgadmin4/issues/7425>`_ - Fixed Multi-Factor Authentication bypass vulnerability (CVE-2024-4215).
+46
View File
@@ -0,0 +1,46 @@
.. _replica_nodes_dialog:
****************************
`Replica Node Dialog`:index:
****************************
Use The *Replica Node* dialog to view a standby instance being replicated
using log based streaming replication. Streaming replication allows a standby
server to stay more up-to-date than is possible with file-based log shipping.
The standby connects to the primary, which streams WAL records to the standby as
they're generated, without waiting for the WAL file to be filled.
The *Replica Node* dialog organizes the information through the following tabs:
*General*, *Replication Slot*
.. image:: images/replica_nodes_general.png
:alt: Replica Node dialog general tab
:align: center
* The *PID* field is the process ID of a WAL sender process.
* The *Username* field is the name of the user logged into this WAL sender process.
* The *App Name* field is the name of the application that is connected to this WAL sender.
* The *Client Address* field is the IP address of the client connected to this WAL sender.
If this field is null, it indicates that the client is connected via a Unix socket on the server machine.
* The *Client Hostname* field is the host name of the connected client, as reported by a reverse DNS lookup
of client_addr.This field will only be non-null for IP connections, and only when log_hostname is enabled.
* The *Client Port* field is the TCP port number that the client is using for communication with
this WAL sender, or -1 if a Unix socket is used.
* The *State* field is the current WAL sender state.
Click the *Replication Slot* tab to continue.
.. image:: images/replica_nodes_replication.png
:alt: Replica Node dialog replication slot tab
:align: center
* The *Slot Name* field is a unique, cluster-wide identifier for the replication slot.
* The *Slot Type* field is the slot type - physical or logical
* The *Active* field is True if this slot is currently actively being used.
Other buttons:
* Click the *Info* button (i) to access online help.
* Click the *Save* button to save work.
* Click the *Close* button to exit without saving work.
* Click the *Reset* button to restore configuration parameters.
+2 -4
View File
@@ -57,15 +57,13 @@ Use the *Privileges* tab to grant privileges to the role.
drop roles. The default value is *No*.
* Move the *Create databases* switch to the *Yes* position to control whether a
role can create databases. The default value is *No*.
* The *Update catalog?* switch is disabled until the role is given superuser
privileges. Move the *Update catalogs?* switch to the *No* position to control
whether a role can update catalogs. The default value is *Yes* when the
*Superuser* switch is in the *Yes* position.
* Move the *Inherit rights from the parent roles?* switch to the *No* position
if a role does not inherit privileges. The default value is *Yes*.
* Move the *Can initiate streaming replication and backups?* switch to the *Yes*
position to control whether a role can initiate streaming replication or put
the system in and out of backup mode. The default value is *No*.
* Move the *Bypass RLS?* switch to the *Yes* position to control whether a
role can bypasses every row-level security (RLS) policy. The default value is *No*.
.. image:: images/role_membership.png
:alt: Role dialog membership tab
+2 -2
View File
@@ -103,7 +103,7 @@ In order to configure the Python code, follow these steps:
.. code-block:: bash
# python setup.py
# python setup.py setup-db
5. Change the ownership of the configuration database to the user that the web server
processes will run as, for example, assuming that the web server runs as user
@@ -312,4 +312,4 @@ Additional Information
relies on the *sys.executable* variable in Python to do this. In some cases,
you may need to override that value to ensure the correct interpreter is
used, instead of the WSGI host process. For example, uWSGI offers the
*--py-sys-executable* command line option to achieve this.
*--py-sys-executable* command line option to achieve this.
+54 -3
View File
@@ -9,12 +9,14 @@ display information about the object currently selected in the *pgAdmin* tree
control in the left window. Select a tab to access information about the
highlighted object in the tree control.
.. image:: images/main_dashboard.png
.. image:: images/main_dashboard_general.png
:alt: Dashboard panel
:align: center
The graphs on the *Dashboard* tab provides an active analysis of the usage
statistics for the selected server or database:
The graphs and tables on the *Dashboard* tab provides an active analysis of system statistics and the usage
statistics for the selected server or database.
Click the *General* tab to get the usage statistics for the selected server or database:
* The *Server sessions* or *Database sessions* graph displays the interactions
with the server or database.
@@ -33,6 +35,7 @@ transactions, and server configuration (if applicable). The information is
presented in context-sensitive tables. Use controls located above the table to:
* Click the *Refresh* button to update the information displayed in each table.
* Select *Active sessions only* checkbox to get the information about active sessions only from the list of all the sessions.
* Enter a value in the *Search* box to restrict the table content to one or more
sessions that satisfy the search criteria. For example, you can enter a
process ID to locate a specific session, or a session state (such as *idle*)
@@ -53,6 +56,54 @@ session:
* Use the *Details* icon (located in the third column) to open the *Details*
tab; the tab displays information about the selected session.
Click the *System Statistics* tab to get the statistics for the system:
.. image:: images/main_dashboard_sys_statistics_summary.png
:alt: Summary panel
:align: center
Click the *Summary* tab to get the summary of the system:
* The *OS Information* table displays the basic information about the operating system.
* The *CPU Information* table displays the information about system CPU.
* The *Process & Handle Count* graph displays the total count of processes running and handles opened for the system.
.. image:: images/main_dashboard_sys_statistics_cpu.png
:alt: CPU panel
:align: center
Click the *CPU* tab to get the detailed usage statistics of the system CPU:
* The *CPU Usage* graph displays the percentage of time spent by CPU for user normal process, user niced process, kernel mode process, idle mode.
* The *Load average* graph displays the average load of the system over 1, 5, 10, and 15 minute intervals.
* The *Process CPU Usage* table displays information about CPU for each process ID. Enter a value like process ID or name in the Search box to restrict the table content to one or more processes that satisfy the search criteria.
.. image:: images/main_dashboard_sys_statistics_memory.png
:alt: Memory panel
:align: center
Click the *Memory* tab to get the detailed usage statistics of the system memory:
* The *Memory Usage* graph displays the size of total, free and used memory per seconds in Gigabytes.
* The *Swap Memory* graph displays the size of total, free and used swap memory per seconds in Gigabytes.
* The *Process Memory Usage* table displays information about memory for each process ID. Enter a value like process ID or name in the Search box to restrict the table content to one or more processes that satisfy the search criteria.
.. image:: images/main_dashboard_sys_statistics_storage.png
:alt: Storage panel
:align: center
Click the *Storage* tab to get the detailed information of the system storage:
* The *Disk Information* table displays the information about the disk, such as file system type, mount point, total space, used space and free space and count of total, free, used inodes. The pie graph shows the total spaces in Gigabytes and stacked bar graph shows the used and available space in Gigabytes, for different mount points for file system.
* The *Swap Memory* graph displays the size of total, free and used swap memory per seconds in Gigabytes.
The *disk0* panel displays statistics about the only I/O block device of system:
* The *I/O Operations Count* graph displays the count of read and write operations per second.
* The *Data Transfer* graph displays the size of read and writes happened in Gigabytes per second.
* The *Time spent in I/O operations* graph displays the time spent by the device for reading and writing in minutes per second.
.. image:: images/main_properties_table.png
:alt: Properties panel
:align: center
+2 -1
View File
@@ -187,11 +187,12 @@ Delete User
***********
To delete the user, invoke ``setup.py`` with ``delete-user`` command line option, followed by
username and auth_source. For Internal users, email adress will be used instead of username.
username and auth_source. For Internal users, email adress will be used instead of username. the option ``--yes`` is available to skip the confirmation prompt before deleting the user.
.. code-block:: bash
/path/to/python /path/to/setup.py delete-user user1@gmail.com --auth-source internal
/path/to/python /path/to/setup.py delete-user user2@gmail.com --auth-source internal --yes
/path/to/python /path/to/setup.py delete-user ldapuser --auth-source ldap
+2 -2
View File
@@ -50,7 +50,7 @@ Version: ${APP_LONG_VERSION}
Architecture: ${OS_ARCH}
Section: database
Priority: optional
Depends: ${PYTHON_BINARY}, libpq5 (>= 11.0), libgssapi-krb5-2
Depends: ${PYTHON_BINARY}, libpq5 (>= 11.0), libgssapi-krb5-2, python-dbus | python3-dbus
Recommends: postgresql-client | postgresql-client-15 | postgresql-client-14 | postgresql-client-13 | postgresql-client-12 | postgresql-client-11 | postgresql-client-10
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
Description: The core server package 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.
@@ -73,7 +73,7 @@ Version: ${APP_LONG_VERSION}
Architecture: ${OS_ARCH}
Section: database
Priority: optional
Depends: ${APP_NAME}-server (= ${APP_LONG_VERSION}), libatomic1, xdg-utils
Depends: ${APP_NAME}-server (= ${APP_LONG_VERSION}), libatomic1, xdg-utils, python-dbus | python3-dbus
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.
EOF
+25 -3
View File
@@ -64,6 +64,7 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
/venv/bin/python3 run_pgadmin.py
export PGADMIN_SERVER_JSON_FILE="${PGADMIN_SERVER_JSON_FILE:-/pgadmin4/servers.json}"
export PGADMIN_PREFERENCES_JSON_FILE="${PGADMIN_PREFERENCES_JSON_FILE:-/pgadmin4/preferences.json}"
# Pre-load any required servers
if [ -f "${PGADMIN_SERVER_JSON_FILE}" ]; then
@@ -75,6 +76,17 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
/venv/bin/python3 /pgadmin4/setup.py load-servers "${PGADMIN_SERVER_JSON_FILE}" --user "${PGADMIN_DEFAULT_EMAIL}"
fi
fi
if [ -f "${PGADMIN_PREFERENCES_JSON_FILE}" ]; then
# When running in Desktop mode, no user is created
# so we have to import servers anonymously
if [ "${PGADMIN_CONFIG_SERVER_MODE}" = "False" ]; then
DESKTOP_USER=$(cd /pgadmin4 && /venv/bin/python3 -c 'import config; print(config.DESKTOP_USER)')
/venv/bin/python3 /pgadmin4/setup.py set-prefs "${DESKTOP_USER}" --input-file "${PGADMIN_PREFERENCES_JSON_FILE}"
else
/venv/bin/python3 /pgadmin4/setup.py set-prefs "${PGADMIN_DEFAULT_EMAIL}" --input-file "${PGADMIN_PREFERENCES_JSON_FILE}"
fi
fi
fi
# Start Postfix to handle password resets etc.
@@ -89,8 +101,18 @@ TIMEOUT=$(cd /pgadmin4 && /venv/bin/python3 -c 'import config; print(config.SESS
# NOTE: currently pgadmin can run only with 1 worker due to sessions implementation
# Using --threads to have multi-threaded single-process worker
if [ -n "${PGADMIN_ENABLE_TLS}" ]; then
exec /venv/bin/gunicorn --limit-request-line "${GUNICORN_LIMIT_REQUEST_LINE:-8190}" --timeout "${TIMEOUT}" --bind "${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-443}" -w 1 --threads "${GUNICORN_THREADS:-25}" --access-logfile "${GUNICORN_ACCESS_LOGFILE:--}" --keyfile /certs/server.key --certfile /certs/server.cert -c gunicorn_config.py run_pgadmin:app
if [ -n "${PGADMIN_ENABLE_SOCK}" ]; then
BIND_ADDRESS="unix:/run/pgadmin/pgadmin.sock"
else
exec /venv/bin/gunicorn --limit-request-line "${GUNICORN_LIMIT_REQUEST_LINE:-8190}" --timeout "${TIMEOUT}" --bind "${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-80}" -w 1 --threads "${GUNICORN_THREADS:-25}" --access-logfile "${GUNICORN_ACCESS_LOGFILE:--}" -c gunicorn_config.py run_pgadmin:app
if [ -n "${PGADMIN_ENABLE_TLS}" ]; then
BIND_ADDRESS="${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-443}"
else
BIND_ADDRESS="${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-80}"
fi
fi
if [ -n "${PGADMIN_ENABLE_TLS}" ]; then
exec /venv/bin/gunicorn --limit-request-line "${GUNICORN_LIMIT_REQUEST_LINE:-8190}" --timeout "${TIMEOUT}" --bind "${BIND_ADDRESS}" -w 1 --threads "${GUNICORN_THREADS:-25}" --access-logfile "${GUNICORN_ACCESS_LOGFILE:--}" --keyfile /certs/server.key --certfile /certs/server.cert -c gunicorn_config.py run_pgadmin:app
else
exec /venv/bin/gunicorn --limit-request-line "${GUNICORN_LIMIT_REQUEST_LINE:-8190}" --timeout "${TIMEOUT}" --bind "${BIND_ADDRESS}" -w 1 --threads "${GUNICORN_THREADS:-25}" --access-logfile "${GUNICORN_ACCESS_LOGFILE:--}" -c gunicorn_config.py run_pgadmin:app
fi
+4 -4
View File
@@ -10,11 +10,11 @@ _setup_env() {
SERVERROOT=${BUILDROOT}/server
WEBROOT=${BUILDROOT}/web
DISTROOT=$(realpath "${WD}/../../dist")
APP_RELEASE=$(grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //' | sed 's/ //g' | tr '[:upper:]' '[:lower:]')
APP_RELEASE=$(grep "^APP_RELEASE" web/version.py | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" web/version.py | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" web/branding.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //' | sed 's/ //g' | tr '[:upper:]' '[:lower:]')
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
APP_SUFFIX=$(grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
APP_SUFFIX=$(grep "^APP_SUFFIX" web/version.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
if [ -n "${APP_SUFFIX}" ]; then
APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
fi
+7 -4
View File
@@ -2,11 +2,11 @@
_setup_env() {
FUNCS_DIR=$(cd "$(dirname "$0")" && pwd)/../..
APP_RELEASE=$(grep "^APP_RELEASE" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
APP_RELEASE=$(grep "^APP_RELEASE" "${FUNCS_DIR}/web/version.py" | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" "${FUNCS_DIR}/web/version.py" | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" "${FUNCS_DIR}/web/branding.py" | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
APP_SUFFIX=$(grep "^APP_SUFFIX" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
APP_SUFFIX=$(grep "^APP_SUFFIX" "${FUNCS_DIR}/web/version.py" | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
if [ -n "${APP_SUFFIX}" ]; then
APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
fi
@@ -288,6 +288,9 @@ _complete_bundle() {
# Build node modules
pushd "${SOURCE_DIR}/web" > /dev/null || exit
corepack enable
yarn set version berry
yarn set version 3
yarn install
yarn run bundle
+4 -4
View File
@@ -21,11 +21,11 @@ if [ ! -d .git ] && [ ! -f .git/config ]; then
fi
# Get the required package info
APP_RELEASE=$(grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
APP_RELEASE=$(grep "^APP_RELEASE" web/version.py | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" web/version.py | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" web/branding.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
APP_SUFFIX=$(grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
APP_SUFFIX=$(grep "^APP_SUFFIX" web/version.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
if [ -n "${APP_SUFFIX}" ]; then
export APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
fi
+4 -4
View File
@@ -21,11 +21,11 @@ if [ ! -d .git ] && [ ! -f .git/config ]; then
fi
# Get the required package info
APP_RELEASE=$(grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
APP_RELEASE=$(grep "^APP_RELEASE" web/version.py | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" web/version.py | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" web/branding.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
APP_SUFFIX=$(grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
APP_SUFFIX=$(grep "^APP_SUFFIX" web/version.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
if [ -n "${APP_SUFFIX}" ]; then
export APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
fi
+11 -9
View File
@@ -8,9 +8,8 @@
#
###############################################################################
Flask==2.3.*; python_version > '3.7'
Flask==3.0.*; python_version > '3.7'
Flask==2.2.*; python_version <= '3.7'
Flask-Gravatar==0.*
Flask-Login==0.*
Flask-Mail==0.*
Flask-Migrate==4.*
@@ -23,13 +22,13 @@ Flask-Compress==1.*
Flask-Paranoid==0.*
Flask-Babel==4.0.*; python_version > '3.7'
Flask-Babel==3.1.*; python_version <= '3.7'
Flask-Security-Too==5.2.*; python_version > '3.7'
Flask-Security-Too==5.4.*; python_version > '3.7'
Flask-Security-Too==5.1.*; python_version <= '3.7'
Flask-SocketIO==5.3.*
WTForms==3.1.*; python_version > '3.7'
WTForms==3.0.*; python_version <= '3.7'
passlib==1.*
pytz==2023.*
pytz==2024.*
speaklater3==1.*
sqlparse==0.*
psutil==5.9.*
@@ -37,7 +36,7 @@ psycopg[c]==3.1.12
python-dateutil==2.*
SQLAlchemy==2.*
bcrypt==4.0.*
cryptography==41.0.*
cryptography==42.0.*
sshtunnel==0.*
ldap3==2.*
gssapi==1.8.*
@@ -45,7 +44,8 @@ eventlet==0.34.2
httpagentparser==1.9.*
user-agents==2.2.0
pywinpty==2.0.*; sys_platform=="win32"
Authlib==1.2.*
Authlib==1.3.*; python_version > '3.7'
Authlib==1.2.*; python_version <= '3.7'
pyotp==2.*
qrcode==7.*
boto3==1.33.*
@@ -55,10 +55,12 @@ azure-mgmt-resource==23.0.1
azure-mgmt-subscription==3.1.1
azure-identity==1.15.0
google-api-python-client==2.*
google-auth-oauthlib==1.1.0
google-auth-oauthlib==1.2.0
keyring==24.*; python_version > '3.7'
keyring==23.*; python_version <= '3.7'
Werkzeug==2.3.*; python_version > '3.7'
Werkzeug==3.0.*; python_version > '3.7'
Werkzeug==2.2.3; python_version <= '3.7'
typer[all]==0.9.*
typer[all]==0.12.*
setuptools==69.*; python_version >= '3.12'
jsonformatter~=0.3.2
libgravatar==1.0.*
+4 -3
View File
@@ -23,14 +23,15 @@
"256": "assets/pgAdmin4.png"
},
"dependencies": {
"axios": "^1.5.1",
"axios": "^1.6.8",
"bootstrap": "^4.5.3"
},
"devDependencies": {
"eslint": "^8.50.0",
"eslint": "^9.0.0",
"nw": "0.77.0"
},
"scripts": {
"linter": "yarn eslint --no-eslintrc -c .eslintrc.js --ext .js ."
}
},
"packageManager": "yarn@3.6.4"
}
+11 -17
View File
@@ -72,12 +72,10 @@ const getAppDataPath = () => {
default:
if (platform().startsWith('win')) {
appDataPath = path.join(process.env.APPDATA, 'pgadmin');
} else if ('XDG_CONFIG_HOME' in process.env) {
appDataPath = path.join(process.env.XDG_CONFIG_HOME, 'pgadmin');
} else {
if ('XDG_CONFIG_HOME' in process.env) {
appDataPath = path.join(process.env.XDG_CONFIG_HOME, 'pgadmin');
} else {
appDataPath = path.join(homedir(), '.config', 'pgadmin');
}
appDataPath = path.join(homedir(), '.config', 'pgadmin');
}
}
@@ -108,12 +106,10 @@ const getLocalAppDataPath = () => {
default:
if (platform().startsWith('win')) {
localAppDataPath = path.join(process.env.LOCALAPPDATA, 'pgadmin');
} else if ('XDG_DATA_HOME' in process.env) {
localAppDataPath = path.join(process.env.XDG_DATA_HOME, 'pgadmin');
} else {
if ('XDG_DATA_HOME' in process.env) {
localAppDataPath = path.join(process.env.XDG_DATA_HOME, 'pgadmin');
} else {
localAppDataPath = path.join(homedir(), '.local', 'share', 'pgadmin');
}
localAppDataPath = path.join(homedir(), '.local', 'share', 'pgadmin');
}
}
@@ -412,14 +408,12 @@ let ConfigureStore = {
...this.jsonData,
...key,
};
} else {
if(value === '' || value == null || typeof(value) == 'undefined') {
if(this.jsonData[key] !== undefined) {
delete this.jsonData[key];
}
} else {
this.jsonData[key] = value;
} else if(value === '' || value == null || typeof(value) == 'undefined') {
if(this.jsonData[key] !== undefined) {
delete this.jsonData[key];
}
} else {
this.jsonData[key] = value;
}
},
};
+3 -5
View File
@@ -80,7 +80,7 @@ function startDesktopMode() {
process.env[key] = updated_path;
}
if (platform() === 'win32' && (key === 'PATH' || key == 'Path')) {
if (platform() === 'win32' && key.toUpperCase() === 'PATH') {
let _libpq_path = path.join(path.dirname(path.dirname(path.resolve(pgadminFile))), 'runtime');
process.env[key] = _libpq_path + ';' + process.env[key];
}
@@ -633,10 +633,8 @@ function updateCheckedMenuItem(menuItem) {
sm.checked = menuItem.checked
}
})
} else {
if (sub.label == menuItem.label && type == 'checkbox') {
sub.checked = menuItem.checked
}
} else if (sub.label == menuItem.label && type == 'checkbox') {
sub.checked = menuItem.checked
}
});
});
+95 -129
View File
@@ -30,38 +30,38 @@ __metadata:
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^2.1.2":
version: 2.1.2
resolution: "@eslint/eslintrc@npm:2.1.2"
"@eslint/eslintrc@npm:^3.0.2":
version: 3.0.2
resolution: "@eslint/eslintrc@npm:3.0.2"
dependencies:
ajv: ^6.12.4
debug: ^4.3.2
espree: ^9.6.0
globals: ^13.19.0
espree: ^10.0.1
globals: ^14.0.0
ignore: ^5.2.0
import-fresh: ^3.2.1
js-yaml: ^4.1.0
minimatch: ^3.1.2
strip-json-comments: ^3.1.1
checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7
checksum: 05bf516b60fbb1c1bdc264e081118b2172c5feb071cd665976482c5614b8e7950991175fea3ca6b1f482ced7cb0d0aa34ceab3a508d6bf1ff17b4efc0911e293
languageName: node
linkType: hard
"@eslint/js@npm:8.52.0":
version: 8.52.0
resolution: "@eslint/js@npm:8.52.0"
checksum: 490893b8091a66415f4ac98b963d23eb287264ea3bd6af7ec788f0570705cf64fd6ab84b717785980f55e39d08ff5c7fde6d8e4391ccb507169370ce3a6d091a
"@eslint/js@npm:9.0.0":
version: 9.0.0
resolution: "@eslint/js@npm:9.0.0"
checksum: bd8692d68fc79306ad44999fdec9c1ab39c72c3947034f5a251a9148bc175f1d831b54cbbe522d69d88d9d4f1b9e85a1495513553b8528fd8b107d77eadb713f
languageName: node
linkType: hard
"@humanwhocodes/config-array@npm:^0.11.13":
version: 0.11.13
resolution: "@humanwhocodes/config-array@npm:0.11.13"
"@humanwhocodes/config-array@npm:^0.12.3":
version: 0.12.3
resolution: "@humanwhocodes/config-array@npm:0.12.3"
dependencies:
"@humanwhocodes/object-schema": ^2.0.1
debug: ^4.1.1
"@humanwhocodes/object-schema": ^2.0.3
debug: ^4.3.1
minimatch: ^3.0.5
checksum: f8ea57b0d7ed7f2d64cd3944654976829d9da91c04d9c860e18804729a33f7681f78166ef4c761850b8c324d362f7d53f14c5c44907a6b38b32c703ff85e4805
checksum: 4212cf12567538675f45f09dae9715978fac805fbc6f194ce31e62dbbe01ca286b87478463c042883bf4451998be737012dd0882530f55ad0c0e901d963b5123
languageName: node
linkType: hard
@@ -72,10 +72,10 @@ __metadata:
languageName: node
linkType: hard
"@humanwhocodes/object-schema@npm:^2.0.1":
version: 2.0.1
resolution: "@humanwhocodes/object-schema@npm:2.0.1"
checksum: 24929487b1ed48795d2f08346a0116cc5ee4634848bce64161fb947109352c562310fd159fc64dda0e8b853307f5794605191a9547f7341158559ca3c8262a45
"@humanwhocodes/object-schema@npm:^2.0.3":
version: 2.0.3
resolution: "@humanwhocodes/object-schema@npm:2.0.3"
checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631
languageName: node
linkType: hard
@@ -116,27 +116,20 @@ __metadata:
linkType: hard
"@types/node@npm:*":
version: 20.8.10
resolution: "@types/node@npm:20.8.10"
version: 20.12.7
resolution: "@types/node@npm:20.12.7"
dependencies:
undici-types: ~5.26.4
checksum: 7c61190e43e8074a1b571e52ff14c880bc67a0447f2fe5ed0e1a023eb8a23d5f815658edb98890f7578afe0f090433c4a635c7c87311762544e20dd78723e515
checksum: 7cc979f7e2ca9a339ec71318c3901b9978555257929ef3666987f3e447123bc6dc92afcc89f6347e09e07d602fde7d51bcddea626c23aa2bb74aeaacfd1e1686
languageName: node
linkType: hard
"@types/responselike@npm:^1.0.0":
version: 1.0.2
resolution: "@types/responselike@npm:1.0.2"
version: 1.0.3
resolution: "@types/responselike@npm:1.0.3"
dependencies:
"@types/node": "*"
checksum: ff1767e947eb7d49849e4566040453efcd894888e85b398f7f8cb731552f303f26aceda573b680a142b77ec5fb6c79535d9c6d047d9f936c386dbf3863d2ae17
languageName: node
linkType: hard
"@ungap/structured-clone@npm:^1.2.0":
version: 1.2.0
resolution: "@ungap/structured-clone@npm:1.2.0"
checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524
checksum: 6ac4b35723429b11b117e813c7acc42c3af8b5554caaf1fc750404c1ae59f9b7376bc69b9e9e194a5a97357a597c2228b7173d317320f0360d617b6425212f58
languageName: node
linkType: hard
@@ -149,12 +142,12 @@ __metadata:
languageName: node
linkType: hard
"acorn@npm:^8.9.0":
version: 8.11.2
resolution: "acorn@npm:8.11.2"
"acorn@npm:^8.11.3":
version: 8.11.3
resolution: "acorn@npm:8.11.3"
bin:
acorn: bin/acorn
checksum: 818450408684da89423e3daae24e4dc9b68692db8ab49ea4569c7c5abb7a3f23669438bf129cc81dfdada95e1c9b944ee1bfca2c57a05a4dc73834a612fbf6a7
checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c
languageName: node
linkType: hard
@@ -214,14 +207,14 @@ __metadata:
languageName: node
linkType: hard
"axios@npm:^1.5.1":
version: 1.6.0
resolution: "axios@npm:1.6.0"
"axios@npm:^1.6.8":
version: 1.6.8
resolution: "axios@npm:1.6.8"
dependencies:
follow-redirects: ^1.15.0
follow-redirects: ^1.15.6
form-data: ^4.0.0
proxy-from-env: ^1.1.0
checksum: c7c9f2ae9e0b9bad7d6f9a4dff030930b12ee667dedf54c3c776714f91681feb743c509ac0796ae5c01e12c4ab4a2bee74905068dd200fbc1ab86f9814578fb0
checksum: bf007fa4b207d102459300698620b3b0873503c6d47bf5a8f6e43c0c64c90035a4f698b55027ca1958f61ab43723df2781c38a99711848d232cad7accbcdfcdd
languageName: node
linkType: hard
@@ -460,7 +453,7 @@ __metadata:
languageName: node
linkType: hard
"debug@npm:^4.1.1, debug@npm:^4.3.2":
"debug@npm:^4.3.1, debug@npm:^4.3.2":
version: 4.3.4
resolution: "debug@npm:4.3.4"
dependencies:
@@ -556,15 +549,6 @@ __metadata:
languageName: node
linkType: hard
"doctrine@npm:^3.0.0":
version: 3.0.0
resolution: "doctrine@npm:3.0.0"
dependencies:
esutils: ^2.0.2
checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce
languageName: node
linkType: hard
"download@npm:^5.0.3":
version: 5.0.3
resolution: "download@npm:5.0.3"
@@ -610,57 +594,60 @@ __metadata:
languageName: node
linkType: hard
"eslint-scope@npm:^7.2.2":
version: 7.2.2
resolution: "eslint-scope@npm:7.2.2"
"eslint-scope@npm:^8.0.1":
version: 8.0.1
resolution: "eslint-scope@npm:8.0.1"
dependencies:
esrecurse: ^4.3.0
estraverse: ^5.2.0
checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e
checksum: 67a5a39312dadb8c9a677df0f2e8add8daf15280b08bfe07f898d5347ee2d7cd2a1f5c2760f34e46e8f5f13f7192f47c2c10abe676bfa4173ae5539365551940
languageName: node
linkType: hard
"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3":
"eslint-visitor-keys@npm:^3.3.0":
version: 3.4.3
resolution: "eslint-visitor-keys@npm:3.4.3"
checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60
languageName: node
linkType: hard
"eslint@npm:^8.50.0":
version: 8.52.0
resolution: "eslint@npm:8.52.0"
"eslint-visitor-keys@npm:^4.0.0":
version: 4.0.0
resolution: "eslint-visitor-keys@npm:4.0.0"
checksum: 5c09f89cf29d87cdbfbac38802a880d3c2e65f8cb61c689888346758f1e24a4c7f6caefeac9474dfa52058a99920623599bdb00516976a30134abeba91275aa2
languageName: node
linkType: hard
"eslint@npm:^9.0.0":
version: 9.0.0
resolution: "eslint@npm:9.0.0"
dependencies:
"@eslint-community/eslint-utils": ^4.2.0
"@eslint-community/regexpp": ^4.6.1
"@eslint/eslintrc": ^2.1.2
"@eslint/js": 8.52.0
"@humanwhocodes/config-array": ^0.11.13
"@eslint/eslintrc": ^3.0.2
"@eslint/js": 9.0.0
"@humanwhocodes/config-array": ^0.12.3
"@humanwhocodes/module-importer": ^1.0.1
"@nodelib/fs.walk": ^1.2.8
"@ungap/structured-clone": ^1.2.0
ajv: ^6.12.4
chalk: ^4.0.0
cross-spawn: ^7.0.2
debug: ^4.3.2
doctrine: ^3.0.0
escape-string-regexp: ^4.0.0
eslint-scope: ^7.2.2
eslint-visitor-keys: ^3.4.3
espree: ^9.6.1
eslint-scope: ^8.0.1
eslint-visitor-keys: ^4.0.0
espree: ^10.0.1
esquery: ^1.4.2
esutils: ^2.0.2
fast-deep-equal: ^3.1.3
file-entry-cache: ^6.0.1
file-entry-cache: ^8.0.0
find-up: ^5.0.0
glob-parent: ^6.0.2
globals: ^13.19.0
graphemer: ^1.4.0
ignore: ^5.2.0
imurmurhash: ^0.1.4
is-glob: ^4.0.0
is-path-inside: ^3.0.3
js-yaml: ^4.1.0
json-stable-stringify-without-jsonify: ^1.0.1
levn: ^0.4.1
lodash.merge: ^4.6.2
@@ -671,18 +658,18 @@ __metadata:
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
checksum: fd22d1e9bd7090e31b00cbc7a3b98f3b76020a4c4641f987ae7d0c8f52e1b88c3b268bdfdabac2e1a93513e5d11339b718ff45cbff48a44c35d7e52feba510ed
checksum: 3f20468cfd0f5affadf0f307e3af5b8f9ed19feaabccc3b4ed7548d40727d3f5dea4138db1ec287ca5a6152e164a051450604d47186b5fb28bb158a40937cf60
languageName: node
linkType: hard
"espree@npm:^9.6.0, espree@npm:^9.6.1":
version: 9.6.1
resolution: "espree@npm:9.6.1"
"espree@npm:^10.0.1":
version: 10.0.1
resolution: "espree@npm:10.0.1"
dependencies:
acorn: ^8.9.0
acorn: ^8.11.3
acorn-jsx: ^5.3.2
eslint-visitor-keys: ^3.4.1
checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9
eslint-visitor-keys: ^4.0.0
checksum: 62c9242a84c6741cebd35ede6574131d0419be7e5559566403e384087d99c4ddb2ced44e32acd44a4c3d8a8a84997cf8d78810c4e46b3fe25a804f1a92dc6b9d
languageName: node
linkType: hard
@@ -740,11 +727,11 @@ __metadata:
linkType: hard
"fastq@npm:^1.6.0":
version: 1.15.0
resolution: "fastq@npm:1.15.0"
version: 1.17.1
resolution: "fastq@npm:1.17.1"
dependencies:
reusify: ^1.0.4
checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a
checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88
languageName: node
linkType: hard
@@ -757,12 +744,12 @@ __metadata:
languageName: node
linkType: hard
"file-entry-cache@npm:^6.0.1":
version: 6.0.1
resolution: "file-entry-cache@npm:6.0.1"
"file-entry-cache@npm:^8.0.0":
version: 8.0.0
resolution: "file-entry-cache@npm:8.0.0"
dependencies:
flat-cache: ^3.0.4
checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74
flat-cache: ^4.0.0
checksum: f67802d3334809048c69b3d458f672e1b6d26daefda701761c81f203b80149c35dea04d78ea4238969dd617678e530876722a0634c43031a0957f10cc3ed190f
languageName: node
linkType: hard
@@ -822,31 +809,30 @@ __metadata:
languageName: node
linkType: hard
"flat-cache@npm:^3.0.4":
version: 3.1.1
resolution: "flat-cache@npm:3.1.1"
"flat-cache@npm:^4.0.0":
version: 4.0.1
resolution: "flat-cache@npm:4.0.1"
dependencies:
flatted: ^3.2.9
keyv: ^4.5.3
rimraf: ^3.0.2
checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a
keyv: ^4.5.4
checksum: 899fc86bf6df093547d76e7bfaeb900824b869d7d457d02e9b8aae24836f0a99fbad79328cfd6415ee8908f180699bf259dc7614f793447cb14f707caf5996f6
languageName: node
linkType: hard
"flatted@npm:^3.2.9":
version: 3.2.9
resolution: "flatted@npm:3.2.9"
checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026
version: 3.3.1
resolution: "flatted@npm:3.3.1"
checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94
languageName: node
linkType: hard
"follow-redirects@npm:^1.15.0":
version: 1.15.3
resolution: "follow-redirects@npm:1.15.3"
"follow-redirects@npm:^1.15.6":
version: 1.15.6
resolution: "follow-redirects@npm:1.15.6"
peerDependenciesMeta:
debug:
optional: true
checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231
checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5
languageName: node
linkType: hard
@@ -924,12 +910,10 @@ __metadata:
languageName: node
linkType: hard
"globals@npm:^13.19.0":
version: 13.23.0
resolution: "globals@npm:13.23.0"
dependencies:
type-fest: ^0.20.2
checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3
"globals@npm:^14.0.0":
version: 14.0.0
resolution: "globals@npm:14.0.0"
checksum: 534b8216736a5425737f59f6e6a5c7f386254560c9f41d24a9227d60ee3ad4a9e82c5b85def0e212e9d92162f83a92544be4c7fd4c902cb913736c10e08237ac
languageName: node
linkType: hard
@@ -1006,9 +990,9 @@ __metadata:
linkType: hard
"ignore@npm:^5.2.0":
version: 5.2.4
resolution: "ignore@npm:5.2.4"
checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef
version: 5.3.1
resolution: "ignore@npm:5.3.1"
checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3
languageName: node
linkType: hard
@@ -1183,7 +1167,7 @@ __metadata:
languageName: node
linkType: hard
"keyv@npm:^4.5.3":
"keyv@npm:^4.5.4":
version: 4.5.4
resolution: "keyv@npm:4.5.4"
dependencies:
@@ -1441,9 +1425,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "pgadmin4@workspace:."
dependencies:
axios: ^1.5.1
axios: ^1.6.8
bootstrap: ^4.5.3
eslint: ^8.50.0
eslint: ^9.0.0
nw: 0.77.0
languageName: unknown
linkType: soft
@@ -1574,17 +1558,6 @@ __metadata:
languageName: node
linkType: hard
"rimraf@npm:^3.0.2":
version: 3.0.2
resolution: "rimraf@npm:3.0.2"
dependencies:
glob: ^7.1.3
bin:
rimraf: bin.js
checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0
languageName: node
linkType: hard
"run-parallel@npm:^1.1.9":
version: 1.2.0
resolution: "run-parallel@npm:1.2.0"
@@ -1794,13 +1767,6 @@ __metadata:
languageName: node
linkType: hard
"type-fest@npm:^0.20.2":
version: 0.20.2
resolution: "type-fest@npm:0.20.2"
checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73
languageName: node
linkType: hard
"unbzip2-stream@npm:^1.0.9":
version: 1.4.3
resolution: "unbzip2-stream@npm:1.4.3"
+2
View File
@@ -1,3 +1,5 @@
requests>=2.21.0
requests[security]>=2.21.0
safety>=1.9.0
Sphinx==7.3.5
sphinxcontrib-youtube==1.4.1
+28
View File
@@ -0,0 +1,28 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
##########################################################################
# Application branding
##########################################################################
# Name of the application to display in the UI
APP_NAME = 'pgAdmin 4'
APP_ICON = 'pg-icon'
# To help define the configuration directory and data directory
APP_SHORT_NAME = 'pgadmin4'
APP_PATH = 'pgadmin'
APP_WIN_PATH = "pgAdmin"
# Copyright string for display in the app
APP_COPYRIGHT = 'Copyright (C) 2013 - 2024, The pgAdmin Development Team'
# User ID (email address) to use for the default user in desktop mode.
# The default should be fine here, as it's not exposed in the app.
APP_DEFAULT_EMAIL = 'pgadmin4@pgadmin.org'
+66 -50
View File
@@ -15,6 +15,7 @@ import builtins
import logging
import os
import sys
from collections import OrderedDict
# We need to include the root directory in sys.path to ensure that we can
# find everything we need when running in the standalone runtime.
@@ -30,46 +31,10 @@ CONFIG_DATABASE_CONNECTION_POOL_SIZE = 5
CONFIG_DATABASE_CONNECTION_MAX_OVERFLOW = 100
from pgadmin.utils import env, IS_WIN, fs_short_path
##########################################################################
# Application settings
##########################################################################
# Name of the application to display in the UI
APP_NAME = 'pgAdmin 4'
APP_ICON = 'pg-icon'
##########################################################################
# Application settings
##########################################################################
# NOTE!!!
# If you change any of APP_RELEASE, APP_REVISION or APP_SUFFIX, then you
# must also change APP_VERSION_INT to match.
#
# Application version number components
APP_RELEASE = 8
APP_REVISION = 2
# Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string
# for GA releases.
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 = 80200
# DO NOT CHANGE!
# The application version string, constructed from the components
if not APP_SUFFIX:
APP_VERSION = '%s.%s' % (APP_RELEASE, APP_REVISION)
else:
APP_VERSION = '%s.%s-%s' % (APP_RELEASE, APP_REVISION, APP_SUFFIX)
# Copyright string for display in the app
APP_COPYRIGHT = 'Copyright (C) 2013 - 2024, The pgAdmin Development Team'
from version import APP_VERSION, APP_RELEASE, APP_REVISION, APP_SUFFIX, \
APP_VERSION_INT
from branding import APP_NAME, APP_ICON, APP_COPYRIGHT, APP_PATH, \
APP_WIN_PATH, APP_SHORT_NAME, APP_DEFAULT_EMAIL
##########################################################################
# Misc stuff
@@ -133,7 +98,7 @@ WTF_CSRF_HEADERS = ['X-pgA-CSRFToken']
# User ID (email address) to use for the default user in desktop mode.
# The default should be fine here, as it's not exposed in the app.
DESKTOP_USER = 'pgadmin4@pgadmin.org'
DESKTOP_USER = APP_DEFAULT_EMAIL
# This option allows the user to host the application on a LAN
# Default hosting is on localhost (DEFAULT_SERVER='localhost').
@@ -250,18 +215,21 @@ APP_VERSION_EXTN = ('.css', '.js', '.html', '.svg', '.png', '.gif', '.ico')
# Data directory for storage of config settings etc. This shouldn't normally
# need to be changed - it's here as various other settings depend on it.
# On Windows, we always store data in %APPDATA%\pgAdmin. On other platforms,
# if we're in server mode we use /var/lib/pgadmin, otherwise ~/.pgadmin
# On Windows, we always store data in %APPDATA%\$(APP_WIN_PATH). On other
# platforms, if we're in server mode we use /var/lib/$(APP_PATH),
# otherwise ~/.$(APP_PATH)
if IS_WIN:
# Use the short path on windows
DATA_DIR = os.path.realpath(
os.path.join(fs_short_path(env('APPDATA')), "pgAdmin")
os.path.join(fs_short_path(env('APPDATA')), APP_WIN_PATH)
)
else:
if SERVER_MODE:
DATA_DIR = '/var/lib/pgadmin'
DATA_DIR = os.path.join('/var/lib/', APP_PATH)
else:
DATA_DIR = os.path.realpath(os.path.expanduser('~/.pgadmin/'))
DATA_DIR = os.path.realpath(
os.path.expanduser('~/' + '.' + APP_PATH + '/')
)
# An optional login banner to show security warnings/disclaimers etc. at
# login and password recovery etc. HTML may be included for basic formatting,
@@ -289,15 +257,29 @@ CONSOLE_LOG_LEVEL = logging.WARNING
FILE_LOG_LEVEL = logging.WARNING
# Log format.
JSON_LOGGER = False
CONSOLE_LOG_FORMAT_JSON = OrderedDict([
("time", "asctime"),
("message", "message"),
("level", "levelname")
])
FILE_LOG_FORMAT_JSON = OrderedDict([
("time", "asctime"),
("message", "message"),
("level", "levelname")
])
CONSOLE_LOG_FORMAT = '%(asctime)s: %(levelname)s\t%(name)s:\t%(message)s'
FILE_LOG_FORMAT = '%(asctime)s: %(levelname)s\t%(name)s:\t%(message)s'
# Log file name. This goes in the data directory, except on non-Windows
# platforms in server mode.
if SERVER_MODE and not IS_WIN:
LOG_FILE = '/var/log/pgadmin/pgadmin4.log'
LOG_FILE = os.path.join('/var/log', APP_PATH, APP_SHORT_NAME + '.log')
else:
LOG_FILE = os.path.join(DATA_DIR, 'pgadmin4.log')
LOG_FILE = os.path.join(DATA_DIR, APP_SHORT_NAME + '.log')
# Log rotation setting
# Log file will be rotated considering values for LOG_ROTATION_SIZE
@@ -341,7 +323,8 @@ CONFIG_DATABASE_URI = ''
# The default path to the SQLite database used to store user accounts and
# settings. This default places the file in the same directory as this
# config file, but generates an absolute path for use througout the app.
SQLITE_PATH = env('SQLITE_PATH') or os.path.join(DATA_DIR, 'pgadmin4.db')
SQLITE_PATH = env('SQLITE_PATH') or \
os.path.join(DATA_DIR, APP_SHORT_NAME + '.db')
# SQLITE_TIMEOUT will define how long to wait before throwing the error -
# OperationError due to database lock. On slower system, you may need to change
@@ -486,6 +469,26 @@ DEFAULT_BINARY_PATHS = {
"ppas-16": ""
}
##########################################################################
# Admin can specify fixed binary paths to prevent users from changing.
# It will take precedence over DEFAULT_BINARY_PATHS.
FIXED_BINARY_PATHS = {
"pg": "",
"pg-12": "",
"pg-13": "",
"pg-14": "",
"pg-15": "",
"pg-16": "",
"ppas": "",
"ppas-12": "",
"ppas-13": "",
"ppas-14": "",
"ppas-15": "",
"ppas-16": ""
}
##########################################################################
# Test settings - used primarily by the regression suite, not for users
##########################################################################
@@ -819,7 +822,12 @@ OAUTH2_CONFIG = [
# for OAuth2 provider.
# This may need to set False, in case of self-signed certificates.
# Ref: https://github.com/psf/requests/issues/6071
'OAUTH2_SSL_CERT_VERIFICATION': True
'OAUTH2_SSL_CERT_VERIFICATION': True,
# set this variable to invalidate the session of the oauth2 provider
# Example for keycloak:
# 'OAUTH2_LOGOUT_URL':
# 'https://example.com/realms/master/protocol/openid-connect/logout?post_logout_redirect_uri={redirect_uri}&id_token_hint={id_token}'
'OAUTH2_LOGOUT_URL': None
}
]
@@ -909,6 +917,14 @@ AUTO_DISCOVER_SERVERS = True
#############################################################################
SERVER_HEARTBEAT_TIMEOUT = 30 # In seconds
#############################################################################
# ENABLE_SERVER_PASS_EXEC_CMD is used to enable/disable Password exec command
# field in server properties. This is used to specify a shell command to be
# executed to retrieve a password to be used for server authentication.
# This setting is applicable only for server mode.
#############################################################################
ENABLE_SERVER_PASS_EXEC_CMD = False
#############################################################################
# Patch the default config with custom config and other manipulations
#############################################################################
+20 -20
View File
@@ -17,7 +17,7 @@
"@babel/preset-typescript": "^7.22.5",
"@emotion/core": "^10.0.14",
"@emotion/memoize": "^0.7.5",
"@emotion/react": "^11.1.5",
"@emotion/react": "^11.11.3",
"@emotion/styled": "^11.11.0",
"@emotion/utils": "^1.0.0",
"@svgr/webpack": "^8.1.0",
@@ -56,16 +56,13 @@
"process": "^0.11.10",
"prop-types": "^15.7.2",
"resize-observer-polyfill": "^1.5.1",
"sass": "^1.24.4",
"sass-loader": "^11.0.0",
"sass-resources-loader": "^2.2.1",
"shim-loader": "^1.0.1",
"style-loader": "^3.3.2",
"stylis": "^4.0.7",
"svgo": "^2.7.0",
"svgo-loader": "^2.2.0",
"terser-webpack-plugin": "^5.1.1",
"typescript": "^3.2.2",
"typescript": "^4.9.5",
"url-loader": "^4.1.1",
"webfonts-loader": "^8.0.1",
"webpack": "^5.88.2",
@@ -76,24 +73,26 @@
"dependencies": {
"@babel/plugin-proposal-class-properties": "^7.10.4",
"@babel/preset-react": "^7.12.13",
"@date-io/core": "^1.3.6",
"@date-io/date-fns": "1.x",
"@codemirror/lang-sql": "^6.6.3",
"@date-io/core": "^3.0.0",
"@date-io/date-fns": "3.x",
"@emotion/sheet": "^1.0.1",
"@fortawesome/fontawesome-free": "latest",
"@material-ui/core": "4.12.4",
"@material-ui/icons": "^4.11.2",
"@material-ui/lab": "4.0.0-alpha.61",
"@material-ui/pickers": "3.3.10",
"@mui/icons-material": "^5.15.10",
"@mui/lab": "^5.0.0-alpha.165",
"@mui/material": "^5.15.10",
"@mui/styles": "^5.15.10",
"@mui/x-date-pickers": "^6.19.7",
"@projectstorm/react-diagrams": "^6.6.1",
"@simonwep/pickr": "^1.5.1",
"@szhsin/react-menu": "^2.2.0",
"@types/classnames": "^2.2.6",
"@types/react": "^16.7.18",
"@types/react-dom": "^17.0.11",
"@types/react": "^17.0.80",
"@types/react-dom": "^17.0.25",
"ajv": "^8.8.2",
"anti-trojan-source": "^1.4.0",
"aspen-decorations": "^1.0.2",
"axios": "^1.4.0",
"axios": "^1.6.8",
"babelify": "~10.0.0",
"bignumber.js": "^9.0.1",
"brace": "^0.11.1",
@@ -102,12 +101,13 @@
"chartjs-plugin-zoom": "^2.0.1",
"classnames": "^2.2.6",
"closest": "^0.0.1",
"codemirror": "^5.59.2",
"codemirror": "^6.0.1",
"convert-units": "^2.3.4",
"cssnano": "^5.0.2",
"dagre": "^0.8.4",
"date-fns": "^2.24.0",
"date-fns": "^3.6.0",
"diff-arrays-of-objects": "^1.1.8",
"hotkeys-js": "^3.13.3",
"html-to-image": "^1.11.11",
"immutability-helper": "^3.0.0",
"insert-if": "^1.1.0",
@@ -119,13 +119,11 @@
"ml-matrix": "^6.5.0",
"moment": "^2.29.4",
"moment-timezone": "^0.5.34",
"mousetrap": "^1.6.3",
"notificar": "^1.0.1",
"notistack": "^1.0.10",
"notistack": "^2.0.8",
"path-fx": "^2.0.0",
"pathfinding": "^0.4.18",
"paths-js": "^0.4.9",
"popper.js": "^1.16.1",
"postcss": "^8.4.31",
"raf": "^3.4.1",
"rc-dock": "^3.2.9",
@@ -152,6 +150,7 @@
"snapsvg-cjs": "^0.0.6",
"socket.io-client": "^4.5.0",
"split.js": "^1.5.10",
"sql-formatter": "^15.1.2",
"styled-components": "^5.2.1",
"uplot": "^1.6.24",
"uplot-react": "^1.1.4",
@@ -170,9 +169,10 @@
"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 NODE_OPTIONS=--max-old-space-size=2048 yarn run bundle:dev",
"bundle": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=3072 yarn run bundle:dev",
"test:js-once": "yarn run linter && yarn run jest --maxWorkers=50%",
"test:js": "yarn run test:js-once --watch",
"test:js-file": "yarn run test:js-once -t",
"test:js-coverage": "yarn run test:js-once --collect-coverage",
"test:feature": "yarn run bundle && python regression/runtests.py --pkg feature_tests",
"test": "yarn run test:js-once && yarn run bundle && python regression/runtests.py",
-1
View File
@@ -39,7 +39,6 @@ if (3, 10) > sys.version_info > (3, 8, 99) and os.name == 'posix':
# Fix eventlet issue with Python 3.9.
# Ref: https://github.com/eventlet/eventlet/issues/670
# This was causing issue in psycopg3
import select
from eventlet import hubs
hubs.use_hub("poll")
+1 -1
View File
@@ -26,7 +26,7 @@ def load_providers():
if os.path.isfile(filename):
basename = os.path.basename(filename)
base, extension = os.path.splitext(basename)
_, extension = os.path.splitext(basename)
if extension == ".py" and not basename.startswith("_"):
module = __import__("providers." + basename[:-3],
+1 -1
View File
@@ -197,7 +197,7 @@ class AzureProvider(AbsProvider):
""" Create/cache/return an Azure client object """
# Acquire a credential object using CLI-based authentication.
if self._credentials is None:
status, self._credentials = \
_, self._credentials = \
self._get_azure_credentials()
if type in self._clients:
-7
View File
@@ -1,7 +0,0 @@
{
"dark": {
"disp_name": "dark_(Beta)",
"cssfile": "pgadmin.theme.dark",
"preview_img": "dark_preview.png"
}
}
+25 -14
View File
@@ -50,7 +50,7 @@ from pgadmin.utils.csrf import pgCSRFProtect
from pgadmin import authenticate
from pgadmin.utils.security_headers import SecurityHeaders
from pgadmin.utils.constants import KERBEROS, OAUTH2, INTERNAL, LDAP, WEBSERVER
from jsonformatter import JsonFormatter
# Explicitly set the mime-types so that a corrupted windows registry will not
# affect pgAdmin 4 to be load properly. This will avoid the issues that may
@@ -260,14 +260,26 @@ def create_app(app_name=None):
config.LOG_ROTATION_MAX_LOG_FILES)
fh.setLevel(config.FILE_LOG_LEVEL)
fh.setFormatter(logging.Formatter(config.FILE_LOG_FORMAT))
if config.JSON_LOGGER:
json_formatter = JsonFormatter(config.FILE_LOG_FORMAT_JSON)
fh.setFormatter(json_formatter)
else:
fh.setFormatter(logging.Formatter(config.FILE_LOG_FORMAT))
app.logger.addHandler(fh)
logger.addHandler(fh)
# Console logging
ch = logging.StreamHandler()
ch.setLevel(config.CONSOLE_LOG_LEVEL)
ch.setFormatter(logging.Formatter(config.CONSOLE_LOG_FORMAT))
if config.JSON_LOGGER:
json_formatter = JsonFormatter(config.CONSOLE_LOG_FORMAT_JSON)
ch.setFormatter(json_formatter)
else:
ch.setFormatter(logging.Formatter(config.CONSOLE_LOG_FORMAT))
app.logger.addHandler(ch)
logger.addHandler(ch)
@@ -493,14 +505,11 @@ def create_app(app_name=None):
'WTF_CSRF_TIME_LIMIT': getattr(config, 'CSRF_TIME_LIMIT', None),
'WTF_CSRF_METHODS': ['GET', 'POST', 'PUT', 'DELETE'],
# Disable deliverable check for email addresss
'SECURITY_EMAIL_VALIDATOR_ARGS': config.SECURITY_EMAIL_VALIDATOR_ARGS
'SECURITY_EMAIL_VALIDATOR_ARGS': config.SECURITY_EMAIL_VALIDATOR_ARGS,
# Disable CSRF for unauthenticated endpoints
'SECURITY_CSRF_IGNORE_UNAUTH_ENDPOINTS': True
}))
if 'SCRIPT_NAME' in os.environ and os.environ["SCRIPT_NAME"]:
app.config.update(dict({
'APPLICATION_ROOT': os.environ["SCRIPT_NAME"]
}))
app.config.update(dict({
'INTERNAL': INTERNAL,
'LDAP': LDAP,
@@ -512,7 +521,12 @@ def create_app(app_name=None):
security.init_app(app, user_datastore)
# register custom unauthorised handler.
app.login_manager.unauthorized_handler(pga_unauthorised)
if sys.version_info < (3, 8):
app.login_manager.unauthorized_handler(pga_unauthorised)
else:
# Flask-Security-Too > 5.4.* requires custom unauth handeler
# to be registeres with it.
security.unauthn_handler(pga_unauthorised)
# Set the permanent session lifetime to the specified value in config file.
app.permanent_session_lifetime = timedelta(
@@ -833,7 +847,7 @@ def create_app(app_name=None):
config.COOKIE_DEFAULT_DOMAIN != 'localhost':
domain['domain'] = config.COOKIE_DEFAULT_DOMAIN
response.set_cookie('PGADMIN_INT_KEY', value=request.args['key'],
path=config.COOKIE_DEFAULT_PATH,
path=config.SESSION_COOKIE_PATH,
secure=config.SESSION_COOKIE_SECURE,
httponly=config.SESSION_COOKIE_HTTPONLY,
samesite=config.SESSION_COOKIE_SAMESITE,
@@ -883,9 +897,6 @@ def create_app(app_name=None):
from flask_compress import Compress
Compress(app)
from pgadmin.misc.themes import themes
themes(app)
@app.context_processor
def inject_blueprint():
"""
+4 -3
View File
@@ -11,7 +11,8 @@
from flask import Response, render_template, request
from flask_babel import gettext
from flask_security import current_user, login_required
from flask_security import current_user
from pgadmin.user_login_check import pga_login_required
from pgadmin.utils import PgAdminModule
from pgadmin.utils.menu import MenuItem
from pgadmin.utils.constants import MIMETYPE_APP_JS
@@ -53,7 +54,7 @@ blueprint = AboutModule(MODULE_NAME, __name__, static_url_path='')
# A test page
##########################################################################
@blueprint.route("/", endpoint='index')
@login_required
@pga_login_required
def index():
"""Render the about box."""
info = {}
@@ -138,7 +139,7 @@ def detect_browser(request):
@blueprint.route("/about.js")
@login_required
@pga_login_required
def script():
"""render the required javascript"""
return Response(
@@ -10,10 +10,9 @@
import gettext from 'sources/gettext';
import url_for from 'sources/url_for';
import React, { useEffect, useState, useRef } from 'react';
import { Box, Grid, InputLabel } from '@material-ui/core';
import PropTypes from 'prop-types';
import { Box, Grid, InputLabel } from '@mui/material';
import { DefaultButton } from '../../../static/js/components/Buttons';
import { makeStyles } from '@material-ui/styles';
import { makeStyles } from '@mui/styles';
import { InputText } from '../../../static/js/components/FormComponents';
import getApiInstance from '../../../static/js/api_instance';
import { copyToClipboard } from '../../../static/js/clipboard';
@@ -142,7 +141,7 @@ export default function AboutComponent() {
}}>{copyText}</DefaultButton>
</Box>
<Box flexGrow="1" paddingTop="1px">
<InputText style={{height: '100%'}} controlProps={{multiline: true}} inputStyle={{resize: 'none'}}
<InputText style={{height: '100%'}} controlProps={{multiline: true, rows: 8}} inputStyle={{resize: 'none'}}
value={aboutData.settings}/>
</Box>
</Box>
@@ -150,7 +149,3 @@ export default function AboutComponent() {
</Box>
);
}
AboutComponent.propTypes = {
closeModal: PropTypes.func
};
+6 -8
View File
@@ -23,12 +23,10 @@ from flask_security.utils import logout_user, config_value
from flask_login import current_user
from flask_socketio import disconnect, ConnectionRefusedError
from pgadmin.model import db, User
from pgadmin.utils import PgAdminModule, get_safe_post_login_redirect, \
get_safe_post_logout_redirect
from pgadmin.utils.constants import KERBEROS, INTERNAL, OAUTH2, LDAP,\
MessageType
import pgadmin.utils as pga_utils
from pgadmin.authenticate.registry import AuthSourceRegistry
MODULE_NAME = 'authenticate'
@@ -84,7 +82,7 @@ def socket_login_required(f):
return wrapped
class AuthenticateModule(PgAdminModule):
class AuthenticateModule(pga_utils.PgAdminModule):
def get_exposed_url_endpoints(self):
return ['authenticate.login']
@@ -135,7 +133,7 @@ def _login():
'Administrator.'),
MessageType.WARNING)
logout_user()
return redirect(get_safe_post_logout_redirect())
return redirect(pga_utils.get_safe_post_logout_redirect())
# Validate the user
if not auth_obj.validate():
@@ -161,7 +159,7 @@ def _login():
flash_login_attempt_error = None
flash(error, MessageType.WARNING)
return redirect(get_safe_post_logout_redirect())
return redirect(pga_utils.get_safe_post_logout_redirect())
# Authenticate the user
status, msg = auth_obj.authenticate()
@@ -177,7 +175,7 @@ def _login():
'authenticate.kerberos_login'), url_for('browser.index')))
flash(msg, MessageType.ERROR)
return redirect(get_safe_post_logout_redirect())
return redirect(pga_utils.get_safe_post_logout_redirect())
session['auth_source_manager'] = current_auth_obj
@@ -187,7 +185,7 @@ def _login():
if 'auth_obj' in session:
session.pop('auth_obj')
return redirect(get_safe_post_login_redirect())
return redirect(pga_utils.get_safe_post_login_redirect())
elif isinstance(msg, Response):
return msg
+3 -3
View File
@@ -18,7 +18,7 @@ from flask import request, Response, session,\
current_app, render_template, flash, url_for
from flask_security.views import _security
from flask_security.utils import logout_user
from flask_security import login_required
from pgadmin.user_login_check import pga_login_required
import config
from pgadmin.model import User
@@ -97,7 +97,7 @@ def init_app(app):
@blueprint.route("/update_ticket",
endpoint="update_ticket", methods=["GET"])
@pgCSRFProtect.exempt
@login_required
@pga_login_required
def kerberos_update_ticket():
"""
Update the kerberos ticket.
@@ -127,7 +127,7 @@ def init_app(app):
@blueprint.route("/validate_ticket",
endpoint="validate_ticket", methods=["GET"])
@pgCSRFProtect.exempt
@login_required
@pga_login_required
def kerberos_validate_ticket():
"""
Return the kerberos ticket lifetime left after getting the
+2 -1
View File
@@ -239,7 +239,8 @@ class EmailAuthentication(BaseMFAuth):
label=email_authentication_label(),
auth_method=EMAIL_AUTH_METHOD,
message=message,
otp_placeholder=_("Enter code here")
otp_placeholder=_("Enter code here"),
http_code=http_code,
)
def registration_view(self, _form_data):
@@ -53,7 +53,6 @@ def init_dummy_auth_class():
def test_create_dummy_app(name=__name__):
import os
import pgadmin
from pgadmin.misc.themes import themes
def index():
return Response("<html><body>logged in</body></html>")
@@ -88,8 +87,6 @@ def test_create_dummy_app(name=__name__):
app.register_logout_hook = types.MethodType(__dummy_logout_hook, app)
themes(app)
return app
+3 -3
View File
@@ -13,7 +13,7 @@ from functools import wraps
from flask import url_for, session, request, redirect
from flask_login.utils import login_url
from flask_security import current_user
from flask_security import current_user, login_required
import config
from pgadmin.model import UserMFA, db
@@ -279,7 +279,7 @@ def mfa_required(wrapped):
registration_url = url_for('mfa.register')
if next_url.startswith(registration_url):
return url('browser.index')
return url_for('browser.index')
return next_url
@@ -290,8 +290,8 @@ def mfa_required(wrapped):
return redirect(login_url("mfa.register", next_url=get_next_url()))
@wraps(wrapped)
@login_required
def inner(*args, **kwargs):
def execute_func():
session['mfa_authenticated'] = True
return wrapped(*args, **kwargs)
+15
View File
@@ -69,11 +69,21 @@ def init_app(app):
methods=['GET', 'POST'])
@pgCSRFProtect.exempt
def oauth_logout():
logout_url = None
if 'oauth2_logout_url' in session:
logout_url = session['oauth2_logout_url']
if not current_user.is_authenticated:
return redirect(get_safe_post_logout_redirect())
for key in list(session.keys()):
session.pop(key)
logout_user()
if logout_url:
id_token = session['oauth2_token'].get('id_token')
return redirect(logout_url.format(
redirect_uri=request.url_root,
id_token=id_token))
return redirect(get_safe_post_logout_redirect())
app.register_blueprint(blueprint)
@@ -202,6 +212,11 @@ class OAuth2Authentication(BaseAuthentication):
session['pass_enc_key'] = session['oauth2_token']['access_token']
if 'OAUTH2_LOGOUT_URL' in self.oauth2_config[
self.oauth2_current_client]:
session['oauth2_logout_url'] = self.oauth2_config[
self.oauth2_current_client]['OAUTH2_LOGOUT_URL']
resp = self.oauth2_clients[self.oauth2_current_client].get(
self.oauth2_config[
self.oauth2_current_client]['OAUTH2_USERINFO_ENDPOINT'],
Loaded 100 of 749 files, more files were not shown because too many files have changed in this diff. Show more