Blame lookaside_upload_sig

03f8bc
#!/bin/bash
03f8bc
 
03f8bc
# This script will let you upload sources/blobs to new CentOS lookaside cache
03f8bc
# requirements:
03f8bc
#  - curl
03f8bc
#  - valid TLS certs from https://accounts.centos.org (or dev instance for testing)
03f8bc
#  - valid group membership to let you upload to specific "branch"
03f8bc
 
03f8bc
# Some variables, switch for new url
03f8bc
lookaside_baseurl="https://git.centos.org"
03f8bc
 
03f8bc
function usage {
03f8bc
 
03f8bc
cat <<  EOF
03f8bc
03f8bc
You need to call the script like this : $0 -arguments
03f8bc
 
03f8bc
        -f : filename/source to upload (required, default:none)
03f8bc
        -a : hash parameter (optional, default: none, example "b6804fa")
03f8bc
        -n : package name for that source (requred, default:none, example "httpd")
03f8bc
        -b : "branch" where to upload to (optional, default:none, example "c7-sig-core")
03f8bc
        -h : display this help
03f8bc
As far as branch and hash parameters are optional, one of these needs to be specified.
03f8bc
03f8bc
EOF
03f8bc
 
03f8bc
}
03f8bc
 
03f8bc
function varcheck {
03f8bc
if [ -z "$1" ] ; then
03f8bc
        usage
03f8bc
        exit 1
03f8bc
fi
03f8bc
 
03f8bc
}
03f8bc
 
03f8bc
function f_log {
03f8bc
  echo "[+] CentOS Lookaside upload tool -> $*"
03f8bc
}
03f8bc
 
03f8bc
03f8bc
while getopts “hf:a:n:b:” OPTION
03f8bc
do
03f8bc
     case $OPTION in
03f8bc
         h)
03f8bc
             usage
03f8bc
             exit 1
03f8bc
             ;;
03f8bc
         a)
03f8bc
             hash=$OPTARG
03f8bc
             ;;
03f8bc
         f)
03f8bc
             file=$OPTARG
03f8bc
             ;;
03f8bc
         n)
03f8bc
             pkgname=$OPTARG
03f8bc
             ;;
03f8bc
         b)
03f8bc
             branch=$OPTARG
03f8bc
             ;;
03f8bc
         ?)
03f8bc
             usage
03f8bc
             exit
03f8bc
             ;;
03f8bc
     esac
03f8bc
done
291890
291890
if [ -z "${hash}" && -z "${branch}" ] ;then
291890
  f_log "Neither -a hash or -b branch parameters were provided."
291890
  usage
291890
  exit 1
291890
fi
291890
03f8bc
varcheck $file
03f8bc
varcheck $pkgname
03f8bc
 
03f8bc
if [ ! -f ~/.centos.cert ] ;then
03f8bc
  f_log "No mandatory TLS cert found (~/.centos.cert) .."
03f8bc
  f_log "please use centos-cert to retrieve your ACO TLS cert"
03f8bc
  exit 1
03f8bc
fi
03f8bc
 
03f8bc
if [ ! -f "${file}" ] ;then
03f8bc
  f_log "Source to upload ${file} not found"
03f8bc
  exit 2
03f8bc
fi
03f8bc
291890
if [ -n "${hash}" ]; then
291890
  checksum=${hash}
291890
else
291890
  checksum=$(sha1sum ${file}|awk '{print $1}')
291890
fi
291890
03f8bc
f_log "Checking if file already uploaded"
03f8bc
local_size=$(stat -c %s ${file})
03f8bc
03f8bc
# -z parameter optional #
03f8bc
03f8bc
if [ -z "${branch}" ] ;then
03f8bc
  f_log "Branch parameter not given"
291890
  http_code=$(curl -s -o /dev/null -w "%{http_code}" ${lookaside_baseurl}/sources/${pkgname}/${hash}/${checksum})
291890
  remote_size=$(curl --silent -i --head ${lookaside_baseurl}/sources/${pkgname}/${hash}/${checksum}|grep "Content-Length"|cut -f 2 -d ':'|tr -d [:blank:]|tr -d '\r')
03f8bc
  exit 0
03f8bc
else	
291890
  http_code=$(curl -s -o /dev/null -w "%{http_code}" ${lookaside_baseurl}/sources/${pkgname}/${hash}/${checksum})
291890
  remote_size=$(curl --silent -i --head ${lookaside_baseurl}/sources/${pkgname}/${hash}/${checksum}|grep "Content-Length"|cut -f 2 -d ':'|tr -d [:blank:]|tr -d '\r')
03f8bc
fi
03f8bc
03f8bc
03f8bc
if [ "$http_code" -eq 200 ] && [ "$local_size" -eq "$remote_size" ] ; then
03f8bc
  f_log "File already uploaded"
