#!/bin/bash
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#

# This script will install and configure GPG key.

set -e

LOCAL_SVN_DIR=local_svn_dir
ROOT_SVN_URL=https://dist.apache.org/repos/dist/
DEV_REPO=dev
RELEASE_REPO=release
HUDI_REPO=hudi

cd ~

echo "=================Checking GPG Key===================="
echo "You need a GPG key which reflects your Apache account."
echo "Do you want to generate a new GPG key associated with your Apache account? [y|N]"
read confirmation
if [[ $confirmation = "y" ]]; then
  echo "===============Generating new GPG key================"
  sudo apt-get install rng-tools
  sudo rngd -r /dev/urandom
  gpg --full-generate-key
fi

echo "================Listing all GPG keys================="
gpg --list-keys
echo "Please copy the public key which is associated with your Apache account:"
read pub_key

echo "===========Configuring git signing key==============="
git config --global user.signingkey $pub_key
git config --list

echo "===========Adding your key into KEYS file============"
echo "It's required to append your key into KEYS file in dist.apache.org"
echo "Have you put your key in KEYS? [y|N]"
read confirmation
if [[ $confirmation != "y" ]]; then
  echo "Only PMC member can write into dist.apache.org. Are you a PMC member? [y|N]"
  read pmc_permission
  if [[ $pmc_permission != "y" ]]; then
    echo "Please ask a PMC member to help you add your key in dev@ list."
    echo "Skip adding key into dist.apache.org/KEYS file."
  else
    echo "Please input your name: "
    read name
    echo "Please input you Apache account creds for checking out ${ROOT_SVN_URL} and adding your key to KEYS file"
    echo "username: "
    read apache_username
    echo "password: "
    read passowrd
    echo "======Starting updating KEYS file in dev repo===="
    if [[ -d ${LOCAL_SVN_DIR} ]]; then
      rm -rf ${LOCAL_SVN_DIR}
    fi
    mkdir ${LOCAL_SVN_DIR}
    cd ${LOCAL_SVN_DIR}
    svn --username=${apache_username} --password=${passowrd} co ${ROOT_SVN_URL}/${DEV_REPO}/${HUDI_REPO}
    cd ${HUDI_REPO}
    (gpg --list-sigs ${name} && gpg --armor --export ${name}) >> KEYS
    svn status
    echo "Please review all changes. Do you confirm to commit? [y|N]"
    read commit_confirmation
    if [[ $commit_confirmation = "y" ]]; then
      svn --username=${apache_username} --password=${passowrd} commit --no-auth-cache KEYS
    else
      echo "Not commit new changes into ${ROOT_SVN_URL}/${DEV_REPO}/${HUDI_REPO}${DEV_REPO}/KEYS"
    fi
    cd ~
    if [[ -d ${LOCAL_SVN_DIR} ]]; then
      rm -rf ${LOCAL_SVN_DIR}
    fi
    mkdir ${LOCAL_SVN_DIR}
    cd ${LOCAL_SVN_DIR}
    echo "===Starting updating KEYS file in release repo==="
    svn --username=${apache_username} --password=${passowrd} co ${ROOT_SVN_URL}/${RELEASE_REPO}/${HUDI_REPO}
    cd ${HUDI_REPO}
    (gpg --list-sigs ${name} && gpg --armor --export ${name}) >> KEYS
    svn status
    echo "Please review all changes. Do you confirm to commit? [y|N]"
    read commit_confirmation
    if [[ $commit_confirmation = "y" ]]; then
      svn --username=${apache_username} --password=${passowrd} commit --no-auth-cache KEYS
    else
      echo "Not commit new changes into ${ROOT_SVN_URL}/${DEV_REPO}/${HUDI_REPO}${RELEASE_REPO}/KEYS"
    fi

    cd ~
    rm -rf ${LOCAL_SVN_DIR}
  fi
fi

echo "================Setting up gpg agent================="
eval $(gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info)
export GPG_TTY=$(tty)
export GPG_AGENT_INFO
