예제 #1
0
    def addUser(self, form):

        db = self.__db
        cursor = self.__cursor
        hostname = self.__hostname
        mail_server = self.__mail_server  # August 19, 2011

        mail_programmer = self.__mail_programmer  # July 30, 2010
        mail_biologist = self.__mail_biologist
        mail_admin = self.__mail_admin

        # print "Content-type:text/html"		# TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!!
        # print					# DITTO
        # print `form`

        uHandler = UserHandler(db, cursor)
        lHandler = LabHandler(db, cursor)
        pHandler = ProjectDatabaseHandler(db, cursor)

        ucMapper = UserCategoryMapper(db, cursor)
        category_Name_ID_Map = ucMapper.mapCategoryNameToID()

        # Get form values
        labID = int(form.getvalue("labs"))
        username = form.getvalue("username")

        firstName = form.getvalue("firstName")
        lastName = form.getvalue("lastName")
        description = firstName + " " + lastName

        to_email = form.getvalue("email")

        from_email = mail_admin

        # Change July 30, 2010 - random password generator
        # passwd = form.getvalue("password")

        chars = string.letters + string.digits
        passwd = ""

        for i in range(10):
            passwd += choice(chars)

            # System access level: Lab default or override?
            # if form.getvalue("privChoiceRadio") == 'override':
        accessLevel = category_Name_ID_Map[form.getvalue("system_access_level")]
        # else:
        # accessLevel = lHandler.findDefaultAccessLevel(labID)

        newProps = {}

        try:
            # Insert User information
            userID = uHandler.insertUser(
                username, firstName, lastName, description, accessLevel, to_email, passwd, labID
            )
            # newUser = uHandler.getUserByID(userID)
            tmpLab = lHandler.findLabByID(labID)
            # print tmpLab.getName()

            # Insert Project info
            # Sept. 11/07: Differentiate between user categories Reader and Writer - different field names
            if form.has_key("userProjectsReadonly"):
                # list of IDs
                readonlyProjects = utils.unique(form.getlist("userProjectsReadonly"))
                # print `readonlyProjects`
                pHandler.insertMemberProjects(userID, readonlyProjects, "Reader")

            elif form.has_key("userProjectsReadonlyWrite"):
                # list of IDs
                readonlyProjects = utils.unique(form.getlist("userProjectsReadonlyWrite"))
                # print `readonlyProjects`
                pHandler.insertMemberProjects(userID, readonlyProjects, "Reader")

                # Write projects exist only for Writers
            if form.has_key("userProjectsWrite"):
                writeProjects = utils.unique(form.getlist("userProjectsWrite"))
                pHandler.insertMemberProjects(userID, writeProjects, "Writer")

                # don't assign projects to a User instance - will retrieve them from db in output function
            newUser = User(
                userID,
                username,
                firstName,
                lastName,
                description,
                tmpLab,
                form.getvalue("system_access_level"),
                to_email,
                passwd,
                [],
                [],
            )

            email_subject = "OpenFreezer User Account"

            msg = email.MIMEMultipart.MIMEMultipart("alternative")

            msg["Subject"] = email_subject
            msg["To"] = to_email

            msgText = (
                "Hi "
                + firstName
                + ",<BR><BR>An OpenFreezer account has been created for you.&nbsp;&nbsp;Your access level is "
                + form.getvalue("system_access_level")
                + ", so you can "
            )

            if form.getvalue("system_access_level") == "Reader":
                msgText += "search for clones.&nbsp;&nbsp;If you wish to add/modify reagents or create projects, please contact the administrator to upgrade your access level.<BR>"

            elif form.getvalue("system_access_level") == "Writer":
                msgText += "search, add, and modify reagents.&nbsp;&nbsp;If you wish to create projects, please contact the administrator to upgrade your access level.<BR>"

            elif form.getvalue("system_access_level") == "Creator":
                msgText += "search for clones, add and modify reagents, as well as create your own projects.<BR>"

                #####################################################
                # CHANGE TEXT AS NEEDED
                #####################################################

            msgText += (
                "<BR>The URL to access the system is <a href='"
                + hostname
                + "'>"
                + hostname
                + "</a>.&nbsp;&nbsp;Your username is <b>"
                + username
                + "</b>, and your temporary password is <b>"
                + passwd
                + "</b>.&nbsp;&nbsp;Please <u>change the temporary password as soon as you log into the website</u> - you can do it through the 'Change your password' link under the 'User Management' menu section.<BR><BR>Please refer to http://openfreezer.org for additional support.<BR><BR>Sincerely,<BR>OpenFreezer  support team.<BR><BR><span style='font-family:Courier; font-size:10pt;'><HR>This is an automatically generated e-mail message.&nbsp;&nbsp;Please do not reply to this e-mail.&nbsp;&nbsp;All questions should be directed to your local administrator.</span>"
            )

            msgText = email.MIMEText.MIMEText(msgText, "html")
            msg.attach(msgText)

            server = smtplib.SMTP(mail_server)
            server.set_debuglevel(1)

            server.sendmail(from_email, [to_email], msg.as_string())
            server.quit()

            self.printUserInfo("view", newUser)

        except DeletedUserException:

            # Without asking too many questions, reactivate the deleted user and overwrite his/her attributes with the form input values
            userID = uHandler.findUserIDByUsername(username)

            newProps["firstname"] = firstName
            newProps["lastname"] = lastName
            newProps["description"] = description
            newProps["email"] = email
            newProps["status"] = "ACTIVE"
            newProps["password"] = passwd

            # Insert new database values and create new object
            uHandler.updateUserProperties(userID, newProps)  # database update
            newUser = uHandler.getUserByID(userID)

            # Insert Project info
            readProjects = []
            writeProjects = []

            if form.has_key("userProjectsReadonly"):
                # list of IDs
                readonlyProjects = form.getlist("userProjectsReadonly")

                for r in readonlyProjects:
                    pHandler.addProjectMember(r, userID, "Reader")

                    # tmpReadProject = pHandler.findPacket(r)
                    # readProjects.append(tmpReadProject)
                    # newUser.addProject(tmpReadProject, 'read')

            if form.has_key("userProjectsWrite"):
                writeProjects = form.getlist("userProjectsWrite")

                for w in writeProjects:
                    pHandler.addProjectMember(w, userID, "Writer")

                    # tmpWriteProject = pHandler.findPacket(w)
                    # writeProjects.append(tmpWriteProject)
                    # newUser.addProject(tmpWriteProject, 'write')

                    # newUser.setReadProjects(readProjects)
                    # newUser.setWriteProjects(writeProjects)

            self.printUserInfo("view", newUser)
            # utils.redirect(hostname + "User.php?View=3&fd=" + filename)

        except DuplicateUsernameException:

            # return to the view with input values and error message
            # Need to construct a dummy User instance to save form values for error output on the next page (otherwise they're lost as soon as Submit is pressed and creation view is exited)
            newLab = lHandler.findLabByID(labID)
            newUser = User(0, username, firstName, lastName, description, newLab, "", email, passwd)

            self.printUserInfo("create", newUser)
