# $SnapHashLicense:
#
# SnapLogic - Open source data services
#
# Copyright (C) 2008, SnapLogic, Inc. All rights reserved.
#
# See http://www.snaplogic.org for more information about
# the SnapLogic project.
#
# This program is free software, distributed under the terms of
# the GNU General Public License Version 2. See the LEGAL file
# at the top of the source tree.
#
# "SnapLogic" is a trademark of SnapLogic, Inc.
#
#
# $
# $Id: credentials_store.py 2167 2008-04-01 22:50:13Z dhiraj $
"""
This module provides the interface to retrieve credentials that can
be used to make requests to to this snap server and other snap servers.
"""
from __future__ import with_statement
_credential_map = {}
_sorted_uri_prefixes = []
_default_cred = None
def initialize(fname = None):
"""
Read username and password from a file.
Each entry in the file is a separater line. The format of the line is as follows
<URI prefix> <username> <password> (each separated by a space)
Currently, the file can have only one entry and URI prefix must be set to "*".
@param fname: Name of file that has the credentials.
@type fname: string
"""
global _credential_map, _sorted_uri_prefixes, _default_cred
if fname is None:
return
with open(fname) as fp:
for l in fp:
l = l.strip()
if l.startswith("#"):
continue
elems = l.split(None, 2)
if len(elems) == 3:
uri = elems[0].strip().lower()
u = elems[1].strip()
p = elems[2].strip()
if uri == "*":
_default_cred = (u, p)
else:
_credential_map[uri] = (u, p)
_sorted_uri_prefixes = _credential_map.keys()
_sorted_uri_prefixes.sort(lambda x, y: -cmp(len(x), len(y)))
def get_credentials_by_uri(uri):
"""
Get credentials that can be used for a particular URI.
The method looks for the longest URI prefix match, If no match is found, then
default credentials are used. If no default credentials have been specified,
then None is returned.
@param uri: URI being looked up
@type uri: string
@return: The credentials to be used, or None if no creds are available.
@rtype: string
"""
uri = uri.lower()
for u in _sorted_uri_prefixes:
# Should be the longest uri match
if uri.startswith(u):
return _credential_map[u]
# Return default credentials, which could be None
return _default_cred
|