import os
import sys
import re
import smtplib
import socket
version='0.1'
#Config vars
basedir='/etc/'
userfile=basedir + 'users'
backupuserfile=basedir + 'users.bak' #saves previous state of users
lockfile=basedir + 'otrs.lck' #has pid in it
users=[]
class UserFile:
def __init__(this):
#throws exception
this.check_lockfile()
#returns users array
def readUsers(this):
global users
users = []
uf = file(userfile)
users = uf.readlines()
uf.close()
#writes users array to file
def writeUsers(this,users):
uf = file(userfile,'w')
uf.writelines(users)
uf.flush()
uf.close()
#renames current user file to user back
def move_usersfile(this):
os.rename(userfile, backupuserfile)
#locks users file (users.lock has pid in it)
def lockUsers(this):
lf = open(lockfile,'w')
lf.write('%d' % os.getpid())
lf.close()
#removes lock file
def unlockUsers(this):
os.remove(lockfile)
#checks if the lock file is there and other process is existant
def check_lockfile(this):
if os.path.exists(lockfile):
lf = open(lockfile)
pidnr = lf.read()
lf.close()
#check if pid exists
#if yes then exit(1) + error message, if no then remove lock file
#maybe also need to check for process name, cause pids cicle!
if os.path.exists('/proc/%s' % pidnr) and pidnr:
sys.exit('another process already running!!')
else:
print("found stale lockfile, removing")
os.remove(lockfile)
class UserManager:
def rotate(this):
uname = users.pop(0)
users.append(uname)
def getnext(this):
if len(users) < 1:
sys.exit("users list is empty\n%s" % users)
return users[0]
def sendmail(this):
username = this.getnext()
mailtext = 'Subject: OTRS-Verantwortlicher\n\ndiese Woche %s ist verantwortlich fuer OTRS' % username
#send mail to users that user has work to do
sm = smtplib.SMTP()
for user in users:
sm.sendmail("otrs-watcher", user, mailtext)
#changes owner of the otrs-imap-folder, so the users can mark messages as red
def give_rights(this):
username = this.getnext()
def core():
ufile = UserFile()
ufile.lockUsers()
ufile.readUsers()
umanager = UserManager()
umanager.sendmail()
umanager.give_rights()
umanager.rotate()
ufile.move_userfile()
ufile.writeUsers()
ufile.unlockUsers()
if os.getuid() != 0:
sys.exit("this program needs to be run as root!")
core()
sys.exit("all done.")