forked from github/server
scripts zur automatischen verarbeitung von anmeldungen.
This commit is contained in:
parent
9dbe4cef87
commit
29dd35b877
|
@ -0,0 +1,53 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import MySQLdb
|
||||||
|
import smtplib
|
||||||
|
|
||||||
|
dbname=sys.argv[1]
|
||||||
|
db = MySQLdb.connect(db=dbname)
|
||||||
|
|
||||||
|
From="accounts@vinyambar.de"
|
||||||
|
server=smtplib.SMTP('localhost')
|
||||||
|
|
||||||
|
cursor=db.cursor()
|
||||||
|
records=cursor.execute("SELECT users.id, users.password, users.email, "+
|
||||||
|
"races.name, "+
|
||||||
|
"games.name, games.info, subscriptions.id "+
|
||||||
|
"from users, games, subscriptions, races "+
|
||||||
|
"where users.id = subscriptions.user AND games.id = subscriptions.game "+
|
||||||
|
"AND races.race = subscriptions.race AND races.locale='de' "+
|
||||||
|
"AND subscriptions.status='NEW'")
|
||||||
|
|
||||||
|
while (records>0):
|
||||||
|
row=cursor.fetchone()
|
||||||
|
records = records - 1
|
||||||
|
customerid=row[0]
|
||||||
|
passwd=row[1]
|
||||||
|
email=row[2]
|
||||||
|
race=row[3]
|
||||||
|
gamename=row[4]
|
||||||
|
gameinfo=row[5]
|
||||||
|
subscription=row[6]
|
||||||
|
|
||||||
|
Msg = ("From: "+From+"\nTo: "+email+"\nSubject: Vinyambar Anmeldung angenommen.\n\n"+
|
||||||
|
"Deine Anmeldung für '"+gamename+"' wurde akzeptiert.\n"
|
||||||
|
"\n"+
|
||||||
|
gameinfo +"\n"+
|
||||||
|
"Kundennummer: " + str(int(customerid)) + "\n"+
|
||||||
|
"Auftragsnummer: " + str(int(subscription)) + "\n"+
|
||||||
|
"Passwort: " + passwd + "\n" +
|
||||||
|
"Rasse: " + race + "\n\n"+
|
||||||
|
"Bitte bewahre diese Mail sorgfältig auf, da Du deine Kundennummerund das\n"+
|
||||||
|
"Passwort für das Spiel benötigst. Solltest Du noch Fragen zu Deiner \n"+
|
||||||
|
"Anmeldung haben, wende Dich bitte an accounts@vinyambar.de.\n\n"+
|
||||||
|
"Das Vinyambar-Team")
|
||||||
|
try:
|
||||||
|
server.sendmail(From, email, Msg)
|
||||||
|
update=db.cursor()
|
||||||
|
update.execute("UPDATE subscriptions set status='CONFIRMED' WHERE id="+
|
||||||
|
str(int(subscription)));
|
||||||
|
except:
|
||||||
|
print "Could not send Error to "+To
|
||||||
|
print "Reason was: '"+Reason+"'"
|
||||||
|
print "Exception is:", sys.exc_type, ":", sys.exc_value
|
|
@ -0,0 +1,46 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import smtplib
|
||||||
|
import time
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import locking
|
||||||
|
from locking import trylock, unlock
|
||||||
|
|
||||||
|
From="accounts@vinyambar.de"
|
||||||
|
|
||||||
|
# lock the input file:
|
||||||
|
if (trylock(sys.argv[1]+'.err')!=0):
|
||||||
|
print "Could not lock "+sys.argv[1]+".err"
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# move input file then unlock it:
|
||||||
|
os.rename(sys.argv[1]+'.err', sys.argv[1]+'.tmp')
|
||||||
|
unlock(sys.argv[1]+'.err')
|
||||||
|
|
||||||
|
infile=open(sys.argv[1]+".tmp", "r")
|
||||||
|
server=smtplib.SMTP('localhost')
|
||||||
|
#server.set_debuglevel(1)
|
||||||
|
|
||||||
|
matchline=re.compile(
|
||||||
|
r"""([^\s]+)\s*([^\n\r]+)*""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
|
||||||
|
for line in infile.readlines():
|
||||||
|
match=matchline.match(line)
|
||||||
|
if match!=None:
|
||||||
|
To = match.group(1)
|
||||||
|
Reason = match.group(2)
|
||||||
|
Msg = ("From: "+From+"\nTo: "+To+"\nSubject: Vinyambar Anmeldung fehlgeschlagen.\n\n"
|
||||||
|
+"Deine Anmeldung konnte aus folgendem Grund nicht akzeptiert werden:\n "+Reason+"\n")
|
||||||
|
try:
|
||||||
|
server.sendmail(From, To, Msg)
|
||||||
|
except:
|
||||||
|
print "Could not send Error to "+To
|
||||||
|
print "Reason was: '"+Reason+"'"
|
||||||
|
print "Exception is:", sys.exc_type, ":", sys.exc_value
|
||||||
|
|
||||||
|
os.unlink(sys.argv[1]+".tmp")
|
||||||
|
infile.close()
|
||||||
|
server.quit()
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import stat
|
||||||
|
|
||||||
|
def trylock(file):
|
||||||
|
try:
|
||||||
|
os.symlink(file, file+'.lock')
|
||||||
|
except OSError:
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def lock(file):
|
||||||
|
locked=1
|
||||||
|
while locked:
|
||||||
|
try:
|
||||||
|
locked=0
|
||||||
|
os.symlink(file, file+'.lock')
|
||||||
|
except:
|
||||||
|
update=os.stat(file+'.lock')[stat.ST_MTIME]
|
||||||
|
now=time.time()
|
||||||
|
if (now > update + 60):
|
||||||
|
locked=0
|
||||||
|
print "removing stale lockfile "+file+".lock"
|
||||||
|
os.unlink(file+'.lock')
|
||||||
|
else:
|
||||||
|
locked=1
|
||||||
|
print "Waiting for lock on "+file+".lock"
|
||||||
|
time.sleep(20)
|
||||||
|
|
||||||
|
def unlock(file):
|
||||||
|
os.unlink(file+'.lock')
|
||||||
|
|
|
@ -0,0 +1,163 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import MySQLdb
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import string
|
||||||
|
from whrandom import choice
|
||||||
|
|
||||||
|
import locking
|
||||||
|
from locking import lock, unlock
|
||||||
|
|
||||||
|
dbname=sys.argv[2]
|
||||||
|
db=MySQLdb.connect(db=dbname)
|
||||||
|
|
||||||
|
lock(sys.argv[1]+".err")
|
||||||
|
errors=open(sys.argv[1]+".err", 'a')
|
||||||
|
|
||||||
|
def validrace(race):
|
||||||
|
validraces=('GOBLIN', 'DWARF', 'ELF', 'HALFLING', 'INSECT', 'AQUARIAN', 'HUMAN', 'CAT', 'TROLL', 'ORC', 'DEMON')
|
||||||
|
name = string.upper(str(race))
|
||||||
|
if name in validraces:
|
||||||
|
return name
|
||||||
|
return None
|
||||||
|
|
||||||
|
def genpasswd():
|
||||||
|
newpasswd=""
|
||||||
|
chars = string.letters + string.digits
|
||||||
|
for i in range(8):
|
||||||
|
newpasswd = newpasswd + choice(chars)
|
||||||
|
return newpasswd
|
||||||
|
|
||||||
|
def error(email, message):
|
||||||
|
errors.write(email + " "+ message+"\n");
|
||||||
|
|
||||||
|
matchfrom=re.compile(
|
||||||
|
r"""From ([^\s]*)""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
|
||||||
|
matchfirstname=re.compile(
|
||||||
|
r""".*vorname:\s*([^\n\r]*)""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
firstname=None
|
||||||
|
|
||||||
|
matchlastname=re.compile(
|
||||||
|
r""".*nachname:\s*([^\n\r]*)\s*""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
lastname=None
|
||||||
|
|
||||||
|
matchemail=re.compile(
|
||||||
|
r""".*email:\s*([^\n\r]*)\s*""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
email=None
|
||||||
|
|
||||||
|
matchaddress=re.compile(
|
||||||
|
r""".*adresse:\s*([^\n\r]*)\s*""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
address=None
|
||||||
|
|
||||||
|
matchcity=re.compile(
|
||||||
|
r""".*ort:\s*([^\n\r]*)\s*""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
city=None
|
||||||
|
|
||||||
|
matchcountry=re.compile(
|
||||||
|
r""".*land:\s*([^\n\r]*)""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
country=None
|
||||||
|
|
||||||
|
matchphone=re.compile(
|
||||||
|
r""".*telefon:\s*([^\n\r]*)\s*""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
phone=None
|
||||||
|
|
||||||
|
matchnewrace=re.compile(
|
||||||
|
r""".*neues\sspiel:\s*([^\n\r]+)\s*""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
newrace=0
|
||||||
|
|
||||||
|
matcholdrace=re.compile(
|
||||||
|
r""".*altes\sspiel:\s*([^\n\r]+)\s*""",
|
||||||
|
re.IGNORECASE | re.DOTALL | re.VERBOSE)
|
||||||
|
oldrace=0
|
||||||
|
|
||||||
|
for line in sys.stdin.readlines():
|
||||||
|
match=matcholdrace.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
oldrace=match.group(1)
|
||||||
|
continue
|
||||||
|
match=matchnewrace.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
newrace=match.group(1)
|
||||||
|
continue
|
||||||
|
|
||||||
|
match=matchfrom.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
email=match.group(1)
|
||||||
|
continue
|
||||||
|
|
||||||
|
match=matchfirstname.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
firstname=match.group(1)
|
||||||
|
continue
|
||||||
|
match=matchlastname.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
lastname=match.group(1)
|
||||||
|
continue
|
||||||
|
match=matchemail.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
email=match.group(1)
|
||||||
|
continue
|
||||||
|
match=matchaddress.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
address=match.group(1)
|
||||||
|
continue
|
||||||
|
match=matchcity.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
city=match.group(1)
|
||||||
|
continue
|
||||||
|
match=matchcountry.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
country=match.group(1)
|
||||||
|
continue
|
||||||
|
match=matchphone.match(line)
|
||||||
|
if (match!=None):
|
||||||
|
phone=match.group(1)
|
||||||
|
continue
|
||||||
|
|
||||||
|
oldrace=validrace(oldrace)
|
||||||
|
newrace=validrace(newrace)
|
||||||
|
|
||||||
|
if (email==None):
|
||||||
|
error("enno@eressea.upb.de",
|
||||||
|
"Es wurde keine Emailadresse angegeben: "+firstname+" "+lastname)
|
||||||
|
elif (oldrace==None) & (newrace==None):
|
||||||
|
error(email, "Es wurde kein Spiel ausgewählt.")
|
||||||
|
elif (firstname==None):
|
||||||
|
error(email, "Es wurde kein Vorname angegeben")
|
||||||
|
elif (lastname==None):
|
||||||
|
error(email, "Es wurde kein Nachname angegeben")
|
||||||
|
elif (address==None):
|
||||||
|
error(email, "Es wurde keine Adresse angegeben")
|
||||||
|
elif (city==None):
|
||||||
|
error(email, "Es wurde kein Wohnort angegeben")
|
||||||
|
elif (country==None):
|
||||||
|
error(email, "Es wurde kein Land angegeben")
|
||||||
|
else:
|
||||||
|
if (phone==None):
|
||||||
|
phone = "NULL"
|
||||||
|
|
||||||
|
cursor=db.cursor()
|
||||||
|
cursor.execute("INSERT INTO users (firstname, lastname, email, address, city, phone, country, password) "+
|
||||||
|
"VALUES ('"+firstname+"', '"+lastname+"', '"+email+"', '"+address+"', '"+city+"', '"+phone+"', "+country+", '"+genpasswd()+"')")
|
||||||
|
|
||||||
|
if (oldrace!=None):
|
||||||
|
cursor.execute("INSERT INTO subscriptions (user, race, game) "+
|
||||||
|
"VALUES (LAST_INSERT_ID(), '"+oldrace+"', 1)")
|
||||||
|
|
||||||
|
if (newrace!=None):
|
||||||
|
cursor.execute("INSERT INTO subscriptions (user, race, game) "+
|
||||||
|
"VALUES (LAST_INSERT_ID(), '"+newrace+"', 1)")
|
||||||
|
|
||||||
|
errors.close()
|
||||||
|
unlock(sys.argv[1]+".err")
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
import sys
|
||||||
|
print sys.argv[0], sys.argv[1]
|
Loading…
Reference in New Issue