# * require certificate as an argument
# * lookup gid in db
# * get pubkey from gid
# * if certifacate matches pubkey from gid, return gid, else raise exception
#  if not peer.is_pubkey(gid.get_pubkey()):
#            raise ConnectionKeyGIDMismatch(gid.get_subject())

from sfa.util.faults import *
from sfa.util.misc import *
from sfa.util.method import Method
from sfa.util.parameter import Parameter, Mixed
from sfa.trust.auth import Auth
from sfa.trust.gid import GID
from sfa.trust.certificate import Certificate
from sfa.util.genitable import GeniTable

class get_gids(Method):
    """
    Get a list of record information (hrn, gid and type) for 
    the specified hrns.

    @param cred credential string 
    @param cert certificate string 
    @return    
    """

    interfaces = ['registry']
    
    accepts = [
        Parameter(str, "Certificate string"),
        Mixed(Paramter(str, "Human readable name (hrn)"), 
              Parameter([str], "List of Human readable names (hrn)")), 
        Mixed(Parameter(str, "Request hash"),
              Parameter(None, "Request hash not specified")) 
        ]

    returns = [Parameter(dict, "Dictionary of gids keyed on hrn")]
    
    def call(self, cred, hrns, request_hash=None):
        self.api.auth.authenticateCred(cred, [cred, hrns], request_hash)
        self.api.auth.check(cred, 'getgids')
        table = GeniTable()
        records = table.find({'hrn': [hrns]}, columns=['hrn','type','gid'])
        
        return records 

# * require certificate as an argument
# * lookup gid in db
# * get pubkey from gid
# * if certifacate matches pubkey from gid, return gid, else raise exception
#  if not peer.is_pubkey(gid.get_pubkey()):
#            raise ConnectionKeyGIDMismatch(gid.get_subject())

from sfa.util.faults import *
from sfa.util.misc import *
from sfa.util.method import Method
from sfa.util.parameter import Parameter, Mixed
from sfa.trust.auth import Auth
from sfa.trust.gid import GID
from sfa.trust.certificate import Certificate
from sfa.util.genitable import GeniTable

class get_gids(Method):
    """
    Get a list of record information (hrn, gid and type) for 
    the specified hrns.

    @param cred credential string 
    @param cert certificate string 
    @return    
    """

    interfaces = ['registry']
    
    accepts = [
        Parameter(str, "Certificate string"),
        Mixed(Parameter(str, "Human readable name (hrn)"), 
              Parameter([str], "List of Human readable names (hrn)")), 
        Mixed(Parameter(str, "Request hash"),
              Parameter(None, "Request hash not specified")) 
        ]

    returns = [Parameter(dict, "Dictionary of gids keyed on hrn")]
    
    def call(self, cred, hrns, request_hash=None):
        self.api.auth.authenticateCred(cred, [cred, hrns], request_hash)
        self.api.auth.check(cred, 'getgids')
        table = GeniTable()
        records = table.find({'hrn': [hrns]}, columns=['hrn','type','gid'])
        
        return records 

fix spelling error