#!/usr/bin/env bash set -e MEDIA_FILE=$(readlink -f "$1") TRUEPIC_CLI=/home/user/app/truepic STEG_SCRIPTS=/home/user/app/scripts/ PRIVATE_KEY=/home/user/.truepic/default/private.key echo -n "Signing media..." signed_no_watermark=$(mktemp).jpg ${TRUEPIC_CLI} sign $MEDIA_FILE --output ${signed_no_watermark} > /dev/null 2>&1 echo " --> ${signed_no_watermark}" echo echo -n "Extracting manifest..." no_watermark_manifest=$(mktemp).bin ${TRUEPIC_CLI} manifest extract ${signed_no_watermark} --output ${no_watermark_manifest} > /dev/null 2>&1 echo " --> ${no_watermark_manifest}" echo echo -n "Creating watermark signature..." verification_json=$(${TRUEPIC_CLI} verify ${signed_no_watermark}) thumbnail_hash=$( echo "${verification_json}" | \ jq -r '.manifest_store[0].assertions."c2pa.thumbnail.claim.jpeg"[0].thumbnail_id' ) timestamp=$( echo "${verification_json}" | \ jq -r '.manifest_store[0].trusted_timestamp.timestamp' ) echo -n " ${thumbnail_hash}|${timestamp} ..." watermark_signature=$(openssl dgst -sha256 -sign ${PRIVATE_KEY} <(echo "${thumbnail_hash}|${timestamp}") | base64) echo " ${watermark_signature}" echo echo -n "Uploading signed media to steg.ai..." media_id=$(${STEG_SCRIPTS}/upload.sh ${signed_no_watermark} "image/jpeg") echo " --> media_id=${media_id}" rm -f ${signed_no_watermark} echo echo -n "Uploading manifest to steg.ai..." manifest_id=$(${STEG_SCRIPTS}/upload.sh ${no_watermark_manifest} "application/cbor") echo " --> media_id=${manifest_id}" echo echo -n "Watermarking media..." encode_response=$( curl -s https://api.steg.ai/encode_image_async \ -H "x-api-key: ${STEG_AI_API_KEY}" \ --data-raw '{ "media_id": "'${media_id}'", "method": 0, "owner": "Truepic", "custom": "{\"manifest_id\":\"'${manifest_id}'\",\"watermark_signature\":\"'${watermark_signature}'\"}" }' ) echo "$encode_response" #JCL Debugging request_id=$(echo "$encode_response" | jq -r '.data.request_id') if [ -z "$request_id" ] || [ "$request_id" = "null" ]; then echo echo "No request_id" rm -f ${no_watermark_manifest} exit 1; fi watermark_id=$(echo "$encode_response" | jq -r '.data.encode_media_id') status_response="" watermarking_status="" while [ "$watermarking_status" != "Completed." ]; do sleep 1 echo -n ".." status_response=$( curl -s https://api.steg.ai/media_status?request_id=${request_id} \ -H "x-api-key: ${STEG_AI_API_KEY}" ) watermarking_status=$(echo "${status_response}" | jq -r '.data.status') done download_url=$(echo "${status_response}" | jq -r '.data.media_data.media_url') echo " --> media_id=${watermark_id}" echo echo -n "Downloading watermarked media..." watermarked_image=$(mktemp).jpg curl -s -o ${watermarked_image} "$download_url" echo " --> ${watermarked_image}" echo echo -n "Re-signing the watermarked media..." ${TRUEPIC_CLI} sign ${watermarked_image} \ --ingredient-manifest-store ${no_watermark_manifest} \ --output output.jpg \ --assertions-inline '{ "assertions": [ { "label": "c2pa.actions", "data": { "actions": [ { "action": "c2pa.edited", "when": "@now", "softwareAgent": "steg.ai", "parameters": { "description": "A watermark was applied." } } ] } } ] }' > /dev/null 2>&1 echo " --> output.jpg" rm -f ${no_watermark_manifest} echo echo -n "Extracting new manifest..." with_watermark_manifest=$(mktemp).bin ${TRUEPIC_CLI} manifest extract output.jpg --output ${with_watermark_manifest} > /dev/null 2>&1 echo " --> ${with_watermark_manifest}" echo echo -n "Uploading new manifest to steg.ai..." new_manifest_id=$(${STEG_SCRIPTS}/upload.sh ${with_watermark_manifest} "application/cbor") echo " --> media_id=${new_manifest_id}" rm -f ${with_watermark_manifest} echo echo -n "Updating media with new manifest ID... " update_result=$( curl -s https://api.steg.ai/asset \ -X POST \ -H "x-api-key: ${STEG_AI_API_KEY}" \ --data-raw '{ "media_id" : "'${watermark_id}'", "custom": "{\"manifest_id\":\"'${new_manifest_id}'\",\"watermark_signature\":\"'${watermark_signature}'\"}" }' ) echo ${update_result} | jq -r '.message' echo echo -n "Deleting un-watermarked image (${media_id}) from steg.ai... " delete_result=$( curl -s https://api.steg.ai/asset \ -X DELETE \ -H "x-api-key: ${STEG_AI_API_KEY}" \ --data-raw '{ "media_id" : "'${media_id}'" }' ) echo ${delete_result} | jq -r '.message' echo echo -n "Deleting old manifest (${manifest_id}) from steg.ai... " delete_result=$( curl -s https://api.steg.ai/asset \ -X DELETE \ -H "x-api-key: ${STEG_AI_API_KEY}" \ --data-raw '{ "media_id" : "'${manifest_id}'" }' ) echo ${delete_result} | jq -r '.message'