#!/usr/bin/env bash

#Variables
SCRIPT_PATH=$0
CMD=$(basename "$0")

REPO_IMAGE=${1}

#Server with connection to internet
SERVER=${2}

#User and password for docker login on $SERVER
REMOTE_USER=
REMOTE_PASSWD=

#User and password for docker login on localhost
LOCAL_USER=
LOCAL_PASSWD=
IMAGE=`sed 's/^[^/]*\///g' <<< ${1}`

help()
{
cat <<EOF
${CMD} - tool for downloading image and adding it to offline nexus repository

Usage
        $SCRIPT_PATH <repository>/<image>:<tag> <server>

        $SCRIPT_PATH <repository>/<image>:<tag> <server> --local-repo example.repository

MANDATORY PARAMETERS:
<repository>/<image>:<tag> == image to be downloaded (e.g. nexus3.onap.org:10001/library/busybox:latest)
<server> == server with connection to internet and docker installed

OPTIONAL PARAMETERS:
--remote-user == user for docker login on <server>
--remote-passwd == password for cicd-user
--local-user == user for docker login on localhost
--local-passwd == password for local-user
--local-repo == local repository where new image should be pushed

EOF
}

if [ $# -lt 2 ]; then
  help
  exit 1
fi

#Set up parameters
while [[ $# -gt 2 ]]; do
    case $3 in
        --remote-user)          REMOTE_USER=$4
                                ;;
        --remote-passwd)        REMOTE_PASSWD=$4
                                ;;
        --local-user)           LOCAL_USER=$4
                                ;;
        --local-passwd)         LOCAL_PASSWD=$4
                                ;;
        --local-repo)           LOCAL_REPO=$4
                                ;;
        -h | --help)            help
                                exit 0
                                ;;
        *)                      help
                                exit 1
                                ;;
    esac
    shift 2
done

REMOTE_USER=${REMOTE_USER:-jenkins}
REMOTE_PASSWD=${REMOTE_PASSWD:-jenkins}
LOCAL_USER=${LOCAL_USER:-admin}
LOCAL_PASSWD=${LOCAL_PASSWD:-admin123}
LOCAL_REPO=${LOCAL_REPO:-nexus3.onap.org:10001}

# Login to CICD server, pull image and push it into CICD nexus repo
/usr/bin/ssh -oStrictHostKeyChecking=no $SERVER << EOF
  set -e
  docker pull $REPO_IMAGE
  docker tag $REPO_IMAGE $SERVER/$IMAGE
  docker login -u $REMOTE_USER -p $REMOTE_PASSWD $SERVER
  docker push $SERVER/$IMAGE
  docker rmi $REPO_IMAGE
  docker rmi $SERVER/$IMAGE
EOF

if [ $? -eq 1 ]
then
  exit 1
fi

# Download image from CICD nexus repo and push it into local repo
docker pull  $SERVER/$IMAGE
docker tag $SERVER/$IMAGE $LOCAL_REPO/$IMAGE
docker login -u $LOCAL_USER -p $LOCAL_PASSWD $LOCAL_REPO
docker push $LOCAL_REPO/$IMAGE
docker rmi $SERVER/$IMAGE
docker rmi $LOCAL_REPO/$IMAGE

echo 'Done Successfully'
