11f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#!/bin/sh
21f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
31f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry ShmidtCLI=wpa_cli
41f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
51f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtpbc()
61f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
71f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "Starting PBC mode"
81f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "Push button on the station within two minutes"
91f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if ! $CLI wps_pbc | grep -q OK; then
101f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		echo "Failed to enable PBC mode"
111f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	fi
121f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
131f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
141f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtenter_pin()
151f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
161f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "Enter a PIN from a station to be enrolled to the network."
171f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	read -p "Enrollee PIN: " pin
181f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	cpin=`$CLI wps_check_pin "$pin" | tail -1`
191f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if [ "$cpin" = "FAIL-CHECKSUM" ]; then
201f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		echo "Checksum digit is not valid"
211f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		read -p "Do you want to use this PIN (y/n)? " resp
221f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		case "$resp" in
231f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			y*)
241f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				cpin=`echo "$pin" | sed "s/[^1234567890]//g"`
251f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				;;
261f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			*)
271f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				return 1
281f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				;;
291f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		esac
301f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	fi
311f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if [ "$cpin" = "FAIL" ]; then
321f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		echo "Invalid PIN: $pin"
331f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		return 1
341f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	fi
351f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "Enabling Enrollee PIN: $cpin"
361f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	$CLI wps_pin any "$cpin"
371f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
381f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
391f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtshow_config()
401f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
411f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	$CLI status wps
421f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
431f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
441f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtmain_menu()
451f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
461f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "WPS AP"
471f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "------"
481f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "1: Push button (activate PBC)"
491f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "2: Enter Enrollee PIN"
501f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "3: Show current configuration"
511f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo "0: Exit wps-ap-cli"
521f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
531f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	read -p "Command: " cmd
541f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
551f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	case "$cmd" in
561f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		1)
571f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			pbc
581f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			;;
591f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		2)
601f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			enter_pin
611f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			;;
621f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		3)
631f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			show_config
641f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			;;
651f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		0)
661f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			exit 0
671f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			;;
681f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		*)
691f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			echo "Unknown command: $cmd"
701f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt			;;
711f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	esac
721f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
731f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	echo
741f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	main_menu
751f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
761f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
771f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
781f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtmain_menu
79