#!/bin/bash ############################################################################# ### ### this script creates a bi-directional application link between a Jira ### and a Confluence instance. ### ### Simply provide base URLs for both applications as well as a user account ### with admin privileges on both systems. ### ### (c) 2018 anaron GmbH ### Author(s): Korbinian Weidinger ### Heinz Jürgen Letsch ### ############################################################################# ########## DEFAULTS/PARAMETERS ######### JIRAAPPLABEL="Jira Schulungsumgebung" CONFAPPLABEL="Confluence Schulungsumgebung" CHEADER=/tmp/cheader CURLVERBOSITY="-s -S -w %{http_code}" CURLVERBOSITY="-s -S " for i in "$@" do case $i in -j=*|--JIRA=*) JIRA="${i#*=}" ;; -l=*|--JIRAlabel=*) JIRAAPPLABEL="${i#*=}" ;; -c=*|--CONFLUENCE=*) CONFLUENCE="${i#*=}" ;; -k=*|--CONFLUENCElabel=*) CONFAPPLABEL="${i#*=}" ;; -u=*|--username=*) USERNAME="${i#*=}" ;; -p=*|--password=*) PASSWORD="${i#*=}" ;; -d|--debug) debug=true CURLVERBOSITY="-D /tmp/header" ;; *) # unknown option ;; esac done if [[ "$debug" == "true" ]] then echo "jira: $JIRA" echo "confluence: $CONFLUENCE" echo "username: $USERNAME" echo "password: $PASSWORD" echo "jiraLabel: $JIRAAPPLABEL" echo "confLabel: $CONFAPPLABEL" echo curlverbosity="-D ${CHEADER} -w %{http_code}" # save response header in debug mode curlverbosity="-D ${CHEADER} " # save response header in debug mode fi #################### FUNCTIONS ################### ### # show brief parameter summary ### usage() { echo -e "\nUsage:\n$0 \n\ -u|--username= \n\ -p|--password= \n\ -j|--jira= \n\ -c|--confluence= \n\ [-l|--jiralabel=] \n\ [-k|--confluencelabel=]\n" } ### # perform oauth authentication for given token/id # params: baseUrl id ### doOauth() { response=$(curl ${CURLVERBOSITY} -u ${USERNAME}:${PASSWORD} -X PUT $1/rest/applinks/3.0/status/$2/oauth \ -H 'content-type: application/json' \ -H "origin: $1" \ -d '{"incoming":{"enabled":true,"twoLoEnabled":true,"twoLoImpersonationEnabled":true},"outgoing":{"enabled":true,"twoLoEnabled":true,"twoLoImpersonationEnabled":true}}') if [[ "${debug}" == "true" ]]; then cat ${CHEADER} echo ${response} fi } ### # create an application link entity # params: baseUrl schema ### createAppLink() { response=$(curl ${CURLVERBOSITY} \ -u ${USERNAME}:${PASSWORD} \ -H "X-Atlassian-Token: no-check" \ -H "Origin: $1" \ -H "Content-Type: application/json" \ -X POST $1/rest/applinks/3.0/applicationlinkForm/createAppLink \ -d "$2" ) if [[ "${debug}" == "true" ]]; then echo ${CHEADER} echo ${response} fi id=$(echo ${response} | grep -oP '(?<=).*?(?=)') if [[ -z ${id} ]]; then $(echo {$response} | grep -oPq '502 Bad Gateway') badGW=$?; $(echo {$response} | grep -oPq 'error status=\"400\"') exists=$?; if [ "$badGW" == "0" ]; then echo " error: instance not running!" else if [ "$exists" == "0" ]; then echo " link already exists" else echo "ERROR: could not create app link on $1: ${response}" fi fi exit 1; fi #echo "got applink ID: ${id}" doOauth $1 ${id} } ### # prepare required data for applink creation # params: application appLabel baseUrlLink # application: jira|confluence # appLabel: label of applink shown in admin GUI # baseUrlLink: baseURL of system to be linked to ### getApplinkSchema(){ echo "{ \"applicationLink\": { \"typeId\":\"$1\", \"name\":\"$2\", \"displayUrl\":\"$3\", \"rpcUrl\":\"$3\", \"isPrimary\":true, \"isSystem\":false }, \"username\":\"$username\", \"password\":\"$password\", \"customRpcURL\":false, \"rpcUrl\":\"null\", \"createTwoWayLink\":false, \"orphanedTrust\":null, \"configFormValues\": { \"trustEachOther\":true, \"shareUserbase\":true } }" } #################### BODY ################### ### # check if required parameters are set ### if [[ -z "${JIRA}" ]] || [[ -z "${CONFLUENCE}" ]] || [[ -z "${USERNAME}" ]] || [[ -z "${PASSWORD}" ]] then usage exit 1 fi ### # create link on both systems ### createAppLink ${JIRA} "$(getApplinkSchema "confluence" "${CONFAPPLABEL}" "${CONFLUENCE}")" createAppLink ${CONFLUENCE} "$(getApplinkSchema "jira" "${JIRAAPPLABEL}" "${JIRA}")"