Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- #
- # File Name= "cgi_session.py"
- # place file at: /usr/lib/python3.5/cgi_session.py
- # import as : from cgi_session import CGISession
- # session=CGISession()
- #
- # -*- coding: utf-8 -*-
- import stat
- import sys
- import tempfile
- import hashlib
- import os
- import time
- import random
- import errno
- import ast
- import pprint
- import fcntl
- class CGISession:
- __sessionfile = ''
- __newid = ''
- __date = ''
- __tmp = ''
- __pid = ''
- __time = ''
- __rand = ''
- __pp = pprint.PrettyPrinter()
- __fs = ''
- def __init__(
- self,
- id=None,
- directory=None,
- hash='md5',
- ):
- if directory is None:
- self.__directory = tempfile.gettempdir()
- else:
- if not os.path.exists(directory):
- try:
- os.makedirs(directory)
- except error:
- if error.errno != errno.EEXIST:
- raise
- self.__directory = directory
- if hash not in ['md5', 'sha256', 'sha512']:
- self.__hash = 'md5'
- else:
- self.__hash = hash
- if id is None:
- self.__id = self.__genSessionID()
- self.__fs = open(os.path.join(self.__directory,
- 'pycgiession_{0}'.format(self.__id)), 'w')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__fs.write('{}')
- self.__fs.close()
- self.__sessionfile = os.path.join(self.__directory,
- 'pycgiession_{0}'.format(self.__id))
- os.chmod(self.__sessionfile,stat.S_IRWXU and stat.S_IROTH)
- else:
- try:
- open(os.path.join(self.__directory,
- 'pycgiession_{0}'.format(os.path.basename(id))),
- 'r').close()
- self.__id = os.path.basename(id)
- self.__sessionfile = os.path.join(self.__directory,
- 'pycgiession_{0}'.format(self.__id))
- os.chmod(self.__sessionfile,stat.S_IRWXU and stat.S_IROTH)
- except error:
- if error.errno == errno.ENOENT:
- self.__id = self.__genSessionID()
- self.__fs = open(os.path.join(self.__directory,
- 'pycgiession_{0}'.format(self.__id)), 'w')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__fs.write('{}')
- self.__fs.close()
- self.__sessionfile = os.path.join(self.__directory,
- 'pycgiession_{0}'.format(self.__id))
- os.chmod(self.__sessionfile,stat.S_IRWXU and stat.S_IROTH)
- else:
- raise
- def __genSessionID(self):
- self.__pid = str(os.getpid())
- self.__time = ''.join(map(str, time.gmtime()[0:]))
- self.__rand = str(random.random())
- if self.__hash == 'sha256':
- sha256 = hashlib.sha256()
- sha256.update(self.__pid)
- sha256.update(self.__time)
- sha256.update(self.__rand)
- self.__newid = sha256.hexdigest()
- elif self.__hash == 'sha512':
- sha512 = hashlib.sha512()
- sha512.update(self.__pid)
- sha512.update(self.__time)
- sha512.update(self.__rand)
- self.__newid = sha512.hexdigest()
- else:
- md5 = hashlib.md5()
- md5.update(self.__pid.encode('utf-8'))
- md5.update(self.__time.encode('utf-8'))
- md5.update(self.__rand.encode('utf-8'))
- self.__newid = md5.hexdigest()
- return self.__newid
- def getID(self):
- return self.__id
- def setParam(self, key, value):
- self.__fs = open(self.__sessionfile, 'r')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__date = self.__fs.readlines()
- self.__fs.close()
- self.__fs = open(self.__sessionfile, 'w')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__date = ast.literal_eval(self.__date[0])
- self.__date[key] = value
- self.__fs.write(self.__pp.pformat(self.__date))
- self.__fs.close()
- def getParam(self, key):
- self.__fs = open(self.__sessionfile, 'r')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__date = self.__fs.readline()
- self.__fs.close()
- self.__date = ast.literal_eval(self.__date)
- try:
- self.__date = self.__date[key]
- return self.__date
- except KeyError:
- return None
- def getAll(self):
- self.__fs = open(self.__sessionfile, 'r')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__date = self.__fs.readlines()
- self.__fs.close()
- self.__date = ast.literal_eval(self.__date[0])
- return self.__date
- def delParam(self, key):
- self.__fs = open(self.__sessionfile, 'r')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__date = self.__fs.readlines()
- self.__fs.close()
- self.__fs = open(self.__sessionfile, 'w')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__date = ast.literal_eval(self.__date[0])
- try:
- del self.__date[key]
- except KeyError:
- pass
- self.__fs.write(self.__pp.pformat(self.__date))
- self.__fs.close()
- def clear(self):
- self.__fs = open(self.__sessionfile, 'w')
- fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
- self.__fs.write('{}')
- self.__fs.close()
- def delete(self):
- os.remove(self.__sessionfile)
- ###################################################################
- #
- #EXAMPLES BELOW:
- #
- >>> from CGISession import CGISession
- >>> session = CGISession()
- >>>
- >>> session.getID()
- '7e487c3c300126fddbecb37b041d66e3'
- >>>
- >>> session.setParam('name','A')
- >>> session.setParam('friends',['C','D','E'])
- >>>
- >>> session.getParam('name')
- 'A'
- >>> session.getParam('friends')
- ['C', 'D', 'E']
- >>>
- >>> session.delParam('name')
- >>> session.delParam('friends')
- >>>
- >>> session.getParam('name')
- >>> session.delParam('friends')
- >>>
- >>> session.delete()
- >>>
Add Comment
Please, Sign In to add comment