예제 #2
0
    def addUser(self, form):

        db = self.__db
        cursor = self.__cursor
        hostname = self.__hostname
        mail_server = self.__mail_server  # August 19, 2011

        mail_programmer = self.__mail_programmer  # July 30, 2010
        mail_biologist = self.__mail_biologist
        mail_admin = self.__mail_admin

        #print "Content-type:text/html"		# TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!!
        #print					# DITTO
        #print `form`

        uHandler = UserHandler(db, cursor)
        lHandler = LabHandler(db, cursor)
        pHandler = ProjectDatabaseHandler(db, cursor)

        ucMapper = UserCategoryMapper(db, cursor)
        category_Name_ID_Map = ucMapper.mapCategoryNameToID()

        # Get form values
        labID = int(form.getvalue("labs"))
        username = form.getvalue("username")

        firstName = form.getvalue("firstName")
        lastName = form.getvalue("lastName")
        description = firstName + " " + lastName

        to_email = form.getvalue("email")

        from_email = mail_admin

        # Change July 30, 2010 - random password generator
        #passwd = form.getvalue("password")

        chars = string.letters + string.digits
        passwd = ""

        for i in range(10):
            passwd += choice(chars)

        # System access level: Lab default or override?
        #if form.getvalue("privChoiceRadio") == 'override':
        accessLevel = category_Name_ID_Map[form.getvalue(
            "system_access_level")]
        #else:
        #accessLevel = lHandler.findDefaultAccessLevel(labID)

        newProps = {}

        try:
            # Insert User information
            userID = uHandler.insertUser(username, firstName, lastName,
                                         description, accessLevel, to_email,
                                         passwd, labID)
            #newUser = uHandler.getUserByID(userID)
            tmpLab = lHandler.findLabByID(labID)
            #print tmpLab.getName()

            # Insert Project info
            # Sept. 11/07: Differentiate between user categories Reader and Writer - different field names
            if form.has_key("userProjectsReadonly"):
                # list of IDs
                readonlyProjects = utils.unique(
                    form.getlist("userProjectsReadonly"))
                #print `readonlyProjects`
                pHandler.insertMemberProjects(userID, readonlyProjects,
                                              'Reader')

            elif form.has_key("userProjectsReadonlyWrite"):
                # list of IDs
                readonlyProjects = utils.unique(
                    form.getlist("userProjectsReadonlyWrite"))
                #print `readonlyProjects`
                pHandler.insertMemberProjects(userID, readonlyProjects,
                                              'Reader')

            # Write projects exist only for Writers
            if form.has_key("userProjectsWrite"):
                writeProjects = utils.unique(form.getlist("userProjectsWrite"))
                pHandler.insertMemberProjects(userID, writeProjects, 'Writer')

            # don't assign projects to a User instance - will retrieve them from db in output function
            newUser = User(userID, username, firstName, lastName,
                           description, tmpLab,
                           form.getvalue("system_access_level"), to_email,
                           passwd, [], [])

            email_subject = "OpenFreezer User Account"

            msg = email.MIMEMultipart.MIMEMultipart('alternative')

            msg['Subject'] = email_subject
            msg['To'] = to_email

            msgText = "Hi " + firstName + ",<BR><BR>An OpenFreezer account has been created for you.&nbsp;&nbsp;Your access level is " + form.getvalue(
                "system_access_level") + ", so you can "

            if form.getvalue("system_access_level") == 'Reader':
                msgText += "search for clones.&nbsp;&nbsp;If you wish to add/modify reagents or create projects, please contact the administrator to upgrade your access level.<BR>"

            elif form.getvalue("system_access_level") == 'Writer':
                msgText += "search, add, and modify reagents.&nbsp;&nbsp;If you wish to create projects, please contact the administrator to upgrade your access level.<BR>"

            elif form.getvalue("system_access_level") == 'Creator':
                msgText += "search for clones, add and modify reagents, as well as create your own projects.<BR>"

            #####################################################
            # CHANGE TEXT AS NEEDED
            #####################################################

            msgText += "<BR>The URL to access the system is <a href='" + hostname + "'>" + hostname + "</a>.&nbsp;&nbsp;Your username is <b>" + username + "</b>, and your temporary password is <b>" + passwd + "</b>.&nbsp;&nbsp;Please <u>change the temporary password as soon as you log into the website</u> - you can do it through the 'Change your password' link under the 'User Management' menu section.<BR><BR>Please refer to http://openfreezer.org for additional support.<BR><BR>Sincerely,<BR>OpenFreezer  support team.<BR><BR><span style='font-family:Courier; font-size:10pt;'><HR>This is an automatically generated e-mail message.&nbsp;&nbsp;Please do not reply to this e-mail.&nbsp;&nbsp;All questions should be directed to your local administrator.</span>"

            msgText = email.MIMEText.MIMEText(msgText, 'html')
            msg.attach(msgText)

            server = smtplib.SMTP(mail_server)
            server.set_debuglevel(1)

            server.sendmail(from_email, [to_email], msg.as_string())
            server.quit()

            self.printUserInfo('view', newUser)

        except DeletedUserException:

            # Without asking too many questions, reactivate the deleted user and overwrite his/her attributes with the form input values
            userID = uHandler.findUserIDByUsername(username)

            newProps["firstname"] = firstName
            newProps["lastname"] = lastName
            newProps["description"] = description
            newProps["email"] = email
            newProps["status"] = "ACTIVE"
            newProps["password"] = passwd

            # Insert new database values and create new object
            uHandler.updateUserProperties(userID, newProps)  # database update
            newUser = uHandler.getUserByID(userID)

            # Insert Project info
            readProjects = []
            writeProjects = []

            if form.has_key("userProjectsReadonly"):
                # list of IDs
                readonlyProjects = form.getlist("userProjectsReadonly")

                for r in readonlyProjects:
                    pHandler.addProjectMember(r, userID, 'Reader')

                    #tmpReadProject = pHandler.findPacket(r)
                    #readProjects.append(tmpReadProject)
                    #newUser.addProject(tmpReadProject, 'read')

            if form.has_key("userProjectsWrite"):
                writeProjects = form.getlist("userProjectsWrite")

                for w in writeProjects:
                    pHandler.addProjectMember(w, userID, 'Writer')

                    #tmpWriteProject = pHandler.findPacket(w)
                    #writeProjects.append(tmpWriteProject)
                    #newUser.addProject(tmpWriteProject, 'write')

            #newUser.setReadProjects(readProjects)
            #newUser.setWriteProjects(writeProjects)

            self.printUserInfo('view', newUser)
            #utils.redirect(hostname + "User.php?View=3&fd=" + filename)

        except DuplicateUsernameException:

            # return to the view with input values and error message
            # Need to construct a dummy User instance to save form values for error output on the next page (otherwise they're lost as soon as Submit is pressed and creation view is exited)
            newLab = lHandler.findLabByID(labID)
            newUser = User(0, username, firstName, lastName, description,
                           newLab, "", email, passwd)

            self.printUserInfo('create', newUser)
