Skip to content
Snippets Groups Projects
Commit 8861a669 authored by John Hodge's avatar John Hodge
Browse files

OpenDispense - Fix to actually work

parent f519d00a
Branches
No related merge requests found
...@@ -12,6 +12,8 @@ import os ...@@ -12,6 +12,8 @@ import os
import logging import logging
import re import re
import pwd import pwd
import base64
import socket
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
from LDAPConnector import get_uid,get_uname, set_card_id from LDAPConnector import get_uid,get_uname, set_card_id
...@@ -75,21 +77,24 @@ class OpenDispense(DispenseInterface): ...@@ -75,21 +77,24 @@ class OpenDispense(DispenseInterface):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
sock.connect(DISPENSE_ENDPOINT) sock.connect(DISPENSE_ENDPOINT)
sock.write("AUTHIDENT\n") logging.debug('connected to dispsrv')
rsp = sock.readline() sockf = sock.makefile()
sockf.write("AUTHIDENT\n"); sockf.flush()
rsp = sockf.readline()
assert "200" in rsp assert "200" in rsp
sock.write("AUTHCARD %s\n" % (card_base64,)) logging.debug('authenticated')
rsp = sock.readline() sockf.write("AUTHCARD %s\n" % (card_base64,)); sockf.flush()
rsp = sockf.readline()
if not "200" in rsp: if not "200" in rsp:
raise ValueError, "no UID found for card ID" raise ValueError, "no UID found for card ID"
username = rsp.split('=')[1] username = rsp.split('=')[1].strip()
# Check for thier username # Check for thier username
try: try:
# Get info from the system (by username) # Get info from the system (by username)
info = pwd.getpwnam(username) info = pwd.getpwnam(username)
except KeyError: except KeyError:
logging.info('getting pin for uid %d: user not in password file'%uid) logging.info('getting info for user \'%s\': user not in password file' % (username,))
return False return False
else: else:
# Get the users ID # Get the users ID
...@@ -100,7 +105,7 @@ class OpenDispense(DispenseInterface): ...@@ -100,7 +105,7 @@ class OpenDispense(DispenseInterface):
# Get info from the system (by UID) # Get info from the system (by UID)
info = pwd.getpwuid(self._userid) info = pwd.getpwuid(self._userid)
except KeyError: except KeyError:
logging.info('getting pin for uid %d: user not in password file'%uid) logging.info('getting info for uid %d: user not in password file' % (self._userid,))
return False return False
# If we get this far all is good # If we get this far all is good
...@@ -118,14 +123,15 @@ class OpenDispense(DispenseInterface): ...@@ -118,14 +123,15 @@ class OpenDispense(DispenseInterface):
logging.info('Enrolling card %s to uid %s (%s)' % (cardId, self._userId, self._username)) logging.info('Enrolling card %s to uid %s (%s)' % (cardId, self._userId, self._username))
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
sock.connect(DISPENSE_ENDPOINT) sock.connect(DISPENSE_ENDPOINT)
sock.write("AUTHIDENT\n") sockf = sock.makefile()
rsp = sock.readline() sockf.write("AUTHIDENT\n")
sockf.flush(); rsp = sockf.readline()
assert "200" in rsp assert "200" in rsp
sock.write("SETEUSER %s\n", self._username) sockf.write("SETEUSER %s\n", self._username)
rsp = sock.readline() sockf.flush(); rsp = sockf.readline()
assert "200" in rsp assert "200" in rsp
sock.write("CARD_ADD %s\n", card_base64) sockf.write("CARD_ADD %s\n", card_base64)
rsp = sock.readline() sockf.flush(); rsp = sockf.readline()
if "200" in rsp: if "200" in rsp:
return True return True
else: else:
...@@ -154,6 +160,7 @@ class OpenDispense(DispenseInterface): ...@@ -154,6 +160,7 @@ class OpenDispense(DispenseInterface):
return balance return balance
def getItemInfo(self, itemId): def getItemInfo(self, itemId):
logging.debug("getItemInfo(%s)" % (itemId,))
itemId = OpenDispenseMapping.vendingMachineToOpenDispense(itemId) itemId = OpenDispenseMapping.vendingMachineToOpenDispense(itemId)
args = ('dispense', 'iteminfo', itemId) args = ('dispense', 'iteminfo', itemId)
info, unused = Popen(args, close_fds=True, stdout=PIPE).communicate() info, unused = Popen(args, close_fds=True, stdout=PIPE).communicate()
...@@ -190,8 +197,20 @@ class OpenDispenseMapping(): ...@@ -190,8 +197,20 @@ class OpenDispenseMapping():
@staticmethod @staticmethod
def vendingMachineToOpenDispense(itemId): def vendingMachineToOpenDispense(itemId):
logging.debug("vendingMachineToOpenDispense(%s)" % (itemId,))
_mappingFile = "OpenDispenseMappings.conf" _mappingFile = "OpenDispenseMappings.conf"
fh = open(_mappingFile) try:
fh = open(_mappingFile)
except IOError:
if itemId[1] == '8':
return 'coke:' + itemId[0]
elif itemId[1] == '5':
if itemId[0] == '5':
return 'door'
else:
return None
else:
return 'snack:' + itemId
map = "" map = ""
for line in fh: for line in fh:
#line = line.strip() #line = line.strip()
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment