From 3643c610217827e71cce77f3307b541ae8b21f4a Mon Sep 17 00:00:00 2001 From: Alex G Rice Date: Mon, 4 May 2020 17:12:49 -0600 Subject: [PATCH 1/3] Add bash scripts for add+remove of organizations, org owners, and org managers. Closes #177 --- bin/managers.sh | 92 ++++++++++++++++++++++++++++++++++++++++++++ bin/organizations.sh | 89 ++++++++++++++++++++++++++++++++++++++++++ bin/owners.sh | 92 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 273 insertions(+) create mode 100755 bin/managers.sh create mode 100755 bin/organizations.sh create mode 100755 bin/owners.sh diff --git a/bin/managers.sh b/bin/managers.sh new file mode 100755 index 00000000..e04c9570 --- /dev/null +++ b/bin/managers.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +set -e + +# +# manage osm-teams organization managers via psql. +# + +show_help() { + cat << __HELP__ + owners.sh + + add or remove managers from osm-teams + + -o | --org-id : organization id to operate on + -u | --user-id : osm/mapedit user id to add/remove + -r | --remove : remove the user from managers list + + example: + + ./managers.sh --user-id 0912311 --org-id 1 + ./managers.sh --remove --user-id 0912311 --org-id 1 + +__HELP__ +} + +die() { + printf '%s\n' "$1" >&2 + exit 1 +} + + +if [ -z "$DSN" ]; then + die "error: DSN for postgreql database is missing" +fi + +uid= +oid= +remove= + +while :; do + case $1 in + -h|-\?|--help) + show_help + exit + ;; + -u|--user-id) + if [ "$2" ]; then + uid=$2 + shift + else + die 'error: "--user-id" requires a non-empty option argument.' + fi + ;; + -o|--org-id) + if [ "$2" ]; then + oid=$2 + shift + else + die 'error: "--org-id" requires a non-empty option argument.' + fi + ;; + -r|--remove) + remove=1 + ;; + --) + shift + break + ;; + -?*) + printf 'warn: Unknown option (ignored): %s\n' "$1" >&2 + ;; + *) # Default case: No more options, so break out of the loop. + break + esac + shift +done + +if [ -z "$uid" ]; then + die "missing --user-id of osm/mapedit user to add/remove" +fi + +if [ -z "$oid" ]; then + die "missing --org-id of organization to modify" +fi + +if [ -z "$remove" ]; then + psql $DSN --command "insert into organization_manager (organization_id, osm_id) values ($oid, $uid)" +else + psql $DSN --command "delete from organization_manager where organization_id = $oid and osm_id = $uid" +fi + +psql $DSN --command "select * from organization_manager" diff --git a/bin/organizations.sh b/bin/organizations.sh new file mode 100755 index 00000000..61fcddc5 --- /dev/null +++ b/bin/organizations.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +set -e + +# +# manage osm-teams organizations via psql. +# + +show_help() { + cat << __HELP__ + organizations.sh + + add or remove organizations from osm-teams + + -n | --name : organization name to add/remove + -d | --description : organization description to add (optional) + -r | --remove : remove the organization (requires --name) + + example: + + ./organizations.sh --name "my org" --description "foo" + ./organizations.sh --remove --name "my org" + +__HELP__ +} + +die() { + printf '%s\n' "$1" >&2 + exit 1 +} + + +if [ -z "$DSN" ]; then + die "error: DSN for postgreql database is missing" +fi + +name= +description= +remove= + +while :; do + case $1 in + -h|-\?|--help) + show_help + exit + ;; + -n|--name) + if [ "$2" ]; then + name=$2 + shift + else + die 'error: "--name" requires a non-empty option argument.' + fi + ;; + + -d|--description) + if [ "$2" ]; then + description=$2 + shift + else + die 'error: "--description" requires a non-empty option argument.' + fi + ;; + -r|--remove) + remove=1 + ;; + --) + shift + break + ;; + -?*) + printf 'warn: Unknown option (ignored): %s\n' "$1" >&2 + ;; + *) # Default case: No more options, so break out of the loop. + break + esac + shift +done + +if [ -z "$name" ]; then + die "missing --name of organization to add/remove" +fi + +if [ -z "$remove" ]; then + psql $DSN --command "insert into organization (name, description) values ('$name', '$description')" +else + psql $DSN --command "delete from organization where name = '$name'" +fi + +psql $DSN --command "select * from organization" diff --git a/bin/owners.sh b/bin/owners.sh new file mode 100755 index 00000000..f9392624 --- /dev/null +++ b/bin/owners.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +set -e + +# +# manage osm-teams organization owners via psql queries +# + +show_help() { + cat << __HELP__ + owners.sh + + add or remove owners from osm-teams + + -o | --org-id : organization id to operate on + -u | --user-id : osm/mapedit user id to add/remove + -r | --remove : remove the user from owners list + + example: + + ./owners.sh --user-id 0912311 --org-id 1 + ./owners.sh --remove --user-id 0912311 --org-id 1 + +__HELP__ +} + +die() { + printf '%s\n' "$1" >&2 + exit 1 +} + + +if [ -z "$DSN" ]; then + die "error: DSN for postgreql database is missing" +fi + +uid= +oid= +remove= + +while :; do + case $1 in + -h|-\?|--help) + show_help + exit + ;; + -u|--user-id) + if [ "$2" ]; then + uid=$2 + shift + else + die 'error: "--user-id" requires a non-empty option argument.' + fi + ;; + -o|--org-id) + if [ "$2" ]; then + oid=$2 + shift + else + die 'error: "--org-id" requires a non-empty option argument.' + fi + ;; + -r|--remove) + remove=1 + ;; + --) + shift + break + ;; + -?*) + printf 'warn: Unknown option (ignored): %s\n' "$1" >&2 + ;; + *) # Default case: No more options, so break out of the loop. + break + esac + shift +done + +if [ -z "$uid" ]; then + die "missing --user-id of osm/mapedit user to add/remove" +fi + +if [ -z "$oid" ]; then + die "missing --org-id of organization to modify" +fi + +if [ -z "$remove" ]; then + psql $DSN --command "insert into organization_owner (organization_id, osm_id) values ($oid, $uid)" +else + psql $DSN --command "delete from organization_owner where organization_id = $oid and osm_id = $uid" +fi + +psql $DSN --command "select * from organization_owner" From 573550135978246f4b550d84687dac228132f72a Mon Sep 17 00:00:00 2001 From: Alex G Rice Date: Tue, 5 May 2020 11:01:54 -0600 Subject: [PATCH 2/3] Return organization id when inserting. --- bin/organizations.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/organizations.sh b/bin/organizations.sh index 61fcddc5..eb0fb4fc 100755 --- a/bin/organizations.sh +++ b/bin/organizations.sh @@ -81,7 +81,9 @@ if [ -z "$name" ]; then fi if [ -z "$remove" ]; then - psql $DSN --command "insert into organization (name, description) values ('$name', '$description')" + org_id=`psql $DSN -t --command "insert into organization (name, description) values ('$name', '$description') returning id"` + echo "created organization id: ${org_id}" + echo else psql $DSN --command "delete from organization where name = '$name'" fi From 31f46eee85af6455eb31eb552c4a9ff2a634aead Mon Sep 17 00:00:00 2001 From: Alex G Rice Date: Tue, 5 May 2020 16:09:49 -0600 Subject: [PATCH 3/3] Fix help message. --- bin/managers.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/managers.sh b/bin/managers.sh index e04c9570..77ad4cdf 100755 --- a/bin/managers.sh +++ b/bin/managers.sh @@ -7,7 +7,7 @@ set -e show_help() { cat << __HELP__ - owners.sh + managers.sh add or remove managers from osm-teams