예제 #3
0
    def handle(self):

        db = self.__db
        cursor = self.__cursor
        hostname = self.__hostname

        mail_server = self.__mail_server  # August 19, 2011
        mail_admin = self.__mail_admin  # August 19, 2011

        clone_request = self.__clone_request

        form = cgi.FieldStorage(keep_blank_values="True")

        uHandler = UserHandler(db, cursor)

        # print "Content-type:text/html"		# TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!!
        # print					# DITTO
        # print `form`

        if form.has_key("curr_username"):
            # store the user ID for use throughout the session; add to other views in addition to create in PHP
            currUname = form.getvalue("curr_username")
            currUser = uHandler.getUserByDescription(currUname)

            Session.setUser(currUser)

        elif form.has_key("curr_user_id"):
            currUID = form.getvalue("curr_user_id")
            currUser = uHandler.getUserByID(currUID)
            Session.setUser(currUser)

        if form.has_key("add_user"):
            self.addUser(form)

        elif form.has_key("modify_user"):
            self.modifyUser(form)

        elif form.has_key("cancel_user"):
            self.cancelUserModification(form)

        elif form.has_key("save_user"):
            self.saveUser(form)

        elif form.has_key("delete_user"):
            self.deleteUser(form)

        elif (
            form.has_key("view_user")
            and form.getvalue("view_user") != ""
            and not form.has_key("modify_lab")
            and not form.has_key("delete_lab")
        ):
            self.viewUser(form)

            # Nov. 17/07 - Personal user page
        elif (
            form.has_key("view_user")
            and form.getvalue("view_user") == ""
            and not form.has_key("modify_lab")
            and not form.has_key("delete_lab")
        ):
            self.printUserInfo("view", currUser)

        elif form.has_key("add_lab"):
            self.addLab(form)

        elif form.has_key("view_lab"):
            self.viewLab(form)

        elif form.has_key("modify_lab"):
            self.modifyLab(form)

        elif form.has_key("save_lab"):
            self.saveLab(form)

        elif form.has_key("cancel_lab"):
            self.cancelLabModification(form)

        elif form.has_key("delete_lab"):
            self.deleteLab(form)

        elif form.has_key("bug_report"):
            self.submitBug(form)

        elif form.has_key("send_order"):

            ######################################################################
            # CHANGE SERVER NAME AND EMAIL TO YOUR LOCAL CREDENTIALS
            ######################################################################

            userID = form.getvalue("curr_user_id")
            userDescr = form.getvalue("curr_username")

            from_email = uHandler.findEmail(userID)

            if not from_email:
                from_email = userDescr

            to_email = clone_request

            email_subject = userDescr + ": Clone Request"

            f_in = form.getvalue("outputContent")
            infile = open(f_in, "rb")

            msg = email.MIMEMultipart.MIMEMultipart()
            # msg.attach(email.MIMEText.MIMEText(infile.read()))	# no, this attaches plain text
            msg["Subject"] = email_subject

            part = email.MIMEBase.MIMEBase("application", "octet-stream")
            part.set_payload(infile.read())
            email.Utils.base64.standard_b64encode(infile.read())
            part.add_header("Content-Disposition", 'attachment; filename="%s"' % os.path.basename(f_in))
            msg.attach(part)

            server = smtplib.SMTP(mail_server)

            server.set_debuglevel(1)

            # Send a request to your clone request address
            server.sendmail(from_email, to_email, msg.as_string())

            # AND send a copy to the user (change the subject)
            # msg['Subject'] = "Clone request confirmation"		# doesn't change, investigate later

            # Return email text changed March 31/08

            #######################################
            # CHANGE TEXT AS NEEDED
            #######################################
            msg.attach(
                email.MIMEText.MIMEText(
                    "This is a copy of your clone request.  Please retain for your records.  You will be notified by e-mail when your clone is ready."
                )
            )

            server.sendmail(to_email, from_email, msg.as_string())
            server.quit()

            # Method 2
            # sendmail = "/usr/sbin/sendmail"

            # o = os.popen("%s -t" %  sendmail,"w")
            # o.write("To: %s\r\n" %  to_email)

            # if from_email:
            # o.write("From: %s\r\n" %  from_email)
            # o.write("Subject: %s\r\n" %  email_subject)
            # o.write("\r\n")
            # o.write("%s\r\n" % msg)

            # o.close()

            os.remove(f_in)  # delete the file from /tmp dir

            utils.redirect(hostname + "User.php?View=8&Sent=1")

            # June 1, 2010: Automated password reset
        elif form.has_key("reset_pw"):

            # change June 2, 2010: Don't enter email, rather, ask users to enter their username - more secure
            # to_email = form.getvalue("email")

            from_email = mail_admin

            # success = True

            chars = string.letters + string.digits
            new_passwd = ""

            for i in range(10):
                new_passwd += choice(chars)

                # reset it in the database
            if form.has_key("uName"):
                u_name = form.getvalue("uName")

                userID = uHandler.findUserIDByUsername(u_name)

                if userID > 0:
                    u_descr = uHandler.findDescription(userID)

                    to_email = uHandler.findEmail(userID)

                    uHandler.setUserPropertyValue(userID, "password", new_passwd)

                    email_subject = "OpenFreezer Password Change"

                    msg = email.MIMEMultipart.MIMEMultipart()
                    # msg.attach(email.MIMEText.MIMEText(infile.read()))	# no, this attaches plain text

                    msg["Subject"] = email_subject

                    ###################################
                    # CHANGE TEXT AS NEEDED
                    ###################################
                    msg.attach(
                        email.MIMEText.MIMEText(
                            "Dear "
                            + u_descr
                            + ",\n\nYour password for OpenFreezer has been changed.\n\nYour temporary new password is: "
                            + new_passwd
                            + ".\n\nPlease change the temporary password as soon as you log into the system.\n\nYour username for OpenFreezer is '"
                            + u_name
                            + "'.\n\nFor any questions, please refer to http://openfreezer.org. \n\nSincerely,\nOpenFreezer support team.\n--------------------------------\nThis is an automatically generated e-mail message.  Please do not reply to this e-mail.  All questions should be directed to your local administrator."
                        )
                    )

                    server = smtplib.SMTP(mail_server)

                    server.set_debuglevel(1)

                    server.sendmail(from_email, to_email, msg.as_string())
                    server.quit()

                    utils.redirect(hostname + "User.php?View=6&Reset=1&uid=" + ` userID `)
                else:
                    # retry by description
                    if form.has_key("uDesc"):
                        u_descr = form.getvalue("uDesc")

                        # but account for whitespace
                        toks = u_descr.split(" ")

                        tmp_descr = ""

                        for tok in toks:
                            tmp_descr += tok.strip() + " "

                            # strip extra whitespace from end
                        tmp_descr = tmp_descr.strip()

                        userID = uHandler.findUserIDByDescription(tmp_descr)

                        if userID > 0:
                            u_name = uHandler.findUsername(userID)

                            to_email = uHandler.findEmail(userID)
                            uHandler.setUserPropertyValue(userID, "password", new_passwd)

                            email_subject = "OpenFreezer Password Change"

                            msg = email.MIMEMultipart.MIMEMultipart()
                            # msg.attach(email.MIMEText.MIMEText(infile.read()))	# no, this attaches plain text

                            msg["Subject"] = email_subject

                            ##############################
                            # CHANGE TEXT AS NEEDED
                            ##############################
                            msg.attach(
                                email.MIMEText.MIMEText(
                                    "Dear "
                                    + u_descr
                                    + ",\n\nYour password for OpenFreezer has been changed.\n\nYour temporary new password is: "
                                    + new_passwd
                                    + ".\n\nPlease change the temporary password as soon as you log into the system.\n\nYour username for OpenFreezer is '"
                                    + u_name
                                    + "'.\n\nPlease refer to http://openfreezer.org for additional support.\n\nSincerely,\nOpenFreezer support team.\n--------------------------------\nThis is an automatically generated e-mail message.  Please do not reply to this e-mail.  All questions should be directed to <a href='mailto:"
                                    + mail_admin
                                    + "'>"
                                    + mail_admin
                                    + "</a>"
                                )
                            )

                            server = smtplib.SMTP(mail_server)
                            server.set_debuglevel(1)

                            server.sendmail(from_email, to_email, msg.as_string())
                            server.quit()

                            utils.redirect(hostname + "User.php?View=6&Reset=1&uid=" + ` userID `)
                        else:
                            utils.redirect(hostname + "User.php?View=6&Reset=0")
                    else:
                        utils.redirect(hostname + "User.php?View=6&Reset=0")
            else:
                utils.redirect(hostname + "User.php?View=6&Reset=0")

        cursor.close()
        db.close()
