#!/usr/bin/env bash

case $(uname) in
    Linux) GREP=grep;;
    Darwin) GREP=ggrep;;
    CYGWIN*) GREP=grep;;
    *) echo "Unknown OS";;
esac

function get_clipboard {
    case $(uname) in
        Linux) xclip -selection c -o;;
        Darwin) pbpaste;;
        CYGWIN*) getclip;;
        *) echo "Unknown OS";;
    esac
}

# check for GNU grep with regexp
"$GREP" -V | grep GNU > /dev/null || { echo "Error: Could not find GNU grep"; exit 1; }

# simple domain check
# https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch08s15.html
DOMAIN=$(echo "$1" | "$GREP" -P '^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$')


# via clipboard
if [ "$1" == "clip" ]; then
    echo "CLIP :"
    get_clipboard | openssl x509 -text

# via file
elif [ -f "$1" ]; then
    echo "FILE : $1"
    openssl x509 -text -in "$1"

# or via domain
elif [ -n "$DOMAIN"  ]; then
    echo "DOMAIN : $DOMAIN"
    echo -n | openssl s_client -connect "$DOMAIN":443 -servername "$DOMAIN" -prexit 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text

# or error
else
    >&2 echo "ERROR: [$1] is not 'clip', a valid file or a valid domain"
fi