diff options
Diffstat (limited to 'metadata/scripts/remove_entity.sh')
-rwxr-xr-x | metadata/scripts/remove_entity.sh | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/metadata/scripts/remove_entity.sh b/metadata/scripts/remove_entity.sh new file mode 100755 index 00000000..60645a7e --- /dev/null +++ b/metadata/scripts/remove_entity.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +error() +{ + echo "Error: $*" + exit 1 +} + +if [ -z "$1" ]; then + echo "$0 <Filename / id from metadata to remove>" + exit +fi + +metadataurl=$1 + +if [ -s "${metadataurl}" ]; then + entityidfn=$(basename "$metadataurl") +else + case $metadataurl in + [0-9][0-9]*) + url="https://metadata.swamid.se/?rawXML=${metadataurl}" + ;; + https://metadata.swamid.se/?showEntity=*) + #url=$(echo "$metadataurl" | sed 's;showEntity;rawXML;') + url=${metadataurl//showEntity/rawXML} + ;; + esac + metadata=$(curl -L -m 5 -s -k -f "${url}") + + [ -n "$metadata" ] || error "Failed to fetch metadata from $metadataurl" + + entityid=$(echo "$metadata" | sed -n 's/.*entityID=['\''"]\([^"]*\)['\''"].*/\1/p') + [ -n "$entityid" ] || error "Failed to find entityID in metadata" + [ "$(echo "$entityid" | wc -l | sed 's/ //g')" = "1" ] || error "Multiple entityid:s found: $entityid" + + entityidfn=$(echo "$entityid" | sed 's;.*://;;' | sed 's/[^a-zwA-ZW0-9_.-]/-/g' | sed 's/$/.xml/') + [ -n "$entityidfn" ] || error "Failed to generate filename from entityid $entityid" +fi +file=$(find swamid-testing swamid-2.0 swamid-edugain -name "$entityidfn" | head -1) + +if [ -r "$file" ]; then + echo "---------------------" + grep "$file" ./*.mxml + echo "---------------------" + echo -n "OK to remove ? [Y/n]" + read -r x + case $x in + "Y"|"y"|"") ;; + *) exit 1 ;; + esac + + echo + git rm "$file" + + grep "$file" ./*.mxml | sed 's/\(.*\.mxml\): <xi:include href=".*"\/>/\1/' | while read -r mxmlfile ; do + sed -i.bak "/\/$entityidfn/d" "$mxmlfile" + if [ -f "$mxmlfile".bak ]; then + rm "$mxmlfile".bak + fi + done + git diff + git status +else + error "File not found: $file" +fi |