#!/usr/bin/env bash
# $Id$
# Creates a tbz2 backup of your firefox profile (including extensions)
# Copyright (C) 2005 Meethune Bhowmick (meethune@oss-institute.org)
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#  
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#  
#     * Redistributions in binary form must reproduce the above
#       copyright notice, this list of conditions and the following
#       disclaimer in the documentation and/or other materials provided
#       with the distribution.
#  
#     * Neither the name of Meethune Bhowmick nor the names of
#       its contributors may be used to endorse or promote products
#       derived from this software without specific prior written
#       permission.
#  
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Configurable Variables
Backup="${HOME}/firefox-profile-$(hostname -s).tbz2"
LogFile="/tmp/backup-firefox.log"

# Functions and Procedures
getOsPath ()
{
    if [ $(uname -s) == "Darwin" ]
    then
        ProfilePath="${HOME}/Library/Application Support/Firefox"
    else
        ProfilePath="${HOME}/.mozilla/firefox"
    fi
    if [ ! -r "${ProfilePath}" ]
    then 
        echo "Unable to access profile data" 1>&2
        return 1
    fi
    return 0
}

getProfileName ()
{
    if [ ! -e "${ProfilePath}/profiles.ini" ]
    then
        echo "Unable to find profiles.ini file" 1>&2
        return 1
    fi
    ProfileName=$(grep Path "${ProfilePath}/profiles.ini" | sed 's/^.*\=//')
    if [ ! -r "${ProfilePath}/${ProfileName}" ]
    then
        echo "Unable to read profile directory" 1>&2
        return 1
    fi
    return 0
}

doBackup()
{
    echo "Started backup on: " $(date) > ${LogFile}
    
    tar cvjpf ${Backup} -C "${ProfilePath}" --exclude=Cache/* --exclude=lock --exclude=.parentlock ${ProfileName} profiles.ini >> ${LogFile} || ( echo "Backup failed! See $LogFile for details" 1>&2 && return 1 )       
    
    echo "Finished backup on: " $(date) >> ${LogFile}
    return 0
}

die()
{ 
    echo "Something went wrong." 1>&2
    exit 1
}

# Main 
getOsPath || die
getProfileName || die
echo "Backing up ${ProfilePath}/${ProfileName}"
doBackup || die
echo "Done!"
ls -hl ${Backup}
echo 
echo "If restoring from a clean Firefox install. Run Firefox, then exit so that the proper directories are created."
echo
echo "To restore this profile, use this command:"
echo "    tar xjpf \"${Backup}\" -C \"${ProfilePath}/\""
exit 0

# vim:syntax=sh
# vim:sw=4:softtabstop=4:expandtab
