from mod_python import Session, util, apache, Cookie
from sqlobject import sqlbuilder, AND
from include.siteSQL import DB, Accounts
import time

def index(req, username=None, password=None, location='/home', **data):
#  try:
    PSDefaults = apache.import_module("include.PSDefaults")
    psdef = PSDefaults.Template(req)
    session = Session.Session(req)

    db = DB()
    db.connect()
    db.connection.cache.clear()
    account = Accounts.select(AND(Accounts.q.username == username, \
                                  Accounts.q.password == password))
    account = list(account)
    db.close()
    if session.is_new():
      if len(account) == 0:
        Status = ""
        req.content_type = "text/html"
        psdef.addVars({'MemberLogin':psdef.memberLogin(location=location, Status=Status), 'status':None})
        psdef.compileTemplate('./templates/user_login.tpl')
        psdef.runTemplate()
      else:
        session["accountid"], session["status"] = account[0].id, account[0].status
        session["forward_data"] = data
        if session["status"] == "Disable":
          util.redirect(req, '/disabled')
        session.save()
        cookie = Cookie.Cookie('accountid', account[0].id)
       
    #    cookie.expires = time.time() + 32140800
        
        Cookie.add_cookie(req, cookie)

        util.redirect(req, location)
    else:
      if len(account)>0:
        session["accountid"], session["status"] = account[0].id, account[0].status
        session["forward_data"] = data
      session.save()
      util.redirect(req, location)
        
    return
#  except:
#    import sys 
#    PSDefaults = apache.import_module("include.PSDefaults")
#    psdef = PSDefaults.Template(req)
#    feedback = str(sys.exc_info()[0])
#    req.content_type = "text/html"
#    psdef.addVars({'FeedbackMessage':feedback, 'success':False, 'status':None})
#    psdef.compileTemplate("./templates/feedback.tpl")
#    psdef.runTemplate()
#    return

def reset(req, username=None, email=None):
  try:
    PSDefaults = apache.import_module("include.PSDefaults")
    psdef = PSDefaults.Template(req)

    db = DB()
    db.connect()
    db.connection.cache.clear()
    account = Accounts.select(AND(Accounts.q.username == username, \
                                  Accounts.q.email == email))
    account = list(account)
    db.close()

    if len(account) == 0:
        Status = "No matching username and/or email found"
        if username == None and email == None:
            Status = None
            
        req.content_type = "text/html"
        psdef.addVars({'MemberLogin':psdef.resetLogin(Status=Status), 'status':None})
        psdef.compileTemplate('./templates/user_login.tpl')
        psdef.runTemplate()
    else:
        if account[0].status == "Disable":
            util.redirect(req, '/disabled')
        else:
            new_password = _nicepass()
            account[0].password = sqlbuilder.func.MD5(new_password)

            html = '''<p>Your new <a href="https://freight-terminal.com/login">freight-terminal.com</a> password is: %s</p>''' % (new_password)
            text = '''Your new freight-terminal.com password is: %s''' % (new_password)
            subject = 'freight-terminal.com Password Reset Requested'
            email = account[0].email
            sender = 'webmaster@freight-terminal.com'
                
            reset_email = PSDefaults.createMultiPartEmail(html, text, subject, email, sender, attachments=[])

            import smtplib
            conn = smtplib.SMTP(PSDefaults.EmailServer)
            conn.sendmail(sender, email, reset_email)
            conn.quit()
            
            Status = "Your password has been reset you should receive an email with the new password shortly."
            req.content_type = "text/html"
            psdef.addVars({'MemberLogin':psdef.memberLogin(location='/home', Status=Status), 'status':None})
            psdef.compileTemplate('./templates/user_login.tpl')
            psdef.runTemplate()
    return
  except:
    import sys 
    PSDefaults = apache.import_module("include.PSDefaults")
    psdef = PSDefaults.Template(req)
    feedback = str(sys.exc_info()[0])
    req.content_type = "text/html"
    psdef.addVars({'FeedbackMessage':feedback, 'success':False, 'status':None})
    psdef.compileTemplate("./templates/feedback.tpl")
    psdef.runTemplate()
    return

def _nicepass(alpha=6,numeric=2):

    import string
    import random
    vowels = ['a','e','i','o','u']
    consonants = [a for a in string.ascii_lowercase if a not in vowels]
    digits = string.digits
    
    def a_part(slen):
        ret = ''
        for i in range(slen):			
            if i%2 ==0:
                randid = random.randint(0,20) 
                ret += consonants[randid]
            else:
                randid = random.randint(0,4)
                ret += vowels[randid]
        return ret
    
    def n_part(slen):
        ret = ''
        for i in range(slen):
            randid = random.randint(0,9)
            ret += digits[randid]
        return ret
        	
    fpl = alpha/2		
    if alpha % 2 :
        fpl = int(alpha/2) + 1 					
    lpl = alpha - fpl	
    
    start = a_part(fpl)
    mid = n_part(numeric)
    end = a_part(lpl)
    
    return "%s%s%s" % (start,mid,end)
