示例#1
0
 def generate_response(self):
     (request, _) = netstring.consume_netstring(self.readbuf)
     (sig, request) = netstring.consume_netstring(request)
     sig = base64.standard_b64decode(sig)
     mysig = hmac.new(ACCESSKEY, request, hashlib.sha256).digest()
     if sig != mysig:
         self.writebuf = b"ERROR Bad signature"
         return
     (action, request) = netstring.consume_netstring(request)
     (mac, request) = netstring.consume_netstring(request)
     (time, request) = netstring.consume_netstring(request)
     if len(request) > 0:
         raise Exception("Invalid request: too long: " + repr(self.readbuf))
     mac = MAC(mac.decode("ascii"))
     time = datetime.datetime.strptime(time.decode("ascii"), "%Y-%m-%dT%H:%M:%S")
     now = datetime.datetime.utcnow()
     if time < (now - TIMEWINDOW) or time > (now + TIMEWINDOW):
         self.writebuf = b"ERROR Time out of sync"
         return
     if action not in (b"grant", b"revoke"):
         self.writebuf = b"ERROR Invalid action"
         return
     LOGGER.info("Valid request to {0!r} {1!s}".format(action, mac))
     if action == b"grant":
         print("grant", str(mac))
     elif action == b"revoke":
         print("revoke", str(mac))
     sys.stdout.flush()
     resp = sys.stdin.readline().strip()
     if resp == "OK":
         self.writebuf = netstring.encode_netstring(b"OK")
     else:
         self.writebuf = netstring.encode_netstring(b"ERROR " + resp.encode("ascii"))
示例#2
0
 def generate_response(self):
     (request, _) = netstring.consume_netstring(self.readbuf)
     (sig, request) = netstring.consume_netstring(request)
     sig = base64.standard_b64decode(sig)
     mysig = hmac.new(ACCESSKEY, request, hashlib.sha256).digest()
     if sig != mysig:
         self.writebuf = b'ERROR Bad signature'
         return
     (action, request) = netstring.consume_netstring(request)
     (mac, request) = netstring.consume_netstring(request)
     (time, request) = netstring.consume_netstring(request)
     if len(request) > 0:
         raise Exception('Invalid request: too long: ' + repr(self.readbuf))
     mac = MAC(mac.decode('ascii'))
     time = datetime.datetime.strptime(time.decode('ascii'),
                                       '%Y-%m-%dT%H:%M:%S')
     now = datetime.datetime.utcnow()
     if time < (now - TIMEWINDOW) or time > (now + TIMEWINDOW):
         self.writebuf = b'ERROR Time out of sync'
         return
     if action not in (b'grant', b'revoke'):
         self.writebuf = b'ERROR Invalid action'
         return
     LOGGER.info('Valid request to {0!r} {1!s}'.format(action, mac))
     if action == b'grant':
         print('grant', str(mac))
     elif action == b'revoke':
         print('revoke', str(mac))
     sys.stdout.flush()
     resp = sys.stdin.readline().strip()
     if resp == 'OK':
         self.writebuf = netstring.encode_netstring(b'OK')
     else:
         self.writebuf = netstring.encode_netstring(b'ERROR ' +
                                                    resp.encode('ascii'))