def authorize(self, account="domain", password=None): if not password: raise SessionException("A password is required for authorization") cp = ClientPassword() key = cp.genClientKey() self.send(Session.__AUTH_REQ % self.__service) response = self.__sendAndReceive(Session.__SRP_REQ % (key, account)) root = ElementTree.fromstring(response) if root.tag != "SRPResponse": self.close() raise SessionException("Request for authorization was denied") salt = root.get("Salt") serverKey = root.get("ServerKey") sessionKey = cp.computeSessionKey(account, password, salt, serverKey) self._setCiphers(RC4Cipher(sessionKey), RC4Cipher(sessionKey)) verifyMessage = self.recv() try: root = ElementTree.fromstring(verifyMessage) except: self.close() raise SessionException("Failed to establish session with password") if root.tag != "PasswordVerify": self.close() raise SessionException("Unexpected verification response: " + root.tag) self.send(verifyMessage)
def authorize(self, account="domain", password=None): if not password: raise SessionException("A password is required for authorization") cp = ClientPassword() key = cp.genClientKey() self.send(Session.__AUTH_REQ % self.__service) response = self.__sendAndReceive(Session.__SRP_REQ % (key, account)) root = ElementTree.fromstring(response) if root.tag != "SRPResponse": self.close() raise SessionException("Request for authorization was denied") salt = root.get("Salt") serverKey = root.get("ServerKey") sessionKey = cp.computeSessionKey(account, password, salt, serverKey) self._setCiphers(RC4Cipher(sessionKey), RC4Cipher(sessionKey)) verifyMessage = self.recv() try: root = ElementTree.fromstring(verifyMessage) except Exception as e: self.close() raise SessionException("Failed to establish session with password: "******"PasswordVerify": self.close() raise SessionException("Unexpected verification response: " + root.tag) self.send(verifyMessage)
def __init__(self, dbName, broker, username, password, options): """Constructor for the Connection class. Arguments: dbName -- Name of database you are accessing. broker -- Address of the broker you are connecting too. username -- NuoDB username. password -- NuoDB password. options -- A dictionary of NuoDB connection options Some common options include: "schema" Returns: a Connection instance """ (host, port) = getCloudEntry(broker, dbName) self.__session = EncodedSession(host, port) self._trans_id = None cp = ClientPassword() parameters = {'user' : username, 'timezone' : time.strftime('%Z')} if options: parameters.update(options) self.__session.putMessageId(protocol.OPENDATABASE).putInt(protocol.EXECUTEPREPAREDUPDATE).putString(dbName).putInt(len(parameters)) for (k, v) in parameters.iteritems(): self.__session.putString(k).putString(v) self.__session.putNull().putString(cp.genClientKey()) self.__session.exchangeMessages() version = self.__session.getInt() serverKey = self.__session.getString() salt = self.__session.getString() sessionKey = cp.computeSessionKey(string.upper(username), password, salt, serverKey) self.__session.setCiphers(RC4Cipher(sessionKey), RC4Cipher(sessionKey)) # check auth try: self.__session.putMessageId(protocol.AUTHENTICATION).putString('Success!') self.__session.exchangeMessages() except SessionException: raise ProgrammingError('Invalid database username or password') # set auto commit to false by default self.__session.putMessageId(protocol.SETAUTOCOMMIT).putInt(0) self.__session.exchangeMessages(False)
def __init__(self, dbName, broker, username, password, options): """Constructor for the Connection class. Arguments: dbName -- Name of database you are accessing. broker -- Address of the broker you are connecting too. username -- NuoDB username. password -- NuoDB password. options -- A dictionary of NuoDB connection options Some common options include: "schema" Returns: a Connection instance @type dbName str @type broker str @type username str @type password str @type options dict[str,str] """ (host, port) = getCloudEntry(broker, dbName) self.__session = EncodedSession(host, port) self._trans_id = None cp = ClientPassword() parameters = {'user': username, 'timezone': time.strftime('%Z')} if options: parameters.update(options) version, serverKey, salt = self.__session.open_database( dbName, parameters, cp) sessionKey = cp.computeSessionKey(string.upper(username), password, salt, serverKey) self.__session.setCiphers(RC4Cipher(sessionKey), RC4Cipher(sessionKey)) self.__session.check_auth() # set auto commit to false by default per PEP self.__session.set_autocommit(0)
def __init__(self, dbName, broker, username, password, options): """Constructor for the Connection class. Arguments: dbName -- Name of database you are accessing. broker -- Address of the broker you are connecting too. username -- NuoDB username. password -- NuoDB password. options -- A dictionary of NuoDB connection options Some common options include: "schema" Returns: a Connection instance @type dbName str @type broker str @type username str @type password str @type options dict[str,str] """ (host, port) = getCloudEntry(broker, dbName) self.__session = EncodedSession(host, port) self._trans_id = None cp = ClientPassword() parameters = {'user' : username, 'timezone' : time.strftime('%Z')} if options: parameters.update(options) version, serverKey, salt = self.__session.open_database(dbName, parameters, cp) sessionKey = cp.computeSessionKey(string.upper(username), password, salt, serverKey) self.__session.setCiphers(RC4Cipher(sessionKey), RC4Cipher(sessionKey)) self.__session.check_auth() # set auto commit to false by default per PEP self.__session.set_autocommit(0)