Bash document import
From OpenKM Documentation
This is a simplified version of the script which make use of RESTful API.
#!/bin/bash
OKM_SERVICE="http://localhost:8080/OpenKM"
OKM_USER="okmAdmin"
OKM_PASSWORD="admin"
OKM_PATH="/okm:root/upload"
LOCAL_PATH="."
TMP=$(mktemp)
RESET='\e[0m'
ERROR='\e[1;31m'
OK='\e[1;34m'
for DIR in $(find $LOCAL_PATH -type d); do
DIR=${DIR:1:${#DIR}}
if [ -n "$DIR" ]; then
RETCODE=$(curl -u $OKM_USER:$OKM_PASSWORD --write-out %{http_code} -X POST --silent --output $TMP \
-H "Content-Type: application/json" -d "$OKM_PATH$DIR" "$OKM_SERVICE/services/rest/folder/createSimple")
if [ $RETCODE != "200" ]; then
echo -e "${ERROR}ERROR -> $(cat $TMP)${RESET}";
else
echo -e "${OK}Folder created: ${OKM_PATH}${DIR}${RESET}"
fi
fi
done
for FILE in $(find $LOCAL_PATH -type f); do
FILE=${FILE:2:${#FILE}}
RETCODE=$(curl -u $OKM_USER:$OKM_PASSWORD --write-out %{http_code} -X POST --silent --output $TMP \
-F "docPath=$OKM_PATH/$FILE" -F content=@$FILE "$OKM_SERVICE/services/rest/document/createSimple")
if [ $RETCODE != "200" ]; then
echo -e "${ERROR}ERROR -> $(cat $TMP)${RESET}";
else
echo -e "${OK}Document created: ${OKM_PATH}/${FILE}${RESET}"
fi
done
# Cleanup
rm -f $TMP
Bash script for importing document into OpenKM server using SOAP webservices.
Download script File:OpenKM import.sh.zip.
Script correction suggested on [public forum]. Replace "--header "SOAPAction:action" --data @- \ " for "--header "SOAPAction:" --data @- \". |
Script:
#!/bin/sh
##############################################################################
# Copyright (c) 2013: Jörg Palmer, JoergPalmer @ OpenKM forums
#
# Script for importing a document into OpenKM via web services
# 1. Logon using an "import user"
# 2. Import the document into a pre-defined folder
# 3. Logoff the server
##############################################################################
### Configuration section, please adjust to your setup
OKM_ID="autoImport" # User ID / name
OKM_PW="Import42" # Password
### Configuration section ends here
### DO NOT CHANGE FROM HERE UNLESS YOU KNOW WHAT YOU ARE DOING!
# Constants definition
TOOLNAME="OpenKM_import"
VERSION="v1.0"
# Possible exit codes
EXIT_OK="0" # 0=success
EXIT_BAD_ARGS="1" # 1=wrong number of parameters
EXIT_BAD_LOGON="2" # 2=logon to OpenKM failed
EXIT_BAD_LOGOFF="3" # 3=Logoff from OpenKM failed
# LOG Level
LOG_ERR="0" # 0=only error messages
LOG_INFO="1" # 1=error messages and some infos
LOG_DEBUG="2" # 2=debug level logging
START=`date +%s`
usage() {
cat << EOF
--------------------------------------------------------------------------------------
Script to import a document into an OpenKM server, using SOAP web services.
Please adjust the user id settings at the beginning of the script to your needs.
Copyright: Jörg Palmer
Version: $VERSION
Usage: OpenKM_import.sh [-h] [-v] [-g] [-u url] [-p path] document
Options:
-h : Display this help message
-v : Increase the verbosity (this option can be used more than once)
-g : Activate debug mode:
- Set the verbosity to the highest possible
-u url : Set the url to the OpenKM instance
Default: http://localhost:8080/OpenKM
-p path : Set the taxonomy path to be imported to
Default: /okm:root/imported
document : The file to be imported
--------------------------------------------------------------------------------------
EOF
}
#################################################
# Get an absolute path from a relative path to a file
#
# Param1 : Relative path
# Returns: 1 if the folder in which the file is located does not exist
# 0 otherwise
#################################################
absolutePath() {
local wdsave absolutepath
wdsave="$(pwd)"
! cd "$(dirname "$1")" 1> /dev/null 2> /dev/null && return 1
absolutepath="$(pwd)/$(basename "$1")"
cd "$wdsave"
echo "$absolutepath"
return 0
}
# Initialization the configuration parameters with default values
VERBOSITY="$LOG_ERR" # default verbosity level
OKM_URL="http://localhost:8080/OpenKM" # OpenKM URL
OKM_PATH="/okm:root/imported" # Taxonomy path to be imported to
# Parse optional command line arguments
while getopts ":hvgu:p:" opt; do
case $opt in
h) usage ; exit 0 ;;
v) VERBOSITY=$(($VERBOSITY+1)) ;;
g) VERBOSITY="10" ;;
u) OKM_URL="$OPTARG" ;;
p) OKM_PATH="$OPTARG" ;;
\?)
echo "Invalid option: -$OPTARG" >&2
usage
exit $EXIT_BAD_ARGS ;;
:)
echo "Option -$OPTARG requires an argument" >&2
usage
exit $EXIT_BAD_ARGS ;;
esac
done
# Remove the optional arguments parsed above.
shift $((OPTIND-1))
# Check if the number of mandatory parameters
# provided is as expected
if [ "$#" -ne "1" ]; then
echo "Document file name is missing! ($# arguments provided)" >&2
usage
exit $EXIT_BAD_ARGS
fi
[ $VERBOSITY -ge $LOG_INFO ] && echo "$TOOLNAME, version: $VERSION"
# Generate the document information
FILENAME="`absolutePath "$1"`"
FILENAME_BASE="${FILENAME##*/}"
[ $VERBOSITY -ge $LOG_INFO ] && echo "Document file: '$FILENAME', basename: '$FILENAME_BASE'"
# Logon
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Logging on to OpenKM Server '$OKM_URL' with '$OKM_ID'"
response_Auth_logon=$(curl --silent --header "Content-Type: text/xml;charset=UTF-8" \
--header "SOAPAction:action" --data @- \
--request POST "${OKM_URL}/services/OKMAuth" << EOF
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.openkm.com">
<soapenv:Header/>
<soapenv:Body>
<ws:login>
<user>$OKM_ID</user>
<password>$OKM_PW</password>
</ws:login>
</soapenv:Body>
</soapenv:Envelope>
EOF
)
# Check for response code -> Got access token?
token=$(grep -oPm1 "(?<=<return>)[^<]+" <<< "$response_Auth_logon")
if [ -z "$token" ]; then
echo "Error logging on to OpenKM server!" >&2
echo "Response: "$response_Auth_logon >&2 && exit $EXIT_BAD_LOGON
else
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Logon successful (Token: '"$token"')"
fi
# Content must be base64 -> read and encode
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Encoding input file as Base64"
content="`base64 "$FILENAME"`"
# Import the document
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Importing document '$FILENAME_BASE' to '$OKM_PATH/$FILENAME_BASE'"
response_Doc=$(curl --silent --header "Content-Type: text/xml;charset=UTF-8" \
--header "SOAPAction:action" --data @- \
--request POST "${OKM_URL}/services/OKMDocument" << EOF
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.openkm.com">
<soapenv:Header/>
<soapenv:Body>
<ws:createSimple>
<token>$token</token>
<docPath>$OKM_PATH/$FILENAME_BASE</docPath>
<content>$content</content>
</ws:createSimple>
</soapenv:Body>
</soapenv:Envelope>
EOF
)
# Check for success
fault=$(grep -oPm1 "(?<=<faultcode>)[^<]+" <<< "$response_Doc")
if [ -n "$fault" ]; then
echo "Error importing document: "$fault": '" \
$(grep -oPm1 "(?<=<faultstring>)[^<]+" <<< "$response_Doc") \
"' -> "$(grep -oPm1 "[^:]+Exception" <<< "$response_Doc") >&2
echo "Response: "$response_Doc >&2
else
uuid=$(grep -oPm1 "(?<=<uuid>)[^<]+" <<< "$response_Doc")
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Document '$uuid' imported successfully"
fi
# Logoff
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Logging off from OpenKM server"
response_Auth_logoff=$(curl --silent --header "ConteONnt-Type: text/xml;charset=UTF-8" \
--header "SOAPAction:action" --data @- \
--request POST "${OKM_URL}/services/OKMAuth" << EOF
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.openkm.com">
<soapenv:Header/>
<soapenv:Body>
<ws:logout>
<token>$token</token>
</ws:logout>
</soapenv:Body>
</soapenv:Envelope>
EOF
)
# Check for success
fault=$(grep -oPm1 "(?<=<faultcode>)[^<]+" <<< "$response_Auth_logoff")
if [ -n "$fault" ]; then
echo "Error logging off from server: "$fault": '" \
$(grep -oPm1 "(?<=<faultstring>)[^<]+" <<< "$response_Auth_logoff") \
"' -> "$(grep -oPm1 "[^:]+Exception" <<< "$response_Auth_logoff") >&2
echo "Response: "$response_Auth_logoff >&2
else
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Logoff successful"
fi
END=`date +%s`
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Script took $(($END-$START)) seconds"
exit $EXIT_OK
More information at http://forum.openkm.com/viewtopic.php?f=5&t=12032