#!/usr/bin/env bash
ROOT="$(dirname "$0")/.."
SCHEME="https:"
allItems=""
process () {
SWAGGER_FILE=$1
LOGIN=$2
PASSW=$3
if [ ! -e "${SWAGGER_FILE}" ]; then
echo "No swagger file !"
return 1
fi
SWAGGER_DIRECTORY=$(dirname "${SWAGGER_FILE}")
NAME=$(basename "${SWAGGER_DIRECTORY}")
TITLE=$(jq .info.title < "${SWAGGER_FILE}")
if [ "${TITLE:-null}" = "null" ]
then
logger -s "${NAME} - ERROR: swagger has no title !"
return 2
fi
SUMMARY=$(jq .info.summary < "${SWAGGER_FILE}")
DESCRIPTION=$(jq .info.description < "${SWAGGER_FILE}")
if [ "${SUMMARY:-null}" = "null" ] && [ "${DESCRIPTION:-null}" = "null" ]
then
logger -s "${NAME} - ERROR: swagger has no summary nor description!"
return 3
fi
SERVERS=$(jq -r ".servers" < "${SWAGGER_FILE}")
if [ "${SERVERS:-null}" = "null" ]
then
logger -s "${NAME} - ERROR: swagger has no servers!"
return 4
fi
URL=$(jq -r ".servers[] | select(.\"x-profil\").url" < "${SWAGGER_FILE}"|sed -e "s/^/ - url: /")
if [ "${URL:-null}" = "null" ]
then
logger -s "${NAME} - ERROR: swagger has no url !"
return 5
fi
# First profil will be used for all url
PROFIL=$(jq -r ".servers[] | select(.\"x-profil\").\"x-profil\"" < "${SWAGGER_FILE}"|head -n 1)
case ${PROFIL} in
Standard | Deprecated | Reserved | Administrator )
echo -n "${NAME} - ${PROFIL} - "
;;
* )
logger -s "${NAME} - ERROR: swagger has no valid x-profil !"
return 6
;;
esac
CURL_OUTFILE=$(mktemp)
cat <<EOF | curl --silent --user "${LOGIN}:${PASSW}" -T - "http://vpdaf.intra.inist.fr:35270/internal-proxy-1/data/${NAME}.yml" --digest --write-out "%{http_code}" --output /dev/null > "${CURL_OUTFILE}"
http:
routers:
Router-${NAME}:
entryPoints:
- "web"
middlewares:
- "Middleware-${PROFIL}"
service: "Service-${NAME}"
rule: "Host(\`${NAME}.services.istex.fr\`, \`${NAME}.services.inist.fr\`)"
services:
Service-${NAME}:
loadBalancer:
servers:
${URL}
EOF
HTTP_CODE=$(cat "${CURL_OUTFILE}"; rm "${CURL_OUTFILE}")
echo -n "${HTTP_CODE} - "
CURL_OUTFILE=$(mktemp)
cat <<EOF | curl --silent --user "${LOGIN}:${PASSW}" -T - "http://vpdaf.intra.inist.fr:35270/internal-metrics-1/data/config/${NAME}.yml" --digest --write-out "%{http_code}" --output /dev/null > "${CURL_OUTFILE}"
- job_name: '${NAME}'
scrape_interval: 10s
scheme: https
static_configs:
- targets: ['${NAME}.services.istex.fr']
EOF
HTTP_CODE=$(cat "${CURL_OUTFILE}"; rm "${CURL_OUTFILE}")
echo "${HTTP_CODE}"
allItems+="{ url: \"${SCHEME}//${NAME}.services.istex.fr\", name: ${TITLE} },"
return 0
}
FILES=$(ls "${ROOT}"/*/swagger.json)
echo -n "Login: "
read -r login
echo -n "Password: "
read -rs passw
echo " "
for swagger in ${FILES}
do
process "$swagger" "$login" "$passw"
done
echo -n "open-api - Swagger - "
CURL_OUTFILE=$(mktemp)
cat <<EOF | curl --silent --user "${login}:${passw}" -T - "http://vpdaf.intra.inist.fr:35270/open-api-1/data/swagger-initializer.js" --digest --write-out "%{http_code}" --output /dev/null > "${CURL_OUTFILE}"
window.onload = function() {
//<editor-fold desc="Changeable Configuration Block">
// the following lines will be replaced by docker/configurator, when it runs in a docker-container
window.ui = SwaggerUIBundle({
urls: [
${allItems}
],
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
});
//</editor-fold>
};
EOF
HTTP_CODE=$(cat "${CURL_OUTFILE}"; rm "${CURL_OUTFILE}")
echo "${HTTP_CODE}"