#!/usr/bin/env python
# -*- encoding: utf8 -*-
# Author: Marek Wywiał <onjinx@gmail.com> http://onjin.net/
# Date: 2009-06-21 

import ConfigParser, sys, os
from optparse import OptionParser
from getpass import getpass

def main():
    parser = OptionParser( usage="usage: %prog [options] connection", version="1.0.0", epilog="Author: Marek Wywial <onjinx@gmail.com> http://onjin.net/")
    parser.add_option('-c', '--config', dest="config", help="config file", action="store", default="config.ini")
    parser.add_option('-l', '--list', dest="list", help="list available connections", action="store_true", default=False)
    parser.add_option('-u', '--umount', dest="umount", help="umount give connection", action="store_true", default=False)

    (options, args) = parser.parse_args()

    config = get_config(options.config)
    if options.list:
        print_connections(config.sections())
        sys.exit()

    if len(args) != 1:
        parser.error("incorrect number of arguments")

    connection = args[0]

    if not config.has_section(connection):
        print "unknown connection '%s'" % connection
        sys.exit(0)


    if options.umount:
        os.system("fusermount -u %s" % config.get(connection, 'mountpoint'))
        sys.exit(0)

    con_params = validate_config(config, connection)

    ftp_mount(*con_params)


def get_config(config_file):
    # read config
    config = ConfigParser.ConfigParser()
    config.readfp(open(config_file))
    return config

def print_connections(connections):
    print "Available connections"
    for connection in connections:
        print " - %s" % connection

def validate_config(config, connection):
    if not config.has_option(connection, 'host'):
        print "missing 'host' option for connection '%s'" % connection
        sys.exit(0)
    else:
        host = config.get(connection, 'host')

    if not config.has_option(connection, 'user'):
        print "missing 'user' option for connection '%s'" % connection
        sys.exit(0)
    else:
        user = config.get(connection, 'user')

    if not config.has_option(connection, 'pass'):
        print "missing 'pass' option for connection '%s'" % connection
        password = getpass("Password: ")
    else:
        password = config.get(connection, 'pass')

    if not config.has_option(connection, 'mountpoint'):
        print "missing 'mountpoint' option for connection '%s'" % connection
        sys.exit(0)
    else:
        mountpoint = config.get(connection, 'mountpoint')
    return (host, user, password, mountpoint)

def ftp_mount(host, user, password, mountpoint):
    os.system('mkdir -p %s' % mountpoint)
    os.system('curlftpfs ftp://%s:%s@%s %s' % (user, password, host, mountpoint))

if __name__== '__main__':
    main()

