import tempfile import os from cert import * from gid import * from geniserver import * # DummyRegistry implements the security layer for a registry. It creates GIDs # by using the public key contained in client's certificate. class DummyRegistry(GeniServer): gid_dict = {} def __init__(self, ip, port, key_file, cert_file): GeniServer.__init__(self, ip, port, key_file, cert_file) def register_functions(self): GeniServer.register_functions(self) self.server.register_function(self.get_self_credential) self.server.register_function(self.get_credential) self.server.register_function(self.get_gid) def resolve_gid(self, name): gid = self.gid_dict.get(name, None) if gid: return [gid] # assume the user is who he says he is, and create a GID for him peer_cert = self.server.peer_cert gid = GID(subject=name, uuid=create_uuid(), hrn=name) gid.set_pubkey(peer_cert.get_pubkey()) gid.set_issuer(key=self.key, cert=self.cert) gid.encode() gid.sign() self.gid_dict[name] = gid return [gid] def get_gid(self, name): gid_list = self.resolve_gid(name) gid_string_list = [] for gid in gid_list: gid_string_list.append(gid.save_to_string()) return gid_string_list def get_self_credential(self, type, name): client_gid = self.resolve_gid(name)[0] cred = Credential(subject = client_gid.get_subject()) cred.set_gid_caller(client_gid) cred.set_issuer(key=self.key, cert=self.cert) cred.set_pubkey(client_gid.get_pubkey()) cred.encode() cred.sign() return cred.save_to_string() def get_credential(self, cred, type, name): if not cred: return get_self_credential(self, type, name) self.decode_authentication(cred) object_gid = self.resolve_gid(name)[0] new_cred = Credential(subject = object_gid.get_subject()) new_cred.set_gid_caller(self.client_gid) new_cred.set_gid_object(object_gid) new_cred.set_issuer(key=self.key, cert=self.cert) new_cred.set_pubkey(object_gid.get_pubkey()) new_cred.encode() new_cred.sign() return new_cred.save_to_string() if __name__ == "__main__": key_file = "dummyserver.key" cert_file = "dummyserver.cert" # if no key is specified, then make one up if (not os.path.exists(key_file)) or (not os.path.exists(cert_file)): key = Keypair(create=True) key_file = "dummyserver.key" key.save_to_file(key_file) cert = Certificate(subject="dummy") cert.set_issuer(key=key, subject="dummy") cert.set_pubkey(key) cert.sign() cert.save_to_file(cert_file) s = DummyRegistry("localhost", 12345, key_file, cert_file) s.run()