#!/bin/bash

shopt -s extglob nullglob
set -e -v

base=$(mktemp -d -t 113)
device=$(uname -m)

if [[ ${device} = iPod* ]]; then
    ipsw='iPod/SBML/osx/061-4060.20080115.9Iuh5/iPod1,1_1.1.3_4A93_Restore.ipsw'
    dmg='022-3742-100.dmg'
else
    ipsw='iPhone/061-4061.20080115.4Fvn7/iPhone1,1_1.1.3_4A93_Restore.ipsw'
    dmg='022-3743-100.dmg'
fi

wget -O "${base}/ipsw.zip" "http://appldnld.apple.com.edgesuite.net/content.info.apple.com/${ipsw}"
unzip -d "${base}/ipsw" "${base}/ipsw.zip"
rm -f "${base}/ipsw.zip"

vfdecrypt -i "${base}/ipsw/${dmg}" -k 11070c11d93b9be5069b643204451ed95aad37df7b332d10e48fd3d23c62fca517055816 -o "${base}/ipsw.dmg"
rm -rf "${base}/ipsw"

dmg2img -v "${base}/ipsw.dmg" "${base}/ipsw.img"
rm -f "${base}/ipsw.dmg"

/usr/libexec/vndevice attach /dev/vn0 "${base}/ipsw.img"
mount_hfs /dev/vn0 /mnt

rsync -SPaz /mnt/ /
    --exclude fstab \
    --exclude kernelcache.s5l8900xrb

umount /mnt
/usr/libexec/vndevice detach /dev/vn0

patch /System/Library/Lockdown/Services.plist <<EOF
--- iPhone-1.1.3/System/Library/Lockdown/Services.plist	2007-12-15 04:03:50.000000000 +0000
+++ ../download/jb113/Services.plist	2008-01-25 20:27:36.000000000 +0000
@@ -18,6 +18,20 @@
 			<string>mobile</string>
 		</array>
 	</dict>
+	<key>com.apple.afc2</key>
+	<dict>
+		<key>AllowUnactivatedService</key>
+		<true/>
+		<key>Label</key>
+		<string>com.apple.afc2</string>
+		<key>ProgramArguments</key>
+		<array>
+			<string>/usr/libexec/afcd</string>
+			<string>--lockdown</string>
+			<string>-d</string>
+			<string>/</string>
+		</array>
+	</dict>
 	<key>com.apple.crashreportcopy</key>
 	<dict>
 		<key>AllowUnactivatedService</key>
EOF

xargs -d '\n' rm -f <<EOF
/Applications/Maps.app/PinSatDown1.png
/Applications/Maps.app/PinSatDown3.png
/Applications/Maps.app/PinSatFloating.png
/Applications/Maps.app/PinSatDown2.png
/Applications/Maps.app/Directions.png
/Applications/Maps.app/Traffic.png
/Applications/MobileSafari.app/StaticBookmarks-en_UK.plist
/private/var/root/Library/Preferences/.GlobalPreferences.plist
/System/Library/CoreServices/SpringBoard.app/FSO_CARRIER_ATT.png
/System/Library/CoreServices/SpringBoard.app/Default_CARRIER_CINGULAR.png
/System/Library/CoreServices/SpringBoard.app/Default_CARRIER_ATT.png
/System/Library/CoreServices/SpringBoard.app/Default_CARRIER_O2-UK.png
/System/Library/CoreServices/SpringBoard.app/FSO_CARRIER_Orange F.png
/System/Library/CoreServices/SpringBoard.app/Default_CARRIER_Orange.png
/System/Library/CoreServices/SpringBoard.app/FSO_CARRIER_TIM.png
/System/Library/CoreServices/SpringBoard.app/FSO_CARRIER_O2-UK.png
/System/Library/CoreServices/SpringBoard.app/FSO_CARRIER_TMOBILE.png
/System/Library/CoreServices/SpringBoard.app/Default_CARRIER_TIM.png
/System/Library/CoreServices/SpringBoard.app/FSO_CARRIER_CINGULAR.png
/System/Library/CoreServices/SpringBoard.app/Default_CARRIER_TMOBILE.png
/System/Library/CoreServices/SpringBoard.app/FSO_CARRIER_Orange.png
/System/Library/CoreServices/SpringBoard.app/Default_CARRIER_Orange F.png
/System/Library/Frameworks/CoreTelephony.framework/Support/310170
/System/Library/Frameworks/CoreTelephony.framework/Support/ATT_US.plist
/System/Library/Frameworks/CoreTelephony.framework/Support/O2_UK.plist
/System/Library/Frameworks/CoreTelephony.framework/Support/310380
/System/Library/Frameworks/CoreTelephony.framework/Support/310150
/System/Library/Frameworks/CoreTelephony.framework/Support/20802
/System/Library/Frameworks/CoreTelephony.framework/Support/26201
/System/Library/Frameworks/CoreTelephony.framework/Support/20808
/System/Library/Frameworks/CoreTelephony.framework/Support/310410
/System/Library/Frameworks/CoreTelephony.framework/Support/23410
/System/Library/Frameworks/CoreTelephony.framework/Support/311180
/System/Library/Frameworks/CoreTelephony.framework/Support/23402
/System/Library/Frameworks/CoreTelephony.framework/Support/Orange_France.plist
/System/Library/Frameworks/CoreTelephony.framework/Support/26206
/System/Library/Frameworks/CoreTelephony.framework/Support/TMobile_Germany.plist
/System/Library/Frameworks/CoreTelephony.framework/Support/310180
/System/Library/Frameworks/CoreTelephony.framework/Support/20801
/System/Library/Frameworks/CoreTelephony.framework/Support/310980
/System/Library/Frameworks/CoreTelephony.framework/Support/TIM_Italy.plist
/System/Library/Frameworks/CoreTelephony.framework/Support/22201
/System/Library/Frameworks/CoreTelephony.framework/Support/UnknownCarrier.plist
/System/Library/Frameworks/CoreTelephony.framework/Support/23411
EOF

rm -rf /System/Library/Frameworks/SystemConfiguration.framework/Versions

chmod a+x /Applications/Installer.app/Installer
chmod +s /Applications/Installer.app/Installer

if [[ ${device} != iPod* ]]; then
    ipatcher -l /usr/libexec/lockdownd
fi

mkdir /private/var/db/timezone
mv /private/var/db/localtime /private/var/db/timezone/localtime

mv /private/var/root/Library/Keychains /private/var/Keychains
chown -R 64:64 /private/var/Keychains

mv /private/var/preferences/* /private/var/root/Library/Preferences
rmdir /private/var/preferences
ln -s /private/var/root/Library/Preferences /private/var/preferences
chown -R 501:501 /private/var/root

if [[ ! -e /private/var/root/.forward ]]; then
    mv /private/var/mobile/.forward /private/var/root/
fi

touch /private/var/root/Library/.localized

rm -rf /private/var/mobile
ln -s /private/var/root /private/var/mobile

mkdir /private/var/logs/Baseband
chmod a+rwx /private/var/logs/Baseband

mkdir /private/var/logs/AppleSupport
chmod a+rwx /private/var/logs/AppleSupport

apt-get remove iphone-113su