예제 #4
0
    def handle(self):

        db = self.__db
        cursor = self.__cursor
        hostname = self.__hostname

        mail_server = self.__mail_server  # August 19, 2011
        mail_admin = self.__mail_admin  # August 19, 2011

        clone_request = self.__clone_request

        form = cgi.FieldStorage(keep_blank_values="True")

        uHandler = UserHandler(db, cursor)

        #print "Content-type:text/html"		# TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!!
        #print					# DITTO
        #print `form`

        if form.has_key("curr_username"):
            # store the user ID for use throughout the session; add to other views in addition to create in PHP
            currUname = form.getvalue("curr_username")
            currUser = uHandler.getUserByDescription(currUname)

            Session.setUser(currUser)

        elif form.has_key("curr_user_id"):
            currUID = form.getvalue("curr_user_id")
            currUser = uHandler.getUserByID(currUID)
            Session.setUser(currUser)

        if form.has_key("add_user"):
            self.addUser(form)

        elif form.has_key("modify_user"):
            self.modifyUser(form)

        elif form.has_key("cancel_user"):
            self.cancelUserModification(form)

        elif form.has_key("save_user"):
            self.saveUser(form)

        elif form.has_key("delete_user"):
            self.deleteUser(form)

        elif form.has_key("view_user") and form.getvalue(
                "view_user") != "" and not form.has_key(
                    "modify_lab") and not form.has_key("delete_lab"):
            self.viewUser(form)

        # Nov. 17/07 - Personal user page
        elif form.has_key("view_user") and form.getvalue(
                "view_user") == "" and not form.has_key(
                    "modify_lab") and not form.has_key("delete_lab"):
            self.printUserInfo('view', currUser)

        elif form.has_key("add_lab"):
            self.addLab(form)

        elif form.has_key("view_lab"):
            self.viewLab(form)

        elif form.has_key("modify_lab"):
            self.modifyLab(form)

        elif form.has_key("save_lab"):
            self.saveLab(form)

        elif form.has_key("cancel_lab"):
            self.cancelLabModification(form)

        elif form.has_key("delete_lab"):
            self.deleteLab(form)

        elif form.has_key("bug_report"):
            self.submitBug(form)

        elif form.has_key("send_order"):

            ######################################################################
            # CHANGE SERVER NAME AND EMAIL TO YOUR LOCAL CREDENTIALS
            ######################################################################

            userID = form.getvalue("curr_user_id")
            userDescr = form.getvalue("curr_username")

            from_email = uHandler.findEmail(userID)

            if not from_email:
                from_email = userDescr

            to_email = clone_request

            email_subject = userDescr + ": Clone Request"

            f_in = form.getvalue("outputContent")
            infile = open(f_in, 'rb')

            msg = email.MIMEMultipart.MIMEMultipart()
            #msg.attach(email.MIMEText.MIMEText(infile.read()))	# no, this attaches plain text
            msg['Subject'] = email_subject

            part = email.MIMEBase.MIMEBase('application', "octet-stream")
            part.set_payload(infile.read())
            email.Utils.base64.standard_b64encode(infile.read())
            part.add_header(
                'Content-Disposition',
                'attachment; filename="%s"' % os.path.basename(f_in))
            msg.attach(part)

            server = smtplib.SMTP(mail_server)

            server.set_debuglevel(1)

            # Send a request to your clone request address
            server.sendmail(from_email, to_email, msg.as_string())

            # AND send a copy to the user (change the subject)
            #msg['Subject'] = "Clone request confirmation"		# doesn't change, investigate later

            # Return email text changed March 31/08

            #######################################
            # CHANGE TEXT AS NEEDED
            #######################################
            msg.attach(
                email.MIMEText.MIMEText(
                    "This is a copy of your clone request.  Please retain for your records.  You will be notified by e-mail when your clone is ready."
                ))

            server.sendmail(to_email, from_email, msg.as_string())
            server.quit()

            # Method 2
            #sendmail = "/usr/sbin/sendmail"

            #o = os.popen("%s -t" %  sendmail,"w")
            #o.write("To: %s\r\n" %  to_email)

            #if from_email:
            #o.write("From: %s\r\n" %  from_email)
            #o.write("Subject: %s\r\n" %  email_subject)
            #o.write("\r\n")
            #o.write("%s\r\n" % msg)

            #o.close()

            os.remove(f_in)  # delete the file from /tmp dir

            utils.redirect(hostname + "User.php?View=8&Sent=1")

        # June 1, 2010: Automated password reset
        elif form.has_key("reset_pw"):

            # change June 2, 2010: Don't enter email, rather, ask users to enter their username - more secure
            #to_email = form.getvalue("email")

            from_email = mail_admin

            #success = True

            chars = string.letters + string.digits
            new_passwd = ""

            for i in range(10):
                new_passwd += choice(chars)

            # reset it in the database
            if form.has_key("uName"):
                u_name = form.getvalue("uName")

                userID = uHandler.findUserIDByUsername(u_name)

                if userID > 0:
                    u_descr = uHandler.findDescription(userID)

                    to_email = uHandler.findEmail(userID)

                    uHandler.setUserPropertyValue(userID, 'password',
                                                  new_passwd)

                    email_subject = "OpenFreezer Password Change"

                    msg = email.MIMEMultipart.MIMEMultipart()
                    #msg.attach(email.MIMEText.MIMEText(infile.read()))	# no, this attaches plain text

                    msg['Subject'] = email_subject

                    ###################################
                    # CHANGE TEXT AS NEEDED
                    ###################################
                    msg.attach(
                        email.MIMEText.MIMEText(
                            "Dear " + u_descr +
                            ",\n\nYour password for OpenFreezer has been changed.\n\nYour temporary new password is: "
                            + new_passwd +
                            ".\n\nPlease change the temporary password as soon as you log into the system.\n\nYour username for OpenFreezer is '"
                            + u_name +
                            "'.\n\nFor any questions, please refer to http://openfreezer.org. \n\nSincerely,\nOpenFreezer support team.\n--------------------------------\nThis is an automatically generated e-mail message.  Please do not reply to this e-mail.  All questions should be directed to your local administrator."
                        ))

                    server = smtplib.SMTP(mail_server)

                    server.set_debuglevel(1)

                    server.sendmail(from_email, to_email, msg.as_string())
                    server.quit()

                    utils.redirect(hostname + "User.php?View=6&Reset=1&uid=" +
                                   ` userID `)
                else:
                    # retry by description
                    if form.has_key("uDesc"):
                        u_descr = form.getvalue("uDesc")

                        # but account for whitespace
                        toks = u_descr.split(" ")

                        tmp_descr = ""

                        for tok in toks:
                            tmp_descr += tok.strip() + " "

                        # strip extra whitespace from end
                        tmp_descr = tmp_descr.strip()

                        userID = uHandler.findUserIDByDescription(tmp_descr)

                        if userID > 0:
                            u_name = uHandler.findUsername(userID)

                            to_email = uHandler.findEmail(userID)
                            uHandler.setUserPropertyValue(
                                userID, 'password', new_passwd)

                            email_subject = "OpenFreezer Password Change"

                            msg = email.MIMEMultipart.MIMEMultipart()
                            #msg.attach(email.MIMEText.MIMEText(infile.read()))	# no, this attaches plain text

                            msg['Subject'] = email_subject

                            ##############################
                            # CHANGE TEXT AS NEEDED
                            ##############################
                            msg.attach(
                                email.MIMEText.MIMEText(
                                    "Dear " + u_descr +
                                    ",\n\nYour password for OpenFreezer has been changed.\n\nYour temporary new password is: "
                                    + new_passwd +
                                    ".\n\nPlease change the temporary password as soon as you log into the system.\n\nYour username for OpenFreezer is '"
                                    + u_name +
                                    "'.\n\nPlease refer to http://openfreezer.org for additional support.\n\nSincerely,\nOpenFreezer support team.\n--------------------------------\nThis is an automatically generated e-mail message.  Please do not reply to this e-mail.  All questions should be directed to <a href='mailto:"
                                    + mail_admin + "'>" + mail_admin + "</a>"))

                            server = smtplib.SMTP(mail_server)
                            server.set_debuglevel(1)

                            server.sendmail(from_email, to_email,
                                            msg.as_string())
                            server.quit()

                            utils.redirect(hostname +
                                           "User.php?View=6&Reset=1&uid=" +
                                           ` userID `)
                        else:
                            utils.redirect(hostname +
                                           "User.php?View=6&Reset=0")
                    else:
                        utils.redirect(hostname + "User.php?View=6&Reset=0")
            else:
                utils.redirect(hostname + "User.php?View=6&Reset=0")

        cursor.close()
        db.close()