Last active
September 11, 2021 04:44
-
-
Save ospfranco/60eaa8009e6f1f08fa1ea575d4702cbb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Required parameters: | |
# @raycast.schemaVersion 1 | |
# @raycast.title Show WiFi Password | |
# @raycast.mode silent | |
# Optional parameters: | |
# @raycast.icon 📶 | |
# @raycast.packageName Show WiFi Password | |
# Documentation: | |
# @raycast.author Oscar | |
# @raycast.authorURL https://github.com/ospfranco | |
# The script is originally from Guillermo Rauch, all credit goes to him, all I did was add the Raycast headers | |
# https://github.com/rauchg/wifi-password | |
version="0.1.0" | |
# locate airport(1) | |
airport="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport" | |
if [ ! -f $airport ]; then | |
echo "ERROR: Can't find \`airport\` CLI program at \"$airport\"." | |
exit 1 | |
fi | |
# by default we are verbose (unless non-tty) | |
if [ -t 1 ]; then | |
verbose=1 | |
else | |
verbose= | |
fi | |
# usage info | |
usage() { | |
cat <<EOF | |
Usage: wifi-password [options] [ssid] | |
Options: | |
-q, --quiet Only output the password. | |
-V, --version Output version | |
-h, --help This message. | |
-- End of options | |
EOF | |
} | |
# parse options | |
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do | |
case $1 in | |
-V | --version ) | |
echo $version | |
exit | |
;; | |
-q | --quiet ) | |
verbose= | |
;; | |
-h | --help ) | |
usage | |
exit | |
;; | |
esac | |
shift | |
done | |
if [[ "$1" == "--" ]]; then shift; fi | |
# merge args for SSIDs with spaces | |
args="$@" | |
# check for user-provided ssid | |
if [ "" != "$args" ]; then | |
ssid="$@" | |
else | |
# get current ssid | |
ssid="`$airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'`" | |
if [ "$ssid" = "" ]; then | |
echo "ERROR: Could not retrieve current SSID. Are you connected?" >&2 | |
exit 1 | |
fi | |
fi | |
# warn user about keychain dialog | |
if [ $verbose ]; then | |
echo "" | |
echo "\033[90m … getting password for \"$ssid\". \033[39m" | |
echo "\033[90m … keychain prompt incoming. \033[39m" | |
fi | |
sleep 2 | |
# source: http://blog.macromates.com/2006/keychain-access-from-shell/ | |
pwd="`security find-generic-password -D 'AirPort network password' -ga \"$ssid\" 2>&1 >/dev/null`" | |
if [[ $pwd =~ "could" ]]; then | |
echo "ERROR: Could not find SSID \"$ssid\"" >&2 | |
exit 1 | |
fi | |
# clean up password | |
pwd=$(echo "$pwd" | sed -e "s/^.*\"\(.*\)\".*$/\1/") | |
if [ "" == "$pwd" ]; then | |
echo "ERROR: Could not get password. Did you enter your Keychain credentials?" >&2 | |
exit 1 | |
fi | |
if [ $verbose ]; then | |
echo "\033[96m ✓ \"$pwd\" \033[39m" | |
echo "" | |
else | |
echo $pwd | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment