#!/usr/local/bin/bash

#Copyright Luciano Bello 
#This file is to be released under the WTFPL licence as part of CWKPF
#http://www.lucianobello.com.ar/webknocking/
#see http://sam.zoy.org/wtfpl/COPYING 

echo "Content-type: text/html";
echo

ip_long () {
     c_spaces=$((15-${#1}))
     i=0
     spaces=""
     while [ $i -lt $c_spaces ]; do
          spaces="$spaces " 
          i=$((i+1))
     done
     REPLY="$1$spaces"
}  

host1=$(grep "^host1" /conf/webknock/secret | cut -f 2 -d '=' ) 
host2=$(grep "^host2" /conf/webknock/secret | cut -f 2 -d '=' ) 
password=$(grep "^password" /conf/webknock/secret | cut -f 2 -d '=' ) 
id=`echo $QUERY_STRING | cut -f 2 -d '='`
pass=`echo $QUERY_STRING | cut -f 1 -d '='`
if [ -n "$pass" ]; then
    if [ "$pass" != "$password" ] ; then 
          echo "<h1>Authorization Required</h1>"
          echo "where says <i>put_your_pass_here</i>, put your pass there :)"
          exit
    fi
else
    pass="put_your_pass_here"
fi

echo "<pre>"
echo "Welcome to <your site name> web knocking"
echo "''''''''''''''''''''''''''''''''''''''''"
echo 
echo "You are conected from $REMOTE_ADDR"
case "$id" in
    '0')
        echo "The port 22/tcp is closed for every host"
	state1="X"
	state2="X"
	>/conf/webknock/orig
	>/conf/webknock/dest
        nc 127.0.0.1 50105
         ;;
    '1')
        echo "The port 22/tcp is open for $host1. You can <a href='?$pass=0'>close it</a>."
	state1="-"
	state2="X"
	echo $REMOTE_ADDR > /conf/webknock/orig
	echo $host1 > /conf/webknock/dest
        nc 127.0.0.1 50105
         ;;
    '2')
        echo "The port 22/tcp is open for $host2. You can <a href='?$pass=0'>close it</a>."
        state1="X"
	state2="-"
	echo $REMOTE_ADDR > /conf/webknock/orig
	echo $host2 > /conf/webknock/dest
        nc 127.0.0.1 50105
         ;;
    *)
        state1="X"
	state2="X"
	if [ -s /conf/webknock/orig -a -s /conf/webknock/dest ] ; then 
		REMOTE_ADDR=$(cat /conf/webknock/orig) 
		dest=$(cat /conf/webknock/dest)
	        case $dest in 
                   $host1)
	              state1="-"
        	      echo "The port 22/tcp is open for $host1. You can <a href='?$pass=0'>close it</a>."
		      ;;
                   $host2)
	              state2="-"
        	      echo "The port 22/tcp is open for $host2. You can <a href='?$pass=0'>close it</a>."
		      ;;
		   *)
                      echo "Error. <a href='?$pass=0'>Close all</a>."
                      ;;
                   esac
	else
		echo "Select a destination for the redirection of 22/tcp."
        fi
         ;;
esac

ip_long $REMOTE_ADDR
REMOTE_ADDR=$REPLY
ip_long $host1
host1=$REPLY
ip_long $host2
host2=$REPLY
nc 127.0.0.1 50105

echo 
echo "|-----------------|		"
echo "| $REMOTE_ADDR |"
echo "|-----|-----------|		"
echo "      |				"
echo "      |	                        "
echo "      |        |-----------------|"
echo "      |----<b>$state1</b>---- <a href='?$pass=1'>$host1</a> |"
echo "      |        |-----------------|"
echo "      |                           "
echo "      |        |-----------------|"
echo "      |----<b>$state2</b>---- <a href='?$pass=2'>$host2</a> |"
echo "               |-----------------|"
echo "</pre>"

