import datetime
from sfa.util.faults import SfaFault, SfaAPIError
+from sfa.util.genicode import GENICODE
from sfa.util.config import Config
from sfa.util.cache import Cache
from sfa.trust.auth import Auth
+
from sfa.trust.certificate import Keypair, Certificate
from sfa.trust.credential import Credential
from sfa.trust.rights import determine_rights
+
from sfa.server.xmlrpcapi import XmlrpcApi
-from sfa.util.genicode import GENICODE
+
from sfa.client.return_value import ReturnValue
-# thgen xxx fixme this is wrong all right, but temporary, will use generic
-from sfa.util.table import SfaTable
####################
class SfaApi (XmlrpcApi):
return server
- def getCredential(self):
+ def getCredential(self, minimumExpiration=0):
"""
- Return a valid credential for this interface.
+ Return a valid credential for this interface.
"""
type = 'authority'
path = self.config.SFA_DATA_DIR
cred = Credential(filename = cred_filename)
# make sure cred isnt expired
if not cred.get_expiration or \
- datetime.datetime.utcnow() < cred.get_expiration():
+ datetime.datetime.utcnow() + datetime.timedelta(seconds=minimumExpiration) < cred.get_expiration():
return cred.save_to_string(save_parents=True)
# get a new credential
auth_hrn = hrn
auth_info = self.auth.get_auth_info(auth_hrn)
# xxx thgen fixme - use SfaTable hardwired for now
- #table = self.SfaTable()
+ # thgen xxx fixme this is wrong all right, but temporary, will use generic
+ from sfa.storage.table import SfaTable
table = SfaTable()
records = table.findObjects({'hrn': hrn, 'type': 'authority+sa'})
if not records:
def prepare_response_v2_am(self, result):
response = {
+ 'geni_api': 2,
'code': self.get_geni_code(result),
'value': self.get_geni_value(result),
'output': self.get_geni_output(result),
Converts the specified result into a standard GENI compliant
response
"""
- if self.interface.lower() == 'aggregate':
- if hasattr(self.config, 'SFA_AGGREGATE_API_VERSION') and \
- self.config.SFA_AGGREGATE_API_VERSION == 2:
- result = self.prepare_response_v2_am(result)
+ # as of dec 13 2011 we only support API v2
+ if self.interface.lower() in ['aggregate', 'slicemgr']:
+ result = self.prepare_response_v2_am(result)
return XmlrpcApi.prepare_response(self, result, method)