[intranet2/usr-scripts] Serveur digicode intranet 2
This commit is contained in:
parent
8a49f4b8d7
commit
36c80ee082
1 changed files with 86 additions and 0 deletions
86
impression/digicode_server2.py
Executable file
86
impression/digicode_server2.py
Executable file
|
@ -0,0 +1,86 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import SocketServer
|
||||||
|
import requests
|
||||||
|
|
||||||
|
sys.path.append('/etc/crans/secrets')
|
||||||
|
from secrets import digicode_pass
|
||||||
|
|
||||||
|
CODES = "/var/impression/codes"
|
||||||
|
PIDFILE = "/var/run/digicode.pid"
|
||||||
|
HOST, PORT = "zamok.adm.crans.org", 1200
|
||||||
|
DIGICODE_LINK = "https://intranet2.crans.org/digicode/delete/"
|
||||||
|
CERTIFICATE = "/etc/ssl/certs/cacert.org.pem"
|
||||||
|
|
||||||
|
def log(message = "", logfile = "/var/log/crans/digicode.log"):
|
||||||
|
"""Log a message to the default logfile"""
|
||||||
|
log = open(logfile, "a")
|
||||||
|
if message:
|
||||||
|
log.write("%s %s\n" % (time.strftime("%b %d %H:%M:%S"), message))
|
||||||
|
log.flush()
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
def runme():
|
||||||
|
os.chdir(CODES)
|
||||||
|
|
||||||
|
#lpadmin
|
||||||
|
os.setegid(108)
|
||||||
|
#freerad
|
||||||
|
os.seteuid(120)
|
||||||
|
|
||||||
|
log("Starting server!")
|
||||||
|
server = SocketServer.UDPServer((HOST, PORT), VigileHandler)
|
||||||
|
server.serve_forever()
|
||||||
|
|
||||||
|
|
||||||
|
class VigileHandler(SocketServer.BaseRequestHandler):
|
||||||
|
"""Handler class for SocketServers, answering to door requests"""
|
||||||
|
def handle(self):
|
||||||
|
"""Handle the request the door sent us"""
|
||||||
|
data = self.request[0].lower()
|
||||||
|
socket = self.request[1]
|
||||||
|
log("%s wrote: %s" % (self.client_address[0], data))
|
||||||
|
|
||||||
|
# if data starts with o, opened door validation, else should
|
||||||
|
# be a code
|
||||||
|
if not data.startswith("o"):
|
||||||
|
response = requests.post(DIGICODE_LINK, data = {'password' : digicode_pass, 'code' : data}, verify = CERTIFICATE)
|
||||||
|
if response.content == u'Code Successfully Deleted':
|
||||||
|
socket.sendto("passoir,o=1", self.client_address)
|
||||||
|
|
||||||
|
log("%s -- %s" % (data, response.content))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# do the UNIX double-fork magic, see Stevens' "Advanced
|
||||||
|
# Programming in the UNIX Environment" for details (ISBN 0201563177)
|
||||||
|
try:
|
||||||
|
pid = os.fork()
|
||||||
|
if pid > 0:
|
||||||
|
# exit first parent
|
||||||
|
sys.exit(0)
|
||||||
|
except OSError, e:
|
||||||
|
print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# decouple from parent environment
|
||||||
|
os.chdir("/") #don't prevent unmounting....
|
||||||
|
os.setsid()
|
||||||
|
os.umask(0)
|
||||||
|
|
||||||
|
# do second fork
|
||||||
|
try:
|
||||||
|
pid = os.fork()
|
||||||
|
if pid > 0:
|
||||||
|
# exit from second parent, print eventual PID before
|
||||||
|
#print "Daemon PID %d" % pid
|
||||||
|
open(PIDFILE,'w').write("%d"%pid)
|
||||||
|
sys.exit(0)
|
||||||
|
except OSError, e:
|
||||||
|
print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# start the daemon main loop
|
||||||
|
runme()
|
Loading…
Add table
Add a link
Reference in a new issue