from subprocess import Popen, PIPE
from LDAPConnector import get_uid,get_uname, set_card_id
+DISPENSE_ENDPOINT = ("localhost", 11020)
+DISPSRV_MIFARE = True
+
class OpenDispense(DispenseInterface):
_username = ""
_disabled = True
return False
def authMifareCard(self, cardId):
- # Get the users ID
- self._userid = get_uid(cardId)
+ if DISPSRV_MIFARE:
+ card_base64 = base64.b64encode(cardId)
+
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
+ sock.connect(DISPENSE_ENDPOINT)
+ sock.write("AUTHIDENT\n")
+ rsp = sock.readline()
+ assert "200" in rsp
+ sock.write("AUTHCARD %s\n" % (card_base64,))
+ rsp = sock.readline()
+ if not "200" in rsp:
+ raise ValueError, "no UID found for card ID"
+ username = rsp.split('=')[1]
+
+ # Check for thier username
+ try:
+ # Get info from the system (by username)
+ info = pwd.getpwnam(username)
+ except KeyError:
+ logging.info('getting pin for uid %d: user not in password file'%uid)
+ return False
+ else:
+ # Get the users ID
+ self._userid = get_uid(cardId)
- # Check for thier username
- try:
- # Get info from
- info = pwd.getpwuid(userId)
- except KeyError:
- logging.info('getting pin for uid %d: user not in password file'%uid)
- return False
+ # Check for thier username
+ try:
+ # Get info from the system (by UID)
+ info = pwd.getpwuid(self._userid)
+ except KeyError:
+ logging.info('getting pin for uid %d: user not in password file'%uid)
+ return False
# If we get this far all is good
self._loggedIn = True
self._disabled = False
+ self._userid = info.pw_uid
self._username = info.pw_name
return True
def addCard(self, cardId):
- if self.isLoggedIn():
- set_card_id(self._userId, cardId)
- return True
+ if not self.isLoggedIn():
+ return False
+ if DISPSRV_MIFARE:
+ card_base64 = base64.b64encode(cardId)
+ 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.connect(DISPENSE_ENDPOINT)
+ sock.write("AUTHIDENT\n")
+ rsp = sock.readline()
+ assert "200" in rsp
+ sock.write("SETEUSER %s\n", self._username)
+ rsp = sock.readline()
+ assert "200" in rsp
+ sock.write("CARD_ADD %s\n", card_base64)
+ rsp = sock.readline()
+ if "200" in rsp:
+ return True
+ else:
+ return False
+ else:
+ if get_uid(cardId) != None:
+ return False
+ else:
+ logging.info('Enrolling card %s to uid %s (%s)' % (cardId, self._userId, self._username))
+ set_card_id(self._userId, cardId)
+ return True
def isLoggedIn(self):
return self._loggedIn
from SnackConfig import get_snack#, get_snacks
import socket
from posix import geteuid
-from LDAPConnector import get_uid,get_uname, set_card_id
from OpenDispense import OpenDispense as Dispense
CREDITS="""
self._last_card_id = card_id
- res = self.dispense.addCard(card_id)
-
- if get_uid(card_id) != None:
+ if not self.dispense.addCard(card_id):
self.vstatus.mk.set_messages(
[(self.center('ALREADY'), False, 0.5),
(self.center('ENROLLED'), False, 0.5)])
else:
- logging.info('Enrolling card %s to uid %s (%s)'%(card_id, self.vstatus.cur_user, self.vstatus.username))
- self.set_card_id(self.vstatus.cur_user, self.card_id)
self.vstatus.mk.set_messages(
[(self.center('CARD'), False, 0.5),
(self.center('ENROLLED'), False, 0.5)])