# encoding: utf-8

"""Foolscap related utilities."""

__docformat__ = "restructuredtext en"

#-------------------------------------------------------------------------------
#  Copyright (C) 2008  The IPython Development Team
#
#  Distributed under the terms of the BSD License.  The full license is in
#  the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------

import os

try:
    # This is preferred in foolscap v > 0.4.3
    from foolscap.api import Tub, UnauthenticatedTub
except ImportError:
    # Fallback for older versions
    from foolscap import Tub, UnauthenticatedTub

def check_furl_file_security(furl_file, secure):
    """Remove the old furl_file if changing security modes."""
    
    if os.path.isfile(furl_file):
        f = open(furl_file, 'r')
        oldfurl = f.read().strip()
        f.close()
        if (oldfurl.startswith('pb://') and not secure) or (oldfurl.startswith('pbu://') and secure):
            os.remove(furl_file)

def is_secure(furl):
    if is_valid(furl):
        if furl.startswith("pb://"):
            return True
        elif furl.startswith("pbu://"):
            return False
    else:
        raise ValueError("invalid furl: %s" % furl)

def is_valid(furl):
    if isinstance(furl, str):
        if furl.startswith("pb://") or furl.startswith("pbu://"):
            return True
    else:
        return False

def find_furl(furl_or_file):
    if isinstance(furl_or_file, str):
        if is_valid(furl_or_file):
            return furl_or_file
    if os.path.isfile(furl_or_file):
        furl = open(furl_or_file, 'r').read().strip()
        if is_valid(furl):
            return furl
    raise ValueError("not a furl or a file containing a furl: %s" % furl_or_file)

# We do this so if a user doesn't have OpenSSL installed, it will try to use
# an UnauthenticatedTub.  But, they will still run into problems if they
# try to use encrypted furls.
try:
    import OpenSSL
except:
    Tub = UnauthenticatedTub
    have_crypto = False
else:
    have_crypto = True


