Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d50e9f7fc2 | ||
|
|
0a3a90b400 | ||
|
|
4fc0f288c7 | ||
|
|
8ef3f232ab | ||
|
|
3d0078c73d | ||
|
|
51c7551d3f | ||
|
|
a62fc2fbff | ||
|
|
25be215180 | ||
|
|
0da2382c7d | ||
|
|
1d3be06cb5 | ||
|
|
ff095fc7c4 | ||
|
|
1904a64e42 | ||
|
|
8a76122949 | ||
|
|
ae82a4b279 | ||
|
|
3c52139ce5 | ||
|
|
794cbed57c | ||
|
|
5b09122676 | ||
|
|
19f96799df | ||
|
|
b100df3160 | ||
|
|
176ea5949b | ||
|
|
f79844e926 | ||
|
|
2d0f09144d | ||
|
|
e3a172e0e8 | ||
|
|
b519af280b | ||
|
|
64d9fd0a0b | ||
|
|
9002961e5d | ||
|
|
7e51a2f517 | ||
|
|
bb78d91d1b | ||
|
|
b086e1fd83 | ||
|
|
cc55c8db89 | ||
|
|
8875d8b741 | ||
|
|
af97ed78ef | ||
|
|
992dff64af | ||
|
|
b8ec021a07 | ||
|
|
406119d96c | ||
|
|
869b90121c | ||
|
|
bedfad002d | ||
|
|
9acc59d099 | ||
|
|
d13ee8db29 | ||
|
|
9817a9b20f | ||
|
|
56fb24c24a | ||
|
|
5d4bac85e5 | ||
|
|
545c76a411 | ||
|
|
e3e0e3db19 | ||
|
|
5fbb8b6204 | ||
|
|
1b11a6cd4b | ||
|
|
add5404f5e | ||
|
|
0b6b2e733a | ||
|
|
fc8d6d6e90 | ||
|
|
ffe2fea81c | ||
|
|
c80db7933c | ||
|
|
2b5514a944 | ||
|
|
61361dd2b8 | ||
|
|
01848e7d5b | ||
|
|
bc08512327 | ||
|
|
f64b572150 | ||
|
|
04d779c741 | ||
|
|
45a1dee9f1 | ||
|
|
f052ecffc0 | ||
|
|
9a6516a8b3 | ||
|
|
98c50afe8e | ||
|
|
94ca48674a | ||
|
|
d147b41d19 | ||
|
|
9ed3be335e | ||
|
|
ed1184fcf8 | ||
|
|
0203bbc7ef | ||
|
|
3765131d21 | ||
|
|
033ee23eba | ||
|
|
83e2ee04d1 | ||
|
|
6d1283f92d | ||
|
|
8459a45d72 |
No files matched your search
@@ -0,0 +1,36 @@
|
||||
name: Check documentation build
|
||||
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the "master" branch
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Run the tests
|
||||
- name: Install dependencies
|
||||
run: sudo apt install build-essential python3-dev libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
|
||||
|
||||
- name: Install requirements
|
||||
run: pip install -r requirements.txt
|
||||
|
||||
- name: Install sphinx
|
||||
run: pip install sphinx
|
||||
|
||||
- name: Check the documentation
|
||||
run: make docs
|
||||
@@ -0,0 +1,36 @@
|
||||
name: Check Javascript style
|
||||
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the "master" branch
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Run the tests
|
||||
- name: Install nodejs
|
||||
run: sudo apt install nodejs
|
||||
|
||||
- name: Install yarn
|
||||
run: sudo npm install --global yarn
|
||||
|
||||
- name: Install Node modules
|
||||
run: cd web && yarn install
|
||||
|
||||
- name: Run the linter
|
||||
run: cd web && yarn run linter
|
||||
@@ -0,0 +1,39 @@
|
||||
name: Check Python style
|
||||
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the "master" branch
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Run the tests
|
||||
- name: Install pycodestyle
|
||||
run: pip install pycodestyle
|
||||
|
||||
- name: Check the documentation
|
||||
run: pycodestyle --config=.pycodestyle docs/
|
||||
|
||||
- name: Check the packaging
|
||||
run: pycodestyle --config=.pycodestyle pkg/
|
||||
|
||||
- name: Check the application
|
||||
run: pycodestyle --config=.pycodestyle web/
|
||||
|
||||
- name: Check the tools
|
||||
run: pycodestyle --config=.pycodestyle tools/
|
||||
@@ -12,9 +12,9 @@ Name Version
|
||||
---- ------- ------- ---
|
||||
Python 3.6+ PSF https://www.python.org/
|
||||
nw 0.50.2 MIT git://github.com/nwjs/npm-installer.git
|
||||
axios 0.21.0 MIT https://github.com/axios/axios.git
|
||||
axios 0.21.2 MIT https://github.com/axios/axios.git
|
||||
bootstrap 4.5.3 MIT git+https://github.com/twbs/bootstrap.git
|
||||
follow-redirects 1.13.1 MIT git@github.com:follow-redirects/follow-redirects.git
|
||||
follow-redirects 1.15.2 MIT git@github.com:follow-redirects/follow-redirects.git
|
||||
|
||||
5 dependencies listed.
|
||||
|
||||
@@ -39,7 +39,6 @@ WTForms 3.0.1
|
||||
passlib 1.7.4 BSD https://passlib.readthedocs.io
|
||||
pytz 2021.3 MIT http://pythonhosted.org/pytz
|
||||
simplejson 3.17.6 MIT License https://github.com/simplejson/simplejson
|
||||
six 1.16.0 MIT https://github.com/benjaminp/six
|
||||
speaklater3 1.4 UNKNOWN https://github.com/ThomasWaldmann/speaklater
|
||||
sqlparse 0.4.2 BSD-3-Clause https://github.com/andialbrecht/sqlparse
|
||||
psutil 5.9.1 BSD https://github.com/giampaolo/psutil
|
||||
@@ -62,7 +61,7 @@ qrcode 7.3.1
|
||||
Pillow 9.2.0 HPND https://python-pillow.org
|
||||
boto3 1.20.54 Apache License 2.0 https://github.com/boto/boto3
|
||||
botocore 1.23.54 Apache License 2.0 https://github.com/boto/botocore
|
||||
urllib3 1.26.11 MIT https://urllib3.readthedocs.io/
|
||||
urllib3 1.26.12 MIT https://urllib3.readthedocs.io/
|
||||
Werkzeug 2.1.2 BSD-3-Clause https://palletsprojects.com/p/werkzeug/
|
||||
azure-mgmt-rdbms 10.1.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-resource 21.0.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
@@ -72,7 +71,7 @@ azure-identity 1.9.0
|
||||
NOTE: This report was generated using Python 3.10. Full information may not be
|
||||
shown for Python modules that are not required with this version.
|
||||
|
||||
45 dependencies listed.
|
||||
44 dependencies listed.
|
||||
|
||||
Javascript Dependencies
|
||||
=======================
|
||||
@@ -124,6 +123,7 @@ Name Version
|
||||
@babel/preset-react 7.13.13 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.16.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.17.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.19.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.17.8 MIT https://github.com/babel/babel.git
|
||||
@babel/template 7.16.7 MIT https://github.com/babel/babel.git
|
||||
@babel/template 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@@ -157,19 +157,20 @@ Name Version
|
||||
@nodelib/fs.scandir 2.1.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir
|
||||
@nodelib/fs.stat 2.0.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat
|
||||
@nodelib/fs.walk 1.2.8 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk
|
||||
@popperjs/core 2.10.2 MIT https://github.com/popperjs/popper-core.git
|
||||
@projectstorm/geometry 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-canvas-core 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-core 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-defaults 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-routing 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@react-dnd/asap 5.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@react-dnd/invariant 4.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@react-dnd/shallowequal 4.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@simonwep/pickr 1.8.2 MIT https://github.com/Simonwep/pickr.git
|
||||
@sindresorhus/is 0.7.0 MIT https://github.com/sindresorhus/is.git
|
||||
@socket.io/base64-arraybuffer 1.0.2 MIT https://github.com/socketio/base64-arraybuffer
|
||||
@socket.io/component-emitter 3.0.0 MIT https://github.com/socketio/emitter.git
|
||||
@szhsin/react-menu 2.3.3 MIT https://github.com/szhsin/react-menu.git
|
||||
@tippyjs/react 4.2.6 MIT git+https://github.com/atomiks/tippyjs-react.git
|
||||
@types/classnames 2.3.1 MIT Unknown
|
||||
@types/json-schema 7.0.9 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/minimist 1.2.2 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@@ -186,7 +187,6 @@ ajv 8.9.0
|
||||
ajv 6.12.6 MIT https://github.com/ajv-validator/ajv.git
|
||||
ajv-errors 1.0.1 MIT git+https://github.com/epoberezkin/ajv-errors.git
|
||||
ajv-keywords 3.5.2 MIT git+https://github.com/epoberezkin/ajv-keywords.git
|
||||
alertifyjs 1.7.1 MIT git@github.com:MohammadYounes/AlertifyJS.git
|
||||
alphanum-sort 1.0.2 MIT https://github.com/TrySound/alphanum-sort.git
|
||||
ansi-styles 3.2.1 MIT https://github.com/chalk/ansi-styles.git
|
||||
array-union 3.0.1 MIT https://github.com/sindresorhus/array-union.git
|
||||
@@ -201,12 +201,6 @@ babel-plugin-styled-components 1.13.3
|
||||
babel-plugin-syntax-jsx 6.18.0 MIT https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx
|
||||
babelify 10.0.0 MIT https://github.com/babel/babelify.git
|
||||
backbone 1.4.0 MIT https://github.com/jashkenas/backbone.git
|
||||
backbone 1.2.3 MIT https://github.com/jashkenas/backbone.git
|
||||
backbone 1.3.3 MIT https://github.com/jashkenas/backbone.git
|
||||
backform 0.2.0 MIT https://github.com/AmiliaApp/backform
|
||||
backgrid 0.3.8 MIT http://github.com/cloudflare/backgrid
|
||||
backgrid-filter 0.3.7 MIT git://github.com/wyuenho/backgrid-text-cell.git
|
||||
backgrid-select-all 0.3.5 MIT git://github.com/wyuenho/backgrid-select-all.git
|
||||
backo2 1.0.2 MIT https://github.com/mokesmokes/backo.git
|
||||
balanced-match 1.0.2 MIT git://github.com/juliangruber/balanced-match.git
|
||||
base64-arraybuffer 0.2.0 MIT https://github.com/niklasvh/base64-arraybuffer
|
||||
@@ -264,6 +258,7 @@ decamelize-keys 1.1.0
|
||||
deep-diff 1.0.2 MIT git://github.com/flitbit/diff.git
|
||||
diff-arrays-of-objects 1.1.9 MIT git+https://github.com/malcolmvr/diff-arrays-of-objects.git
|
||||
dir-glob 3.0.1 MIT https://github.com/kevva/dir-glob.git
|
||||
dnd-core 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
dom-align 1.12.2 MIT git@github.com:yiminghe/dom-align.git
|
||||
dom-helpers 5.2.1 MIT git+https://github.com/react-bootstrap/dom-helpers.git
|
||||
dom-serializer 1.3.2 MIT git://github.com/cheeriojs/dom-renderer.git
|
||||
@@ -366,7 +361,6 @@ lodash.noop 2.3.0
|
||||
lodash.support 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.uniq 4.5.0 MIT https://github.com/lodash/lodash.git
|
||||
loose-envify 1.4.0 MIT git://github.com/zertosh/loose-envify.git
|
||||
lunr 0.7.2 MIT https://github.com/olivernn/lunr.js.git
|
||||
make-dir 3.1.0 MIT https://github.com/sindresorhus/make-dir.git
|
||||
map-obj 4.3.0 MIT https://github.com/sindresorhus/map-obj.git
|
||||
map-obj 1.0.1 MIT https://github.com/sindresorhus/map-obj.git
|
||||
@@ -385,7 +379,7 @@ ml-array-rescale 1.3.6
|
||||
ml-matrix 6.8.0 MIT https://github.com/mljs/matrix.git
|
||||
mobius1-selectr 2.4.13 MIT git+https://github.com/Mobius1/Selectr.git
|
||||
moment 2.29.4 MIT https://github.com/moment/moment.git
|
||||
moment-timezone 0.5.34 MIT https://github.com/moment/moment-timezone.git
|
||||
moment-timezone 0.5.37 MIT https://github.com/moment/moment-timezone.git
|
||||
ms 2.1.2 MIT https://github.com/zeit/ms.git
|
||||
nanoid 3.3.2 MIT https://github.com/ai/nanoid.git
|
||||
nanoid 3.2.0 MIT https://github.com/ai/nanoid.git
|
||||
@@ -464,7 +458,9 @@ react 17.0.2
|
||||
react-aspen 1.2.0 MIT https://github.com/neeksandhu/react-aspen.git
|
||||
react-aspen 1.1.1 MIT https://github.com/neeksandhu/react-aspen.git
|
||||
react-checkbox-tree 1.7.2 MIT https://github.com/jakezatecky/react-checkbox-tree
|
||||
react-data-grid 7.0.0-beta.12 MIT https://github.com/adazzle/react-data-grid.git
|
||||
react-data-grid 7.0.0-beta.14 MIT https://github.com/adazzle/react-data-grid.git
|
||||
react-dnd 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
react-dnd-html5-backend 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
react-dom 16.14.0 MIT git+https://github.com/facebook/react.git
|
||||
react-dom 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-draggable 4.4.4 MIT https://github.com/react-grid-layout/react-draggable.git
|
||||
@@ -484,6 +480,7 @@ react-window 1.8.6
|
||||
read-pkg 6.0.0 MIT https://github.com/sindresorhus/read-pkg.git
|
||||
read-pkg-up 8.0.0 MIT https://github.com/sindresorhus/read-pkg-up.git
|
||||
redent 4.0.0 MIT https://github.com/sindresorhus/redent.git
|
||||
redux 4.2.0 MIT https://github.com/reduxjs/redux.git
|
||||
regenerator-runtime 0.13.9 MIT https://github.com/facebook/regenerator/tree/master/packages/runtime
|
||||
require-from-string 2.0.2 MIT https://github.com/floatdrop/require-from-string.git
|
||||
resize-observer-polyfill 1.5.1 MIT https://github.com/que-etc/resize-observer-polyfill.git
|
||||
@@ -499,7 +496,6 @@ select2 4.0.13
|
||||
shallowequal 1.1.0 MIT https://github.com/dashed/shallowequal.git
|
||||
shim-loader 1.0.1 MIT https://github.com/zinserjan/shim-loader
|
||||
slash 4.0.0 MIT https://github.com/sindresorhus/slash.git
|
||||
slickgrid 2.3.16 MIT git+https://github.com/6pac/SlickGrid.git
|
||||
snapsvg-cjs 0.0.6 MIT git+https://github.com/geelen/Snap.svg-cjs.git
|
||||
socket.io-client 4.3.2 MIT https://github.com/socketio/socket.io-client.git
|
||||
socket.io-parser 4.1.1 MIT https://github.com/socketio/socket.io-parser.git
|
||||
@@ -521,7 +517,6 @@ text-segmentation 1.0.2
|
||||
timsort 0.3.0 MIT https://github.com/mziccard/node-timsort.git
|
||||
tiny-emitter 2.1.0 MIT https://github.com/scottcorgan/tiny-emitter.git
|
||||
tiny-warning 1.0.3 MIT https://github.com/alexreardon/tiny-warning.git
|
||||
tippy.js 6.3.5 MIT git+https://github.com/atomiks/tippyjs.git
|
||||
to-fast-properties 2.0.0 MIT https://github.com/sindresorhus/to-fast-properties.git
|
||||
to-regex-range 5.0.1 MIT https://github.com/micromatch/to-regex-range.git
|
||||
trim-newlines 4.0.2 MIT https://github.com/sindresorhus/trim-newlines.git
|
||||
@@ -620,5 +615,5 @@ tslib 2.4.0
|
||||
tslib 2.3.0 0BSD https://github.com/Microsoft/tslib.git
|
||||
type-fest 1.4.0 (MIT OR CC0-1.0) https://github.com/sindresorhus/type-fest.git
|
||||
|
||||
540 dependencies listed.
|
||||
536 dependencies listed.
|
||||
|
||||
@@ -116,6 +116,7 @@ FROM postgres:11-alpine as pg11-builder
|
||||
FROM postgres:12-alpine as pg12-builder
|
||||
FROM postgres:13-alpine as pg13-builder
|
||||
FROM postgres:14-alpine as pg14-builder
|
||||
FROM postgres:15-alpine as pg15-builder
|
||||
|
||||
FROM alpine:3.16 as tool-builder
|
||||
|
||||
@@ -145,6 +146,11 @@ COPY --from=pg14-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-14/
|
||||
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-15/
|
||||
|
||||
#########################################################################
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
@@ -156,9 +162,9 @@ COPY --from=env-builder /venv /venv
|
||||
|
||||
# Copy in the tools
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
COPY --from=pg14-builder /usr/local/lib/libpq.so.5.14 /usr/lib/
|
||||
RUN ln -s libpq.so.5.14 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.14 /usr/lib/libpq.so
|
||||
COPY --from=pg15-builder /usr/local/lib/libpq.so.5.15 /usr/lib/
|
||||
RUN ln -s libpq.so.5.15 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.15 /usr/lib/libpq.so
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
ENV PYTHONPATH=/pgadmin4
|
||||
|
||||
@@ -267,8 +267,8 @@ A GitHub project for pgAdmin 4 can be found at the address below:
|
||||
|
||||
https://github.com/pgadmin-org/pgadmin4
|
||||
|
||||
**NOTE:** The repository on GitHub is a clone of the main project repository.
|
||||
Please do not submit pull requests!
|
||||
Please submit any changes as Pull Requests against the *master* branch of the
|
||||
*pgadmin-org/pgadmin4* repository.
|
||||
|
||||
If you wish to discuss pgAdmin 4, or contribute to the project, please use the
|
||||
pgAdmin Hackers mailing list:
|
||||
|
||||
@@ -53,6 +53,9 @@ details.
|
||||
|
||||
* Use the *Provisioned IOPS* in case of Provisioned IOPS (SSD) storage type.
|
||||
|
||||
* Use the *High Availability* option to specify High Availability
|
||||
option. This option creates a standby in a different Availability Zone(AZ).
|
||||
|
||||
.. image:: images/cloud_aws_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
@@ -73,7 +73,7 @@ details.
|
||||
should be accepted. Add multiple IP addresses/ranges separated with commas,
|
||||
for example: "192.168.0.50, 192.168.0.100 - 192.168.0.200"
|
||||
|
||||
* User *Zone redundant high availability* option to specify High Availability
|
||||
* Use *Zone redundant high availability* option to specify High Availability
|
||||
option. Zone redundant high availability deploys a standby replica in a
|
||||
different zone.
|
||||
The Burstable instance type does not support high availability.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
**************************
|
||||
|
||||
This document lists a number of standard items that will be checked during the
|
||||
review process for any patches submitted for inclusion in pgAdmin.
|
||||
review process for any changes submitted for inclusion in pgAdmin.
|
||||
|
||||
* Ensure all code follows the pgAdmin :doc:`coding_standards`.
|
||||
|
||||
@@ -52,10 +52,13 @@ review process for any patches submitted for inclusion in pgAdmin.
|
||||
current schema/user as appropriate. In general, if there are common or sensible
|
||||
default values available, put them in the fields for the user.
|
||||
|
||||
* 1 patch == 1 feature. If you need to fix/update existing infrastructure in
|
||||
your patch, it's usually easier if it's in a separate patch. Patches containing
|
||||
multiple new features or unrelated changes are likely to be rejected.
|
||||
* 1 Pull Request == 1 feature. If you need to fix/update existing
|
||||
infrastructure in your change, it's usually easier if it's in a separate
|
||||
Pull Request. Pull Requests containing multiple new features or unrelated
|
||||
changes are likely to be rejected.
|
||||
|
||||
* Ensure the patch is fully functional, and works! If a patch is being sent as
|
||||
a work in progress, not intended for commit, clearly state that it's a WIP,
|
||||
and note what does or does not yet work.
|
||||
* Ensure the change is fully functional, and works! If you wish to send a
|
||||
work in progress (WIP) change that is not intended for commit, instead of
|
||||
submitting a Pull Request, send either as a link to a repository fork or a
|
||||
patch to the pgadmin-hackers@postgresql.org mailing list, clearly stating
|
||||
that it's a WIP, and noting what does or does not yet work.
|
||||
@@ -8,6 +8,31 @@ pgAdmin can be deployed in a container using the image at:
|
||||
|
||||
https://hub.docker.com/r/dpage/pgadmin4/
|
||||
|
||||
There are various tags that you can select from to get the version of pgAdmin
|
||||
that you want, using a command such as this if you're using Docker:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4:<tag name>
|
||||
|
||||
where *<tag name>* is one of the following:
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4
|
||||
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| Tag name | Description |
|
||||
+==========+===============================================================================+
|
||||
| latest | The most recent release. |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| 6.14 | A specific version (6.14 in this case). |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| 6 | the latest release of a specific major version (major version 6 in this case).|
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| snapshot | The latest nightly test build. |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
|
||||
PostgreSQL Utilities
|
||||
********************
|
||||
|
||||
@@ -115,6 +140,15 @@ Override the default file path for the server definition list. See the
|
||||
Specify an output file in which to store the Gunicorn access logs, instead of
|
||||
sending them to stdout.
|
||||
|
||||
**GUNICORN_LIMIT_REQUEST_LINE**
|
||||
|
||||
*Default: 8190*
|
||||
|
||||
Set the maximum size of HTTP request line in bytes. By default the pgAdmin
|
||||
container uses the maximum limited size offered by Gunicorn as some requests
|
||||
can be quite large. In exceptional cases this value can be set to 0 (zero) to
|
||||
specify "unlimited", however this poses a potential denial of service hazard.
|
||||
|
||||
**GUNICORN_THREADS**
|
||||
|
||||
*Default: 25*
|
||||
|
||||
@@ -15,7 +15,7 @@ development process used to develop, improve, and maintain the pgAdmin client.
|
||||
|
||||
.. toctree::
|
||||
|
||||
submitting_patches
|
||||
submitting_pull_requests
|
||||
code_overview
|
||||
coding_standards
|
||||
code_snippets
|
||||
|
||||
@@ -19,7 +19,7 @@ pgAdmin server and opens a window to render the user interface.
|
||||
.. seealso:: For detailed instructions on building and configuring pgAdmin from
|
||||
scratch, please see the README file in the top level directory of the source code.
|
||||
For convenience, you can find the latest version of the file
|
||||
`here <https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob;f=README.md>`_,
|
||||
`here <https://github.com/pgadmin-org/pgadmin4/blob/master/README.md>`_,
|
||||
but be aware that this may differ from the version included with the source code
|
||||
for a specific version of pgAdmin.
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ File Options
|
||||
| | diagram to a file. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Save as* | Click the *Save As* to open a new browser dialog and specify a new location to save the diagram. | Ctrl + Shift + |
|
||||
| | | S |
|
||||
| | You need to click the down arrow beside the save button to see *Save As*. | S |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Export Options
|
||||
@@ -62,6 +62,8 @@ Export Options
|
||||
+======================+===================================================================================================+================+
|
||||
| *Generate SQL* | Click the *Generate SQL* icon to generate the DDL SQL for the diagram and open a query tool | Option + Ctrl +|
|
||||
| | with the generated SQL ready for execution. | S |
|
||||
| | You can select the option *With DROP Table* if you wish to have DROP Table DDL statements before | |
|
||||
| | each CREATE Table DDL. You can see the option by clicking the down arrow beside the SQL button. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Download image* | Click the *Download image* icon to save the ERD diagram in a image formate | Option + Ctrl +|
|
||||
| | | I |
|
||||
@@ -109,6 +111,23 @@ Table Relationship Options
|
||||
| | tables and link them. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Node Color Options
|
||||
**************************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 5
|
||||
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
| Icon | Behavior |
|
||||
+======================+==========================================================================================================+
|
||||
| *Fill Color* | Use Fill Color to change the background color of a table node. This is helpful if you want to |
|
||||
| | identify a of group tables. Once set, all the newly added tables will take the same color. |
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
| *Text Color* | Use Text Color to change the text color of a table node based on the fill color to make text |
|
||||
| | easily readable. |
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Utility Options
|
||||
***************
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 116 KiB |
@@ -185,6 +185,17 @@ ERD Tool window navigation:
|
||||
:alt: Preferences dialog erd keyboard shortcuts section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Options* panel to manage ERD preferences.
|
||||
|
||||
.. image:: images/preferences_erd_options.png
|
||||
:alt: Preferences dialog erd options section
|
||||
:align: center
|
||||
|
||||
|
||||
* When the *SQL With DROP Table* switch is set to *True*, the SQL
|
||||
generated by the ERD Tool will add DROP table DDL before each CREATE
|
||||
table DDL.
|
||||
|
||||
The Graphs Node
|
||||
***************
|
||||
|
||||
@@ -224,7 +235,7 @@ Expand the *Miscellaneous* node to specify miscellaneous display preferences.
|
||||
|
||||
* Use the *Themes* drop-down listbox to select the theme for pgAdmin. You'll also get a preview just below the
|
||||
drop down. Note that, to apply the theme you need to refresh the pgAdmin page. You can also submit your
|
||||
own themes, check `here <https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob_plain;f=README>`_ how.
|
||||
own themes, check `here <https://github.com/pgadmin-org/pgadmin4/blob/master/README.md>`_ how.
|
||||
Currently we support Standard, Dark and High Contrast theme.
|
||||
|
||||
The Paths Node
|
||||
|
||||
@@ -11,6 +11,7 @@ notes for it.
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
release_notes_6_15
|
||||
release_notes_6_14
|
||||
release_notes_6_13
|
||||
release_notes_6_12
|
||||
|
||||
@@ -19,30 +19,30 @@ New features
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #4059 <https://github.com/postgres/pgadmin4/issues/4059>`_ - Port schema diff to React. (RM #6133)
|
||||
| `Issue #4060 <https://github.com/postgres/pgadmin4/issues/4060>`_ - Remove Backgrid and Backform. (RM #6134)
|
||||
| `Issue #5035 <https://github.com/postgres/pgadmin4/issues/5035>`_ - Port the remaining components of the ERD Tool to React. (RM #7343)
|
||||
| `Issue #5120 <https://github.com/postgres/pgadmin4/issues/5120>`_ - Updated keyboard shortcut documentation. (RM #7446)
|
||||
| `Issue #5260 <https://github.com/postgres/pgadmin4/issues/5260>`_ - Remove Alertify from pgAdmin completely. (RM #7619)
|
||||
| `Issue #5263 <https://github.com/postgres/pgadmin4/issues/5263>`_ - Port search object dialog to React. (RM #7622)
|
||||
| `Issue #4059 <https://github.com/pgadmin-org/pgadmin4/issues/4059>`_ - Port schema diff to React. (RM #6133)
|
||||
| `Issue #4060 <https://github.com/pgadmin-org/pgadmin4/issues/4060>`_ - Remove Backgrid and Backform. (RM #6134)
|
||||
| `Issue #5035 <https://github.com/pgadmin-org/pgadmin4/issues/5035>`_ - Port the remaining components of the ERD Tool to React. (RM #7343)
|
||||
| `Issue #5120 <https://github.com/pgadmin-org/pgadmin4/issues/5120>`_ - Updated keyboard shortcut documentation. (RM #7446)
|
||||
| `Issue #5260 <https://github.com/pgadmin-org/pgadmin4/issues/5260>`_ - Remove Alertify from pgAdmin completely. (RM #7619)
|
||||
| `Issue #5263 <https://github.com/pgadmin-org/pgadmin4/issues/5263>`_ - Port search object dialog to React. (RM #7622)
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #5144 <https://github.com/postgres/pgadmin4/issues/5144>`_ - Ensure that if big animal authentication is aborted, API calls should be stopped. (RM #7472)
|
||||
| `Issue #5209 <https://github.com/postgres/pgadmin4/issues/5209>`_ - Fixed an issue where pgAdmin failed to start due to bin path migration. (RM #7557)
|
||||
| `Issue #5230 <https://github.com/postgres/pgadmin4/issues/5230>`_ - Fixed an issue where backup does not work due to parameter 'preexec_fn' no longer being supported. (RM #7580)
|
||||
| `Issue #5250 <https://github.com/postgres/pgadmin4/issues/5250>`_ - Ensure that the browser tree should be refreshed after changing the ownership. (RM #7607)
|
||||
| `Issue #5274 <https://github.com/postgres/pgadmin4/issues/5274>`_ - Fixed the error message displayed when clicking the cloud server for which deployment is in progress. (RM #7636)
|
||||
| `Issue #5275 <https://github.com/postgres/pgadmin4/issues/5275>`_ - Fixed an issue where the wrong SQL displayed in difference if the user create an RLS policy on the table without a column. (RM #7637)
|
||||
| `Issue #5282 <https://github.com/postgres/pgadmin4/issues/5282>`_ - Ensure that the dump servers functionality works from setup.py. (RM #7644)
|
||||
| `Issue #5284 <https://github.com/postgres/pgadmin4/issues/5284>`_ - Ensure that the Import/Export server menu option is visible. (RM #7646)
|
||||
| `Issue #5286 <https://github.com/postgres/pgadmin4/issues/5286>`_ - Fixed API test case for change password in the server mode. (RM #7648)
|
||||
| `Issue #5287 <https://github.com/postgres/pgadmin4/issues/5287>`_ - Fixed an issue with the non-visibility of columns added prior to import/export data. (RM #7649)
|
||||
| `Issue #5292 <https://github.com/postgres/pgadmin4/issues/5292>`_ - Fixed an issue where textarea of the JSON Editor does not resize with dialog. (RM #7656)
|
||||
| `Issue #5299 <https://github.com/postgres/pgadmin4/issues/5299>`_ - Fixed ModuleNotFoundError when running setup.py to load/dump servers. (RM #7663)
|
||||
| `Issue #5323 <https://github.com/postgres/pgadmin4/issues/5323>`_ - Replace the language selection 'Brazilian' with 'Portuguese (Brazilian). (RM #7693)
|
||||
| `Issue #5325 <https://github.com/postgres/pgadmin4/issues/5325>`_ - Fixed an issue where server names with special characters are not displayed correctly in the process tab. (RM #7695)
|
||||
| `Issue #5333 <https://github.com/postgres/pgadmin4/issues/5333>`_ - Fixed an issue where ERD throws an error if variable is added to the column. (RM #7709)
|
||||
| `Issue #5342 <https://github.com/postgres/pgadmin4/issues/5342>`_ - Fixed an error while saving changes to the ERD table.
|
||||
| `Issue #5343 <https://github.com/postgres/pgadmin4/issues/5343>`_ - Fixes a redirect vulnerability when the user opens the pgAdmin URL.
|
||||
| `Issue #5144 <https://github.com/pgadmin-org/pgadmin4/issues/5144>`_ - Ensure that if BigAnimal authentication is aborted, API calls should be stopped. (RM #7472)
|
||||
| `Issue #5209 <https://github.com/pgadmin-org/pgadmin4/issues/5209>`_ - Fixed an issue where pgAdmin failed to start due to bin path migration. (RM #7557)
|
||||
| `Issue #5230 <https://github.com/pgadmin-org/pgadmin4/issues/5230>`_ - Fixed an issue where backup does not work due to parameter 'preexec_fn' no longer being supported. (RM #7580)
|
||||
| `Issue #5250 <https://github.com/pgadmin-org/pgadmin4/issues/5250>`_ - Ensure that the browser tree should be refreshed after changing the ownership. (RM #7607)
|
||||
| `Issue #5274 <https://github.com/pgadmin-org/pgadmin4/issues/5274>`_ - Fixed the error message displayed when clicking the cloud server for which deployment is in progress. (RM #7636)
|
||||
| `Issue #5275 <https://github.com/pgadmin-org/pgadmin4/issues/5275>`_ - Fixed an issue where the wrong SQL displayed in difference if the user create an RLS policy on the table without a column. (RM #7637)
|
||||
| `Issue #5282 <https://github.com/pgadmin-org/pgadmin4/issues/5282>`_ - Ensure that the dump servers functionality works from setup.py. (RM #7644)
|
||||
| `Issue #5284 <https://github.com/pgadmin-org/pgadmin4/issues/5284>`_ - Ensure that the Import/Export server menu option is visible. (RM #7646)
|
||||
| `Issue #5286 <https://github.com/pgadmin-org/pgadmin4/issues/5286>`_ - Fixed API test case for change password in the server mode. (RM #7648)
|
||||
| `Issue #5287 <https://github.com/pgadmin-org/pgadmin4/issues/5287>`_ - Fixed an issue with the non-visibility of columns added prior to import/export data. (RM #7649)
|
||||
| `Issue #5292 <https://github.com/pgadmin-org/pgadmin4/issues/5292>`_ - Fixed an issue where textarea of the JSON Editor does not resize with dialog. (RM #7656)
|
||||
| `Issue #5299 <https://github.com/pgadmin-org/pgadmin4/issues/5299>`_ - Fixed ModuleNotFoundError when running setup.py to load/dump servers. (RM #7663)
|
||||
| `Issue #5323 <https://github.com/pgadmin-org/pgadmin4/issues/5323>`_ - Replace the language selection 'Brazilian' with 'Portuguese (Brazilian). (RM #7693)
|
||||
| `Issue #5325 <https://github.com/pgadmin-org/pgadmin4/issues/5325>`_ - Fixed an issue where server names with special characters are not displayed correctly in the process tab. (RM #7695)
|
||||
| `Issue #5333 <https://github.com/pgadmin-org/pgadmin4/issues/5333>`_ - Fixed an issue where ERD throws an error if variable is added to the column. (RM #7709)
|
||||
| `Issue #5342 <https://github.com/pgadmin-org/pgadmin4/issues/5342>`_ - Fixed an error while saving changes to the ERD table.
|
||||
| `Issue #5343 <https://github.com/pgadmin-org/pgadmin4/issues/5343>`_ - Fixes a redirect vulnerability when the user opens the pgAdmin URL.
|
||||
@@ -0,0 +1,60 @@
|
||||
************
|
||||
Version 6.15
|
||||
************
|
||||
|
||||
Release date: 2022-10-20
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.14.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 10, 11, 12, 13, 14 and 15
|
||||
|
||||
**EDB Advanced Server**: 10, 11, 12, 13, 14 and 15
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #3491 <https://github.com/pgadmin-org/pgadmin4/issues/3491>`_ - Added support for IAM token based authentication for AWS RDS or Azure DB.
|
||||
| `Issue #4392 <https://github.com/pgadmin-org/pgadmin4/issues/4392>`_ - Added support to specify the background fill color to the table nodes in the ERD tool.
|
||||
| `Issue #4994 <https://github.com/pgadmin-org/pgadmin4/issues/4994>`_ - Allow reordering table columns using drag and drop in ERD Tool.
|
||||
| `Issue #4997 <https://github.com/pgadmin-org/pgadmin4/issues/4997>`_ - Add option to generate SQL with DROP table DDL in ERD Tool.
|
||||
| `Issue #5304 <https://github.com/pgadmin-org/pgadmin4/issues/5304>`_ - Added high availability options to AWS deployment.
|
||||
| `Issue #5390 <https://github.com/pgadmin-org/pgadmin4/issues/5390>`_ - Expose the Gunicorn limit_request_line parameter in the container, with the default set to the maximum 8190.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #5065 <https://github.com/pgadmin-org/pgadmin4/issues/5065>`_ - Use SocketIO instead of REST for fetching database tables data in ERD.
|
||||
| `Issue #5293 <https://github.com/pgadmin-org/pgadmin4/issues/5293>`_ - Ensure that the tooltips are consistent throughout the entire application.
|
||||
| `Issue #5357 <https://github.com/pgadmin-org/pgadmin4/issues/5357>`_ - Remove Python's 'Six' package completely.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #5101 <https://github.com/pgadmin-org/pgadmin4/issues/5101>`_ - Ensure consistent orderings for ACLS when comparing schemas in the schema diff.
|
||||
| `Issue #5132 <https://github.com/pgadmin-org/pgadmin4/issues/5132>`_ - Ensure that the result grid column should take width as pre preferences setting on first execution.
|
||||
| `Issue #5133 <https://github.com/pgadmin-org/pgadmin4/issues/5133>`_ - Fixed an exception occur while taking backup and SSL certificates/keys are not found in the specified path.
|
||||
| `Issue #5145 <https://github.com/pgadmin-org/pgadmin4/issues/5145>`_ - Fixed intermittent error shown while OAuth2 login.
|
||||
| `Issue #5167 <https://github.com/pgadmin-org/pgadmin4/issues/5167>`_ - Ensure that the path to the psqlrc file is correct when multiple users open the PSQL tool at the same time.
|
||||
| `Issue #5188 <https://github.com/pgadmin-org/pgadmin4/issues/5188>`_ - Ensure that the continue/start button should be disabled if the user stops the Debugger for the procedures.
|
||||
| `Issue #5210 <https://github.com/pgadmin-org/pgadmin4/issues/5210>`_ - Ensure that the query tool creates a new tab with the appropriate user when pressing Alt+Shift+Q.
|
||||
| `Issue #5212 <https://github.com/pgadmin-org/pgadmin4/issues/5212>`_ - Added the close button for all the notifications of the notistack.
|
||||
| `Issue #5249 <https://github.com/pgadmin-org/pgadmin4/issues/5249>`_ - Added the ability to display the selected text from the query tool in the find/replace box.
|
||||
| `Issue #5261 <https://github.com/pgadmin-org/pgadmin4/issues/5261>`_ - Ensure that the search filter should be cleared when a new row is added to the user management.
|
||||
| `Issue #5262 <https://github.com/pgadmin-org/pgadmin4/issues/5262>`_ - Ensure that the user management dialog should not allow the same email addresses with different letter casings when creating users.
|
||||
| `Issue #5277 <https://github.com/pgadmin-org/pgadmin4/issues/5277>`_ - Fixed XSS vulnerability issues.
|
||||
| `Issue #5296 <https://github.com/pgadmin-org/pgadmin4/issues/5296>`_ - Ensure that the scroll position should be preserved for the result set in the query tool on tab change.
|
||||
| `Issue #5308 <https://github.com/pgadmin-org/pgadmin4/issues/5308>`_ - Ensure that the default value for a column should be used if it is made empty.
|
||||
| `Issue #5327 <https://github.com/pgadmin-org/pgadmin4/issues/5327>`_ - Fixed an issue where user was unable to select privileges in Safari.
|
||||
| `Issue #5332 <https://github.com/pgadmin-org/pgadmin4/issues/5332>`_ - Fixed console warning shown while updating database node from browser tree.
|
||||
| `Issue #5338 <https://github.com/pgadmin-org/pgadmin4/issues/5338>`_ - Fixed an issue where the prompt is not visible when clicking on the 'save results to file' button on the large data.
|
||||
| `Issue #5352 <https://github.com/pgadmin-org/pgadmin4/issues/5352>`_ - Fixed error occurring while LDAP authentication for a user with multiple email attributes.
|
||||
| `Issue #5364 <https://github.com/pgadmin-org/pgadmin4/issues/5364>`_ - Fixed an issue where notifications disappeared quickly.
|
||||
| `Issue #5367 <https://github.com/pgadmin-org/pgadmin4/issues/5367>`_ - Ensure that the correct value should be returned if an exception occurs while decoding the password.
|
||||
| `Issue #5368 <https://github.com/pgadmin-org/pgadmin4/issues/5368>`_ - Fixed the issue while downloading the file from the file manager.
|
||||
| `Issue #5386 <https://github.com/pgadmin-org/pgadmin4/issues/5386>`_ - Ensure that the login form is hidden if the authentication source is OAuth2 or Kerberos.
|
||||
| `Issue #5397 <https://github.com/pgadmin-org/pgadmin4/issues/5397>`_ - Fixed an issue where the password recovery link was not working.
|
||||
| `Issue #5402 <https://github.com/pgadmin-org/pgadmin4/issues/5402>`_ - Ensure that scroll bar on browser tree should be visible on windows resize.
|
||||
| `Issue #5405 <https://github.com/pgadmin-org/pgadmin4/issues/5405>`_ - Fixed the cross-site scripting vulnerability.
|
||||
| `Issue #5427 <https://github.com/pgadmin-org/pgadmin4/issues/5427>`_ - Fixed an issue where filtered rows were not working.
|
||||
@@ -25,7 +25,7 @@ or ``Gunicorn``, or under ``NGINX`` using using ``uWSGI`` or ``Gunicorn``.
|
||||
.. seealso:: For detailed instructions on building and configuring pgAdmin from
|
||||
scratch, please see the README file in the top level directory of the source code.
|
||||
For convenience, you can find the latest version of the file
|
||||
`here <https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob_plain;f=README>`_,
|
||||
`here <https://github.com/pgadmin-org/pgadmin4/blob/master/README.md>`_,
|
||||
but be aware that this may differ from the version included with the source code
|
||||
for a specific version of pgAdmin.
|
||||
|
||||
@@ -300,3 +300,12 @@ Then, configure NGINX:
|
||||
include uwsgi_params;
|
||||
uwsgi_pass unix:/tmp/pgadmin4.sock;
|
||||
}
|
||||
|
||||
Additional Information
|
||||
----------------------
|
||||
|
||||
.. note:: pgAdmin will spawn additional Python processes from time to time, and
|
||||
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.
|
||||
@@ -189,6 +189,16 @@ Use the fields in the *Advanced* tab to configure a connection:
|
||||
(.pgpass). A .pgpass file allows a user to login without providing a password
|
||||
when they connect. For more information, see
|
||||
`Section 33.15 of the Postgres documentation <https://www.postgresql.org/docs/current/libpq-pgpass.html>`_.
|
||||
* Use the *Password exec command* field to specify a shell command to be executed
|
||||
to retrieve a password to be used for SQL authentication. The ``stdout`` of the
|
||||
command will be used as the SQL password. This may be useful when the password
|
||||
should be generated as a transient authorization token instead of providing a
|
||||
password when connecting in `PAM authentication <https://www.postgresql.org/docs/current/auth-pam.html>`_ scenarios.
|
||||
* Use the *Password exec expiration* field to specify a maximum age, in seconds,
|
||||
of the password generated with a *Password exec command*. If not specified,
|
||||
the password will not expire until your pgAdmin session does.
|
||||
Zero means the command will be executed for each new connection or reconnection that is made.
|
||||
If the generated password is not valid indefinitely, set this value to slightly before it will expire.
|
||||
* Use the *Connection timeout* field to specify the maximum wait for connection,
|
||||
in seconds. Zero or not specified means wait indefinitely. It is not
|
||||
recommended to use a timeout of less than 2 seconds. By default it is set to
|
||||
@@ -197,6 +207,8 @@ Use the fields in the *Advanced* tab to configure a connection:
|
||||
.. note:: The password file option is only supported when pgAdmin is using libpq
|
||||
v10.0 or later to connect to the server.
|
||||
|
||||
.. note:: The Password exec option is only supported when pgAdmin is run in desktop mode.
|
||||
|
||||
* Click the *Save* button to save your work.
|
||||
* Click the *Close* button to exit without saving your work.
|
||||
* Click the *Reset* button to return the values specified on the Server dialog
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
.. _submitting_patches:
|
||||
|
||||
***************************
|
||||
`Submitting Patches`:index:
|
||||
***************************
|
||||
|
||||
Before developing a patch for pgAdmin you should always contact the developers
|
||||
on the mailing list pgadmin-hackers@postgresql.org to discuss your
|
||||
plans. This ensures that others know if you're fixing a bug and can then avoid
|
||||
duplicating your work, and in the case of large patches, gives the community
|
||||
the chance to discuss and refine your ideas before investing too much time
|
||||
writing code that may later be rejected.
|
||||
|
||||
You should always develop patches against a checkout of the source code from the
|
||||
GIT source code repository, and not a release tarball. This ensures that you're
|
||||
working with the latest code on the branch and makes it easier to generate
|
||||
patches correctly. You can checkout the source code with a command like:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone git://git.postgresql.org/git/pgadmin4.git
|
||||
|
||||
Once you've made the changes you wish to make, commit them to a private
|
||||
development branch in your local repository. Then create a patch containing the
|
||||
changes in your development branch against the upstream branch on which your
|
||||
work is based. For example, if your current branch contains your changes, you
|
||||
might run:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git diff origin/master > my_cool_feature.diff
|
||||
|
||||
to create a patch between your development branch and the public master branch.
|
||||
|
||||
You can also create patches directly from the development tree, for example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git diff > my_cool_feature.diff
|
||||
|
||||
If you are adding new files, you may need to stage them for commit, and then
|
||||
create your patch against the staging area. If any of the files are binary,
|
||||
for example, images, you will need to use the *--binary* option:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git add file1.py file2.py images/image1.png [...]
|
||||
$ git diff --cached --binary > my_cool_feature.diff
|
||||
|
||||
Once you have your patch, check it thoroughly to ensure it meets the pgAdmin
|
||||
:doc:`coding_standards`, and review it against the :doc:`code_review` to minimise
|
||||
the chances of it being rejected. Once you're happy with your work, mail it
|
||||
as an attachment to the mailing list pgadmin-hackers@postgresql.org.
|
||||
Please ensure you include a full description of what the patch does,
|
||||
as well as the rationale for any important design decisions.
|
||||
@@ -0,0 +1,65 @@
|
||||
.. _submitting_pull_requests:
|
||||
|
||||
*********************************
|
||||
`Submitting Pull Requests`:index:
|
||||
*********************************
|
||||
|
||||
Before developing a feature or bug fix for pgAdmin you should always contact
|
||||
the developers on the mailing list pgadmin-hackers@postgresql.org to discuss
|
||||
your plans. This ensures that others know what you are doing and can then
|
||||
avoid duplicating your work, and in the case of large changes, gives the
|
||||
community the chance to discuss and refine your ideas before investing too
|
||||
much time writing code that may later be rejected.
|
||||
|
||||
You should always develop changes against a checkout of the source code from
|
||||
the GIT source code repository, and not a release tarball. This ensures that
|
||||
you're working with the latest code on the branch and makes it easier to
|
||||
generate Pull Requests correctly.
|
||||
|
||||
As of September 2022, the pgAdmin source repository can found at
|
||||
https://github.com/pgadmin-org/pgadmin4. A typical workflow for a relatively
|
||||
simple change might look as follows:
|
||||
|
||||
1. Visit the pgAdmin 4 project on GitHub, and click the *Fork* button to create
|
||||
your own development repository in your GitHub account.
|
||||
|
||||
2. Checkout a local copy of the source code with a command like:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/<your GitHub username>/pgadmin4.git
|
||||
|
||||
3. Develop and test your change in your local development environment.
|
||||
|
||||
4. Review your changes and check them thoroughly to ensure they meet the
|
||||
pgAdmin :doc:`coding_standards`, and review them against the
|
||||
:doc:`code_review` to minimise the chances of them being rejected.
|
||||
|
||||
5. Once you're happy with your change, commit it with a suitable message.
|
||||
Include a one-line summary at the top, and if appropriate, further
|
||||
paragraphs following a blank line after the summary.
|
||||
|
||||
6. Push your changes to your fork of the repository.
|
||||
|
||||
7. Back in GitHub, create a new Pull Request against the *pgadmin-org/pgadmin4*
|
||||
*master* branch.
|
||||
|
||||
.. note::
|
||||
Each Pull Request should encompass a single bug fix or feature as a single
|
||||
commit. If necessary, you should squash multiple commits for larger changes
|
||||
or features into a single commit before submitting.
|
||||
|
||||
8. Your Pull Request will be reviewed by one or more members of the development
|
||||
team and either accepted or sent back with requested changes. In some cases
|
||||
it may be rejected if the change is not considered appropriate - this is
|
||||
why it's important to discuss your work with the team before spending any
|
||||
significant time on it.
|
||||
|
||||
For more complex changes, you may wish to use a *Feature Branch* in your fork
|
||||
of the pgAdmin repository, and use that to create the Pull Request.
|
||||
|
||||
.. note::
|
||||
This is a simple example of a workflow. You may choose to use other
|
||||
tools such as the `GitHub CLI <https://cli.github.com>`_ instead; documenting
|
||||
such tools and workflows is outside the scope of the pgAdmin documentation
|
||||
however.
|
||||
@@ -39,7 +39,7 @@ Architecture: ${OS_ARCH}
|
||||
Section: database
|
||||
Priority: optional
|
||||
Depends: python3, libpq5 (>= 11.0), libgssapi-krb5-2
|
||||
Recommends: postgresql-client | postgresql-client-14 | postgresql-client-13 | postgresql-client-12 | postgresql-client-11 | postgresql-client-10
|
||||
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.
|
||||
EOF
|
||||
|
||||
@@ -19,7 +19,8 @@ CA_FILE = '/etc/ssl/certs/ca-certificates.crt'
|
||||
LOG_FILE = '/dev/null'
|
||||
HELP_PATH = '../../docs'
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg': '/usr/local/pgsql-14',
|
||||
'pg': '/usr/local/pgsql-15',
|
||||
'pg-15': '/usr/local/pgsql-15',
|
||||
'pg-14': '/usr/local/pgsql-14',
|
||||
'pg-13': '/usr/local/pgsql-13',
|
||||
'pg-12': '/usr/local/pgsql-12',
|
||||
@@ -90,7 +91,7 @@ TIMEOUT=$(cd /pgadmin4 && /venv/bin/python3 -c 'import config; print(config.SESS
|
||||
# Using --threads to have multi-threaded single-process worker
|
||||
|
||||
if [ -n "${PGADMIN_ENABLE_TLS}" ]; then
|
||||
exec /venv/bin/gunicorn --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
|
||||
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
|
||||
else
|
||||
exec /venv/bin/gunicorn --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
|
||||
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
|
||||
fi
|
||||
@@ -74,8 +74,16 @@ _create_python_env() {
|
||||
PATH=${PGADMIN_POSTGRES_DIR}/bin:${PATH}
|
||||
LD_LIBRARY_PATH=${PGADMIN_POSTGRES_DIR}/lib:${LD_LIBRARY_PATH}
|
||||
|
||||
# Figure out what python to use
|
||||
if which python3 > /dev/null 2>&1
|
||||
then
|
||||
SYSTEM_PYTHON_EXE="python3"
|
||||
else
|
||||
SYSTEM_PYTHON_EXE="python"
|
||||
fi
|
||||
|
||||
git clone https://github.com/gregneagle/relocatable-python.git "${BUILD_ROOT}/relocatable_python"
|
||||
PATH=$PATH:/usr/local/pgsql/bin python \
|
||||
PATH=$PATH:/usr/local/pgsql/bin "${SYSTEM_PYTHON_EXE}" \
|
||||
"${BUILD_ROOT}/relocatable_python/make_relocatable_python_framework.py" \
|
||||
--upgrade-pip \
|
||||
--python-version "${PGADMIN_PYTHON_VERSION}" \
|
||||
|
||||
@@ -2,11 +2,63 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!--
|
||||
Disable Sandboxing. This must be enabled for the app store, but it will
|
||||
cause NWjs to fail to start with an error like:
|
||||
|
||||
[1004/170922.238911:ERROR:directory_reader_posix.cc(42)] opendir /dev/fd: Operation not permitted (1)
|
||||
|
||||
We should figure out why that happens and fix it one day, but for now
|
||||
we just don't support the app store.
|
||||
-->
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
Set the app group name for IPC and access to shared containers between
|
||||
our processes.
|
||||
-->
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<string>%TEAMID%.org.pgadmin.pgadmin4</string>
|
||||
|
||||
<!--
|
||||
We have no need for JIT.
|
||||
-->
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
Explicitly disallow executable code overwriting/patching.
|
||||
-->
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
Explicitly disallow use of dynamic loader environment variables that
|
||||
could be used for code injection.
|
||||
-->
|
||||
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
Explicitly ensure that library validation is enabled so we only load
|
||||
libraries and frameworks signed by us or Apple.
|
||||
-->
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
We need to enable this, even though we don't modify our own executables.
|
||||
Otherwise, NWjs just bombs out.
|
||||
-->
|
||||
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
||||
<true/>
|
||||
|
||||
<!--
|
||||
We're not a debugger (well, except for procedural languages in Postgres,
|
||||
but that doesn't count).
|
||||
-->
|
||||
<key>com.apple.security.cs.debugger</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -141,7 +141,7 @@ want to build an installer.
|
||||
|
||||
1. Check out the source code:
|
||||
|
||||
git clone https://git.postgresql.org/git/pgadmin4.git
|
||||
git clone https://github.com/pgadmin-org/pgadmin4.git
|
||||
|
||||
2. Install and build the JS dependencies:
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ WTForms==3.*
|
||||
passlib==1.*
|
||||
pytz==2021.*
|
||||
simplejson==3.*
|
||||
six==1.*
|
||||
speaklater3==1.*
|
||||
sqlparse==0.*
|
||||
psutil==5.*
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"icon": "assets/pgAdmin4.png"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.21.0",
|
||||
"axios": "^0.21.2",
|
||||
"bootstrap": "^4.5.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -96,12 +96,12 @@ astral-regex@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
|
||||
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
||||
|
||||
axios@^0.21.0:
|
||||
version "0.21.0"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.0.tgz#26df088803a2350dff2c27f96fef99fe49442aca"
|
||||
integrity sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==
|
||||
axios@^0.21.2:
|
||||
version "0.21.2"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017"
|
||||
integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==
|
||||
dependencies:
|
||||
follow-redirects "^1.10.0"
|
||||
follow-redirects "^1.14.0"
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
@@ -630,10 +630,10 @@ flatted@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
|
||||
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
|
||||
|
||||
follow-redirects@^1.10.0:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7"
|
||||
integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==
|
||||
follow-redirects@^1.14.0:
|
||||
version "1.15.2"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
|
||||
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
|
||||
|
||||
fs-constants@^1.0.0:
|
||||
version "1.0.0"
|
||||
@@ -964,9 +964,9 @@ minimatch@^3.0.4:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimist@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||
|
||||
mkdirp@^0.5.1:
|
||||
version "0.5.5"
|
||||
|
||||
@@ -18,8 +18,8 @@ import requests
|
||||
import argparse
|
||||
|
||||
PG_CODES_URLS = [
|
||||
"https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;"
|
||||
"f=src/pl/plpgsql/src/pl_scanner.c",
|
||||
"https://raw.githubusercontent.com/postgres/postgres/master/src/pl/"
|
||||
"plpgsql/src/pl_scanner.c",
|
||||
]
|
||||
PG_CODES_REGEX = "PG_KEYWORD\(\"([a-z]*)\"[A-Z_, ]*\)"
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ APP_ICON = 'pg-icon'
|
||||
|
||||
# Application version number components
|
||||
APP_RELEASE = 6
|
||||
APP_REVISION = 14
|
||||
APP_REVISION = 15
|
||||
|
||||
# Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string
|
||||
# for GA releases.
|
||||
@@ -52,7 +52,7 @@ APP_SUFFIX = ''
|
||||
# Numeric application version for upgrade checks. Should be in the format:
|
||||
# [X]XYYZZ, where X is the release version, Y is the revision, with a leading
|
||||
# zero if needed, and Z represents the suffix, with a leading zero if needed
|
||||
APP_VERSION_INT = 61400
|
||||
APP_VERSION_INT = 61500
|
||||
|
||||
# DO NOT CHANGE!
|
||||
# The application version string, constructed from the components
|
||||
@@ -645,6 +645,15 @@ LDAP_ANONYMOUS_BIND = False
|
||||
# OpenLDAP example: CN=Users,dc=example,dc=com
|
||||
LDAP_BASE_DN = '<Base-DN>'
|
||||
|
||||
# Configure the bind format string
|
||||
# Default: LDAP_BIND_FORMAT="
|
||||
# {LDAP_USERNAME_ATTRIBUTE}={LDAP_USERNAME},{LDAP_BASE_DN}"
|
||||
# The current available options are:
|
||||
# LDAP_USERNAME_ATTRIBUTE, LDAP_USERNAME, LDAP_BASE_DN
|
||||
# Example: LDAP_BIND_FORMAT="myldapuser@sales.example.com"
|
||||
# LDAP_BIND_FORMAT="NET\\myldapuser"
|
||||
LDAP_BIND_FORMAT = '{LDAP_USERNAME_ATTRIBUTE}={LDAP_USERNAME},{LDAP_BASE_DN}'
|
||||
|
||||
##########################################################################
|
||||
|
||||
# Search ldap for further authentication (REQUIRED)
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
"""Update DB to version 32
|
||||
|
||||
Added passexec_cmd and passexec_expiration columns to server configuration.
|
||||
|
||||
Revision ID: f79844e926ae
|
||||
Revises: 1586db67b98e
|
||||
Create Date: 2022-10-11 11:25:00.000000
|
||||
|
||||
"""
|
||||
from pgadmin.model import db
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'f79844e926ae'
|
||||
down_revision = '1586db67b98e'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
db.engine.execute("""
|
||||
ALTER TABLE server ADD COLUMN passexec_cmd TEXT(256) null
|
||||
""")
|
||||
db.engine.execute("""
|
||||
ALTER TABLE server ADD COLUMN passexec_expiration INT null
|
||||
""")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# pgAdmin only upgrades, downgrade not implemented.
|
||||
pass
|
||||
@@ -146,6 +146,8 @@
|
||||
"react-aspen": "^1.1.0",
|
||||
"react-checkbox-tree": "^1.7.2",
|
||||
"react-data-grid": "git+https://github.com/EnterpriseDB/react-data-grid.git/#200d2f5e02de694e3e9ffbe177c279bc40240fb8",
|
||||
"react-dnd": "^16.0.1",
|
||||
"react-dnd-html5-backend": "^16.0.1",
|
||||
"react-dom": "^17.0.1",
|
||||
"react-draggable": "^4.4.4",
|
||||
"react-dropzone": "^14.2.1",
|
||||
@@ -168,7 +170,7 @@
|
||||
"underscore": "^1.13.1",
|
||||
"url-loader": "^1.1.2",
|
||||
"valid-filename": "^2.0.1",
|
||||
"webcabin-docker": "git+https://github.com/EnterpriseDB/wcDocker/#40d025e0d86ee3cf058a52e01d2042113f134cdd",
|
||||
"webcabin-docker": "git+https://github.com/EnterpriseDB/wcDocker/#b4d58f29b3a308ab555085ee444fa7010aa4b991",
|
||||
"wkx": "^0.5.0",
|
||||
"xterm": "^4.11.0",
|
||||
"xterm-addon-fit": "^0.5.0",
|
||||
|
||||
@@ -102,6 +102,8 @@ class RdsProvider(AbsProvider):
|
||||
parser_create_instance.add_argument('--storage-type', default='gp2',
|
||||
help='storage type for the data '
|
||||
'database (default: gp2)')
|
||||
parser_create_instance.add_argument('--high-availability',
|
||||
default=False)
|
||||
parser_create_instance.add_argument('--public-ip', default='127.0.0.1',
|
||||
help='Public IP '
|
||||
'(default: 127.0.0.1)')
|
||||
@@ -207,7 +209,7 @@ class RdsProvider(AbsProvider):
|
||||
StorageEncrypted=True,
|
||||
Iops=args.storage_iops,
|
||||
AutoMinorVersionUpgrade=True,
|
||||
MultiAZ=False,
|
||||
MultiAZ=bool(args.high_availability),
|
||||
MasterUsername=args.db_username,
|
||||
MasterUserPassword=db_password,
|
||||
DBInstanceClass=args.instance_type,
|
||||
|
||||
@@ -11,12 +11,16 @@
|
||||
|
||||
import config
|
||||
import copy
|
||||
import functools
|
||||
|
||||
from flask import current_app, flash, Response, request, url_for, \
|
||||
session, redirect
|
||||
from flask_babel import gettext
|
||||
from flask_security.views import _security
|
||||
from flask_security.utils import get_post_logout_redirect, logout_user
|
||||
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
|
||||
@@ -52,6 +56,17 @@ def get_logout_url() -> str:
|
||||
url_for('security.logout'), url_for(BROWSER_INDEX))
|
||||
|
||||
|
||||
def socket_login_required(f):
|
||||
@functools.wraps(f)
|
||||
def wrapped(*args, **kwargs):
|
||||
if not current_user.is_authenticated:
|
||||
disconnect()
|
||||
raise ConnectionRefusedError("Unauthorised !")
|
||||
else:
|
||||
return f(*args, **kwargs)
|
||||
return wrapped
|
||||
|
||||
|
||||
class AuthenticateModule(PgAdminModule):
|
||||
def get_exposed_url_endpoints(self):
|
||||
return ['authenticate.login']
|
||||
@@ -67,12 +82,15 @@ def login():
|
||||
The user input will be validated and authenticated.
|
||||
"""
|
||||
form = _security.login_form()
|
||||
|
||||
auth_obj = AuthSourceManager(form, copy.deepcopy(
|
||||
config.AUTHENTICATION_SOURCES))
|
||||
if OAUTH2 in config.AUTHENTICATION_SOURCES \
|
||||
and 'oauth2_button' in request.form:
|
||||
# Sending empty form as oauth2 does not require form attribute
|
||||
auth_obj = AuthSourceManager({}, copy.deepcopy(
|
||||
config.AUTHENTICATION_SOURCES))
|
||||
session['auth_obj'] = auth_obj
|
||||
else:
|
||||
auth_obj = AuthSourceManager(form, copy.deepcopy(
|
||||
config.AUTHENTICATION_SOURCES))
|
||||
|
||||
session['auth_source_manager'] = None
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
"""Implements Internal Authentication"""
|
||||
|
||||
import six
|
||||
from flask import current_app, flash
|
||||
from flask_security import login_user
|
||||
from abc import abstractmethod, abstractproperty
|
||||
@@ -21,8 +20,7 @@ from pgadmin.utils.validation_utils import validate_email
|
||||
from pgadmin.utils.constants import INTERNAL
|
||||
|
||||
|
||||
@six.add_metaclass(AuthSourceRegistry)
|
||||
class BaseAuthentication(object):
|
||||
class BaseAuthentication(object, metaclass=AuthSourceRegistry):
|
||||
|
||||
DEFAULT_MSG = {
|
||||
'USER_DOES_NOT_EXIST': gettext('Incorrect username or password.'),
|
||||
|
||||
@@ -65,10 +65,13 @@ class LDAPAuthentication(BaseAuthentication):
|
||||
# username and password
|
||||
if not self.bind_user and not self.bind_pass and\
|
||||
self.anonymous_bind is False:
|
||||
user_dn = "{0}={1},{2}".format(config.LDAP_USERNAME_ATTRIBUTE,
|
||||
self.username,
|
||||
config.LDAP_BASE_DN
|
||||
)
|
||||
|
||||
user_dn = config.LDAP_BIND_FORMAT\
|
||||
.format(
|
||||
LDAP_USERNAME=self.username,
|
||||
LDAP_BASE_DN=config.LDAP_BASE_DN,
|
||||
LDAP_USERNAME_ATTRIBUTE=config.LDAP_USERNAME_ATTRIBUTE
|
||||
)
|
||||
|
||||
self.bind_user = user_dn
|
||||
self.bind_pass = self.password
|
||||
@@ -97,7 +100,11 @@ class LDAPAuthentication(BaseAuthentication):
|
||||
return status, msg
|
||||
|
||||
if 'mail' in ldap_user:
|
||||
user_email = ldap_user['mail'].value
|
||||
mail = ldap_user['mail'].value
|
||||
if isinstance(mail, list) and len(mail) > 0:
|
||||
user_email = mail[0]
|
||||
else:
|
||||
user_email = ldap_user['mail'].value
|
||||
|
||||
return self.__auto_create_user(user_email)
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
"""External 2FA Authentication Registry."""
|
||||
from abc import abstractmethod, abstractproperty
|
||||
import six
|
||||
from typing import Union
|
||||
|
||||
import flask
|
||||
@@ -50,8 +49,7 @@ MultiFactorAuthRegistry = create_registry_metaclass(
|
||||
)
|
||||
|
||||
|
||||
@six.add_metaclass(MultiFactorAuthRegistry)
|
||||
class BaseMFAuth():
|
||||
class BaseMFAuth(metaclass=MultiFactorAuthRegistry):
|
||||
"""
|
||||
Base Multi-Factor Authentication (MFA) class
|
||||
|
||||
@@ -60,7 +58,8 @@ class BaseMFAuth():
|
||||
available as a MFA method.
|
||||
"""
|
||||
|
||||
@abstractproperty
|
||||
@property
|
||||
@abstractmethod
|
||||
def name(self) -> str:
|
||||
"""
|
||||
Represents the short name for the authentiation method. It can be used
|
||||
@@ -74,7 +73,8 @@ class BaseMFAuth():
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractproperty
|
||||
@property
|
||||
@abstractmethod
|
||||
def label(self) -> str:
|
||||
"""
|
||||
Represents the user visible name for the authentiation method. It will
|
||||
|
||||
@@ -18,7 +18,6 @@ from smtplib import SMTPConnectError, SMTPResponseException, \
|
||||
from socket import error as SOCKETErrorException
|
||||
from urllib.request import urlopen
|
||||
|
||||
import six
|
||||
import time
|
||||
from flask import current_app, render_template, url_for, make_response, \
|
||||
flash, Response, request, after_this_request, redirect, session
|
||||
@@ -227,8 +226,7 @@ class BrowserModule(PgAdminModule):
|
||||
blueprint = BrowserModule(MODULE_NAME, __name__)
|
||||
|
||||
|
||||
@six.add_metaclass(ABCMeta)
|
||||
class BrowserPluginModule(PgAdminModule):
|
||||
class BrowserPluginModule(PgAdminModule, metaclass=ABCMeta):
|
||||
"""
|
||||
Abstract base class for browser submodules.
|
||||
|
||||
@@ -351,11 +349,13 @@ class BrowserPluginModule(PgAdminModule):
|
||||
"""
|
||||
return []
|
||||
|
||||
@abstractproperty
|
||||
@property
|
||||
@abstractmethod
|
||||
def node_type(self):
|
||||
pass
|
||||
|
||||
@abstractproperty
|
||||
@property
|
||||
@abstractmethod
|
||||
def script_load(self):
|
||||
"""
|
||||
This property defines, when to load this script.
|
||||
@@ -1088,7 +1088,7 @@ if hasattr(config, 'SECURITY_RECOVERABLE') and config.SECURITY_RECOVERABLE:
|
||||
'/reset_password' + slash_url_suffix(
|
||||
'/browser/reset_password', '<token>'
|
||||
),
|
||||
methods=['POST'],
|
||||
methods=['GET', 'POST'],
|
||||
endpoint='reset_password'
|
||||
)
|
||||
@pgCSRFProtect.exempt
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
|
||||
from abc import ABCMeta, abstractmethod
|
||||
|
||||
import six
|
||||
from flask import url_for, render_template
|
||||
from flask import render_template
|
||||
from flask_babel import gettext
|
||||
from pgadmin.browser import BrowserPluginModule
|
||||
from pgadmin.browser.utils import PGChildModule
|
||||
@@ -19,8 +18,7 @@ from pgadmin.utils.preferences import Preferences
|
||||
from pgadmin.utils.constants import PGADMIN_NODE
|
||||
|
||||
|
||||
@six.add_metaclass(ABCMeta)
|
||||
class CollectionNodeModule(PgAdminModule, PGChildModule):
|
||||
class CollectionNodeModule(PgAdminModule, PGChildModule, metaclass=ABCMeta):
|
||||
"""
|
||||
Base class for collection node submodules.
|
||||
"""
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
import simplejson as json
|
||||
from abc import ABCMeta, abstractmethod
|
||||
|
||||
import six
|
||||
from flask import request, jsonify, render_template
|
||||
from flask_babel import gettext
|
||||
from flask_security import current_user, login_required
|
||||
@@ -139,8 +138,7 @@ class ServerGroupMenuItem(MenuItem):
|
||||
super(ServerGroupMenuItem, self).__init__(**kwargs)
|
||||
|
||||
|
||||
@six.add_metaclass(ABCMeta)
|
||||
class ServerGroupPluginModule(BrowserPluginModule):
|
||||
class ServerGroupPluginModule(BrowserPluginModule, metaclass=ABCMeta):
|
||||
"""
|
||||
Base class for server group plugins.
|
||||
"""
|
||||
|
||||
@@ -710,6 +710,8 @@ class ServerNode(PGChildNodeView):
|
||||
'role': 'role',
|
||||
'db_res': 'db_res',
|
||||
'passfile': 'passfile',
|
||||
'passexec_cmd': 'passexec_cmd',
|
||||
'passexec_expiration': 'passexec_expiration',
|
||||
'sslcert': 'sslcert',
|
||||
'sslkey': 'sslkey',
|
||||
'sslrootcert': 'sslrootcert',
|
||||
@@ -978,6 +980,11 @@ class ServerNode(PGChildNodeView):
|
||||
'fgcolor': server.fgcolor,
|
||||
'db_res': server.db_res.split(',') if server.db_res else None,
|
||||
'passfile': server.passfile if server.passfile else None,
|
||||
'passexec_cmd':
|
||||
server.passexec_cmd if server.passexec_cmd else None,
|
||||
'passexec_expiration':
|
||||
server.passexec_expiration if server.passexec_expiration
|
||||
else None,
|
||||
'sslcert': sslcert,
|
||||
'sslkey': sslkey,
|
||||
'sslrootcert': sslrootcert,
|
||||
@@ -1092,6 +1099,8 @@ class ServerNode(PGChildNodeView):
|
||||
tunnel_identity_file=data.get('tunnel_identity_file', None),
|
||||
shared=data.get('shared', None),
|
||||
passfile=data.get('passfile', None),
|
||||
passexec_cmd=data.get('passexec_cmd', None),
|
||||
passexec_expiration=data.get('passexec_expiration', None),
|
||||
kerberos_conn=1 if data.get('kerberos_conn', False) else 0,
|
||||
)
|
||||
db.session.add(server)
|
||||
@@ -1378,7 +1387,9 @@ class ServerNode(PGChildNodeView):
|
||||
server.kerberos_conn is None):
|
||||
conn_passwd = getattr(conn, 'password', None)
|
||||
if conn_passwd is None and not server.save_password and \
|
||||
server.passfile is None and server.service is None:
|
||||
server.passfile is None and \
|
||||
server.passexec_cmd is None and \
|
||||
server.service is None:
|
||||
prompt_password = True
|
||||
elif server.passfile and server.passfile != '':
|
||||
passfile = server.passfile
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{% if data and schema and domain %}
|
||||
ALTER DOMAIN {{ conn|qtIdent(schema, domain) }}
|
||||
ADD CONSTRAINT {{ conn|qtIdent(data.name) }} CHECK ({{ data.consrc }}){% if not data.convalidated %}
|
||||
|
||||
NOT VALID{% endif %};{% if data.description %}
|
||||
|
||||
|
||||
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON DOMAIN {{ conn|qtIdent(schema, domain) }}
|
||||
IS '{{ data.description }}';{% endif %}
|
||||
{% endif %}
|
||||
@@ -1,5 +0,0 @@
|
||||
SELECT
|
||||
typcategory
|
||||
FROM
|
||||
pg_catalog.pg_type
|
||||
WHERE typname = {{datatype}};
|
||||
@@ -1,22 +0,0 @@
|
||||
SELECT
|
||||
c.oid, conname AS name, typname AS relname, nspname, description,
|
||||
pg_catalog.regexp_replace(pg_catalog.pg_get_constraintdef(c.oid, true), E'CHECK \\((.*)\\).*', E'\\1') AS consrc,
|
||||
connoinherit, convalidated, convalidated AS convalidated_p
|
||||
FROM
|
||||
pg_catalog.pg_constraint c
|
||||
JOIN
|
||||
pg_catalog.pg_type t ON t.oid=contypid
|
||||
JOIN
|
||||
pg_catalog.pg_namespace nl ON nl.oid=typnamespace
|
||||
LEFT OUTER JOIN
|
||||
pg_catalog.pg_description des ON (des.objoid=c.oid AND des.classoid='pg_constraint'::regclass)
|
||||
{% if doid %}
|
||||
WHERE
|
||||
contype = 'c' AND contypid = {{doid}}::oid
|
||||
{% if coid %}
|
||||
AND c.oid = {{ coid }}
|
||||
{% endif %}
|
||||
{% elif coid %}
|
||||
WHERE
|
||||
c.oid = {{ coid }}
|
||||
{% endif %}
|
||||
@@ -1,13 +0,0 @@
|
||||
{% set name = o_data.name %}
|
||||
{% if data.name %}
|
||||
{% set name = data.name %}
|
||||
ALTER DOMAIN {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
|
||||
RENAME CONSTRAINT {{ conn|qtIdent(o_data.name) }} TO {{ conn|qtIdent(data.name) }};{% endif -%}{% if data.convalidated %}
|
||||
|
||||
|
||||
ALTER DOMAIN {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
|
||||
VALIDATE CONSTRAINT {{ conn|qtIdent(name) }};{% endif -%}{% if data.description is defined %}
|
||||
|
||||
|
||||
COMMENT ON CONSTRAINT {{ conn|qtIdent(name) }} ON DOMAIN {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
|
||||
IS {{ data.description|qtLiteral }};{% endif %}
|
||||
@@ -1,3 +1,10 @@
|
||||
{% if data and schema and domain %}
|
||||
ALTER DOMAIN {{ conn|qtIdent(schema, domain) }}
|
||||
ADD CONSTRAINT {{ conn|qtIdent(data.name) }} CHECK ({{ data.consrc }});{% endif -%}
|
||||
ADD CONSTRAINT {{ conn|qtIdent(data.name) }} CHECK ({{ data.consrc }}){% if not data.convalidated %}
|
||||
|
||||
NOT VALID{% endif %};{% if data.description %}
|
||||
|
||||
|
||||
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON DOMAIN {{ conn|qtIdent(schema, domain) }}
|
||||
IS '{{ data.description }}';{% endif %}
|
||||
{% endif %}
|
||||
@@ -1,12 +1,15 @@
|
||||
SELECT
|
||||
c.oid, conname AS name, typname AS relname, nspname,
|
||||
pg_catalog.regexp_replace(pg_catalog.pg_get_constraintdef(c.oid, true), E'CHECK \\((.*)\\).*', E'\\1') AS consrc
|
||||
c.oid, conname AS name, typname AS relname, nspname, description,
|
||||
pg_catalog.regexp_replace(pg_catalog.pg_get_constraintdef(c.oid, true), E'CHECK \\((.*)\\).*', E'\\1') AS consrc,
|
||||
connoinherit, convalidated, convalidated AS convalidated_p
|
||||
FROM
|
||||
pg_catalog.pg_constraint c
|
||||
JOIN
|
||||
pg_catalog.pg_type t ON t.oid=contypid
|
||||
JOIN
|
||||
pg_catalog.pg_namespace nl ON nl.oid=typnamespace
|
||||
LEFT OUTER JOIN
|
||||
pg_catalog.pg_description des ON (des.objoid=c.oid AND des.classoid='pg_constraint'::regclass)
|
||||
{% if doid %}
|
||||
WHERE
|
||||
contype = 'c' AND contypid = {{doid}}::oid
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
{% set name = o_data.name %}
|
||||
{% if data.name %}
|
||||
{% set name = data.name %}
|
||||
ALTER DOMAIN {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
|
||||
RENAME CONSTRAINT {{ conn|qtIdent(o_data.name) }} TO {{ conn|qtIdent(data.name) }};{% endif %}
|
||||
RENAME CONSTRAINT {{ conn|qtIdent(o_data.name) }} TO {{ conn|qtIdent(data.name) }};{% endif -%}{% if data.convalidated %}
|
||||
|
||||
|
||||
ALTER DOMAIN {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
|
||||
VALIDATE CONSTRAINT {{ conn|qtIdent(name) }};{% endif -%}{% if data.description is defined %}
|
||||
|
||||
|
||||
COMMENT ON CONSTRAINT {{ conn|qtIdent(name) }} ON DOMAIN {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
|
||||
IS {{ data.description|qtLiteral }};{% endif %}
|
||||
@@ -32,4 +32,5 @@ FROM
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
||||
GROUP BY g.rolname, gt.rolname
|
||||
ORDER BY grantee;
|
||||
@@ -32,4 +32,5 @@ FROM
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
||||
GROUP BY g.rolname, gt.rolname
|
||||
ORDER BY grantee;
|
||||
@@ -32,4 +32,5 @@ FROM
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
||||
GROUP BY g.rolname, gt.rolname
|
||||
ORDER BY grantee;
|
||||
@@ -32,4 +32,5 @@ FROM
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
||||
GROUP BY g.rolname, gt.rolname
|
||||
ORDER BY grantee;
|
||||