view style-templates/upload-styles.sh @ 5560:f2204f91d286

Join the log lines of imports to the log exports to recover data from them. Used in SR export to extract information that where in the meta json but now are only found in the log.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 09 Feb 2022 18:34:40 +0100
parents 136dc9e528c4
children
line wrap: on
line source

#!/bin/bash -e
#
# This is Free Software under GNU Affero General Public License v >= 3.0
# without warranty, see README.md and license for details.
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# License-Filename: LICENSES/AGPL-3.0.txt
#
# Copyright (C) 2019 by via donau
#   – Österreichische Wasserstraßen-Gesellschaft mbH
# Software engineering by Intevation GmbH
#
# Author(s):
# * Sascha Wilde <wilde@intevation.de>

ME=`basename "$0"`
BASEDIR=`dirname "$0"`

usage()
{
  cat <<EOF
$ME [OPTION]... [input-file]...

Upload map styles to gemma. Uses either the given input files or all files
in the directory where this script resides. Input files must have the name
of a published layer in gemma and the suffix .sld-template.

Options:
  -P, --g_port=GPORT  connect to gemma server at GPORT. Default 8000.
  -g, --g_host=GHOST  connect to gemma server on GHOST. Default "localhost".
  -u, --g_user=GUSER  login to gemma as user GUSER. Default "sophie".
  -d, --extra_dir=DIR search DIR in addition to the default styles directory.
                      This option can be specified multiple times.
      --g_pw=GPW      password for GUSER. Default "so2Phie4".
      --help          display this help and exit

EOF
}

fatal()
{
  echo >&2 "$1"
  exit 23
}

# Defaults:

g_port=8000
g_host="localhost"
g_user="sophie"
g_pw="so2Phie4"
declare -a extra_dirs

# Parse options:

OPTS=`getopt \
      -l help,g_port:,g_host:,g_user:,g_pw:,extra_dir: \
      -o P:g:u:d: -n "$ME" -- "$@"`
[ $? -eq 0 ] || { usage ; exit 1 ; }

eval set -- "$OPTS"

while true ; do
  case "$1" in
    --g_port|-P)
      g_port="$2"
      shift 2
      ;;
    --g_host|-g)
      g_host="$2"
      shift 2
      ;;
    --g_user|-u)
      g_user="$2"
      shift 2
      ;;
    --g_pw)
      g_pw="$2"
      shift 2
      ;;
    --extra_dir|-d)
      extra_dirs+=("$2")
      shift 2
      ;;
    --help)
      { usage ; exit 0 ; }
      ;;
    --)
      shift
      break
      ;;
  esac
done

# Main ------------------------------------------------------------

# Login to gemma server
login=$(curl -f -s -S -X POST \
             -d "{\"user\":\"${g_user}\",\"password\":\"${g_pw}\"}" \
             "http://${g_host}:${g_port}/api/login")
token=$(jq -r '.token' <<<"$login")
if [ -z "$token" ]
then
  echo "could not login to gemma server" >&2
  exit 1
fi

roles=$(jq -r '.roles' <<<"$login")

basedir=$( dirname $( realpath "${BASH_SOURCE[0]}" ))
datadir="${basedir}/."

if jq -e 'any(. == "sys_admin")' <<<"$roles" > /dev/null
then
  echo "== Configuring geoserver styles" >&2
  if [ $# -gt 0 ]; then
    files=("$@")
  else
    files=($(find "$datadir" "${extra_dirs[@]}" \
                  -name "*.sld-template" -or -name "*.zip"))
  fi
  for file in ${files[@]}
  do
    style=$(basename $(basename "$file" .zip) .sld-template)
    echo "uploading ${style} ..."
    curl -f -s -S -H "X-Gemma-Auth:${token}" -X POST \
         -F style=@"${file}" \
         "http://${g_host}:${g_port}/api/geo/style/${style}"
  done
  echo 'done.'
else
  echo >&2 'Not authorized as sys_admin'
fi