1
0
Fork 0
gnuviechadmin-historic/backend/GNVAdm.py
Jan Dittberner a7edeca826 - added gnuviech package
- better code structure
- class for domain
- class for preferences
- password generation function


git-svn-id: file:///home/www/usr01/svn/gnuviechadmin/gnuviech.info/gnuviechadmin/trunk@82 a67ec6bc-e5d5-0310-a910-815c51eb3124
2004-12-25 23:09:19 +00:00

102 lines
3.2 KiB
Python

"""Package for GNUViech Admin main types and functions
(c) Copyright 2004 Jan Dittberner, IT-Consulting & Solutions
Germany
"""
import os
import gnuviech
class DomainNotExistentError(Exception): pass
class DomainFileNotExistentError(Exception): pass
class GNVDomain:
"""Represents a domain in the GNUViech admin tool"""
def __init__(self, domain):
"""Initializes the domain object"""
self.name = domain
try:
self.findUser()
except gnuviech.NoAdmDirError:
gnuviech.setupDirs()
self.__init__(domain)
except DomainFileNotExistentError:
self.createDomainFile()
self.__init__(domain)
except DomainNotExistentError:
self.createUser()
def __repr__(self):
retval = "Domain "+self.name
if not self.username is None:
retval += ", User "+self.username
else:
retval += ", new domain"
return retval
def createDomainFile(self):
"""Create the domain user id map file."""
file = open(gnuviech.GNVPrefs.GVADMDIR+"domains", "w")
file.close()
def createUser(self):
"""Create a user for the domain."""
file = open(gnuviech.GNVPrefs.GVADMDIR+"domains", "r")
id = 0
for line in file.readlines():
(key, value) = line.split(":")
if (int(value) > id): id = int(value)
file.close()
id += 1
file = open(gnuviech.GNVPrefs.GVADMDIR+"domains", "a")
file.write("%s:%d\n" % (self.name, id))
file.close()
self.findUser()
def findUser(self):
"""Finds the user for the domain."""
self.username = None
if (os.access(gnuviech.GNVPrefs.GVADMDIR, os.R_OK)):
try:
domainsfile = open(gnuviech.GNVPrefs.GVADMDIR+"domains", "r")
for line in domainsfile.readlines():
(key, value) = line.split(":")
if (key == self.name):
self.username = "%s%02d" % (
gnuviech.GNVPrefs.USERPREFIX,
int(value))
domainsfile.close()
if self.username is None:
raise DomainNotExistentError
except IOError:
raise DomainFileNotExistentError
else:
raise gnuviech.NoAdmDirError
def getMaxPop3Id(self):
maxid = 0
try:
passwdfile = open(gnuviech.GNVPrefs.BASEPREFIX+"/etc/passwd", "r")
for line in passwdfile.readlines():
(login, passwd, uid, gid, name, dir, shell) = line.split(":")
if login.startswith(self.username + "p"):
id = int(login[len(self.username):])
print id
if (id > maxid): maxid = id
except IOError:
pass
return maxid
def getNextUser(self, usertype):
"""Gets the next user for the given type."""
if (usertype == "web"):
return self.username
if (usertype == "pop3"):
return "%sp%d" % (self.username, self.getMaxPop3Id()+1)
if __name__ == "__main__":
dom = GNVDomain("dittberner.info")
print dom