03f8bc
  exit 3
03f8bc
fi
03f8bc
 
03f8bc
f_log "Initialing new upload to lookaside"
03f8bc
f_log "URL : $lookaside_baseurl"
03f8bc
f_log "Source to upload : ${file} "
291890
f_log "Hash parameter : ${hash}"
03f8bc
f_log "Package name: $pkgname"
03f8bc
f_log "sha1sum: ${checksum}"
03f8bc
03f8bc
# Ugly way of implementing conditional parameter
03f8bc
03f8bc
if [ -z "${branch}" && "${hash}" -gt 0 ] ;then
03f8bc
  f_log "Remote branch not specified" 
03f8bc
  f_log " ====== Trying to upload ======="
291890
  echo ""
291890
  # Concatenating sha256
291890
  hash_cmd="$(hash) $(sha1sum ${file}|awk '{print $1}')"
291890
  curl ${lookaside_baseurl}/sources/upload_sig.cgi \
03f8bc
    --fail \
03f8bc
    --cert ~/.centos.cert \
03f8bc
    --form "name=${pkgname}" \
03f8bc
    --form "hash=${hash}" \
291890
    --form "sha1sum=${hash_cmd}" \
03f8bc
    --form "file=@${file}" \
03f8bc
    --progress-bar | tee /dev/null \
03f8bc
# Saving a copy
03f8bc
  > lookaside_upload_sig
03f8bc
03f8bc
  upload_result="${PIPESTATUS[0]}"
03f8bc
03f8bc
  if [ "$upload_result" -ne "0" ] ;then
03f8bc
    f_log "[ERROR] Something didn't work to push to ${lookaside_baseurl}/sources/${pkgname}/${checksum}"
03f8bc
    f_log "[ERROR] Verify at the server side"
03f8bc
    exit 1
03f8bc
  fi
03f8bc
03f8bc
  f_log "Validating that source was correctly uploaded ...."
03f8bc
  remote_size=$(curl --silent -i --head ${lookaside_baseurl}/sources/${pkgname}/${checksum}|grep "Content-Length"|cut -f 2 -d ':'|tr -d [:blank:]|tr -d '\r')
03f8bc
  if [ "$local_size" -eq "$remote_size" ] ; then
291890
    f_log "[SUCCESS] Source should be available at ${lookaside_baseurl}/sources/${pkgname}/${hash}/${checksum}"
03f8bc
  else
03f8bc
    f_log "[ERROR] it seems there is a mismatch with source size and remote file size"
03f8bc
  fi
03f8bc
elif [ -z "${hash}" && "${branch}" -gt 0 ] ;then
03f8bc
  f_log "Remote branch: ${branch}" 
03f8bc
  f_log " ====== Trying to upload ======="
03f8bc
  echo "" 
03f8bc
03f8bc
  curl ${lookaside_baseurl}/sources/upload.cgi \
03f8bc
    --fail \
03f8bc
    --cert ~/.centos.cert \
03f8bc
    --form "name=${pkgname}" \
03f8bc
    --form "branch=${branch}" \
03f8bc
    --form "sha1sum=${checksum}" \
03f8bc
    --form "file=@${file}" \
03f8bc
    --progress-bar | tee /dev/null
03f8bc
  
03f8bc
  # Saving a copy
291890
  > lookaside_upload
03f8bc
	 
03f8bc
  upload_result="${PIPESTATUS[0]}"
03f8bc
	 
03f8bc
  if [ "$upload_result" -ne "0" ] ;then
03f8bc
    f_log "[ERROR] Something didn't work to push to ${lookaside_baseurl}/sources/${pkgname}/${branch}/${checksum}"
03f8bc
    f_log "[ERROR] Verify at the server side"
03f8bc
    exit 1
03f8bc
  fi
03f8bc
	 
03f8bc
  f_log "Validating that source was correctly uploaded ...."
03f8bc
  remote_size=$(curl --silent -i --head ${lookaside_baseurl}/sources/${pkgname}/${branch}/${checksum}|grep "Content-Length"|cut -f 2 -d ':'|tr -d [:blank:]|tr -d '\r')
03f8bc
  if [ "$local_size" -eq "$remote_size" ] ; then
03f8bc
    f_log "[SUCCESS] Source should be available at ${lookaside_baseurl}/sources/${pkgname}/${branch}/${checksum}"
03f8bc
  else
03f8bc
    f_log "[ERROR] it seems there is a mismatch with source size and remote file size"
03f8bc
  fi
03f8bc
else
03f8bc
  f_log "[ERROR] Neither branch or hash parameters were specified"
03f8bc
  exit 1
03f8bc
fi