def executeCommand(self,command):
        log("IN command %s" % (command.name))
        table64 = command.getValue("table64")
        
        tableJSON = table64.decode('base64','strict')
        tableDict = json.loads(tableJSON)
        
        #get event ID
        db = mongo.MongoDBComponents(info.dbIP,info.dbPort)
        allEvents = db.find_all(info.dbDefault, info.rootTableCollectionName)
        
        #$to do: need a better way to do this ...
        #max = allEvents.count
        maxEvent = 0
        for ev in allEvents:
            maxEvent += 1;
            
        tableNumber = maxEvent + 1

        # move this block to function ...
        
        tableDict['tableNumber'] = tableNumber
        
        mongo.newMongo(info).save(info.dbDefault,info.rootTableCollectionName, tableDict)

        log("recieved table JSON %s" % (tableJSON) )
        panel = command.getValue("panel")

        s = "Saved new Table Event #%s" % ( str(tableNumber) )

        displayCmd = Command('Display')
        displayCmd.addParameter('panel', panel)
        displayCmd.addParameter('html64', Utils().pack(s) )
        
        command.outCommands.append(displayCmd)       
    def executeCommand(self,command):
        panel = command.getValue("panel")
        usr  = command.getValue("usr").decode('base64','strict')
        pwd =  command.getValue("pwd").decode('base64','strict')
       
        from src.framework import mongo
        userInDB = mongo.MongoDBComponents(info.dbIP,info.dbPort).find_one(info.dbDefault, info.userCollection, {'username': usr } )
        s = strings.NO_SUCH_USER
        if(userInDB):
            #user found
            
            if userInDB['locked']:
                s = strings.ACCOUNT_LOCKED
            elif(userInDB['password'] == pwd):
                #user authenticated
                
                #?reset pwd attempts
                pwdAttempts = int(userInDB['passwordAttempts'])
                if(pwdAttempts > 0):
                    userInDB['passwordAttempts'] = 0
                    mongo.newMongo(info).save(info.dbDefault,info.userCollection, userInDB)
                    
                s = strings.WELCOME + " " + userInDB['username']
                
                """display navigation"""
                showNavigation = Command('ShowNavigation')
                showNavigation.addParameter('panel', panel)
                command.outCommands.append(showNavigation)

                """set session timeout value"""
                setKontext = Command('SetKontext')
                setKontext.addParameter('sessionTimeoutMinutes', info.sessionTimeoutMinutes)
                command.outCommands.append(setKontext)

                """set kredentials"""
                setKreds = Command('SetKontext')
                kredPair = "%s_%s" % ( userInDB['username'], userInDB['password'] )
                setKreds.addParameter('kreds',Utils().pack(kredPair))
                command.outCommands.append(setKreds)
                
            else:
                #bad passowrd
                pwdAttempts = int(userInDB['passwordAttempts'])
                if(pwdAttempts >= info.passwordAttempts):
                    userInDB['locked'] = True
                    s = strings.ACCOUNT_LOCKED
                    log("ACCOUNT LOCKED {0} password attempted > {1} times".format(usr,pwdAttempts))
                else:
                    userInDB['passwordAttempts'] = pwdAttempts + 1
                    s = strings.WRONG_PASSWORD % (str( info.passwordAttempts - pwdAttempts))
                    log("BAD PASSWORD {0} password attempted > {1} times".format(usr,pwdAttempts))
                    
                #save bad password update
                mongo.newMongo(info).save(info.dbDefault,info.userCollection, userInDB)   

       
        displayCmd = Command('Alert')
        displayCmd.addParameter('msg', Utils().pack(s) )
        command.outCommands.append(displayCmd)    
 def executeCommand(self,command):
     log("IN command %s" % (command.name))
     panel = command.getValue("panel")
     
     db = mongo.MongoDBComponents(info.dbIP,info.dbPort)
     allEvents = db.find_all(info.dbDefault, info.rootTableCollectionName)
     
     s = "<table border='0' cellspacing='0' cellpadding='5'>"
     s += "<tr class='clsGridHeaderRow'>"
     s += "<td>table #</td>"
     s += "<td>venue</td>"
     s += "<td>street</td>"
     s += "<td>street2</td>"
     s += "<td>city</td>"
     s += "<td>state</td>"
     s += "<td>zip</td>"
     s += "<td>country</td>"
     s += "<td>date</td>"
     s += "<td>time</td>"
     s += "<td>hosts</td>"
     s += "<td>guests</td>"
     s += "<td colspan='3'>actions</td>"
     s += "</tr>"
     
     
     
     for ev in allEvents:
         s += "<tr class='clsGridRow'>"
         s += "<td>{0}</td>".format(ev['tableNumber'])
         s += "<td>{0}</td>".format(ev['location']['venue'])
         s += "<td>{0}</td>".format(ev['location']['street'])
         s += "<td>{0}</td>".format(ev['location']['street2'])
         s += "<td>{0}</td>".format(ev['location']['city'])
         s += "<td>{0}</td>".format(ev['location']['state'])
         s += "<td>{0}</td>".format(ev['location']['zip'])
         s += "<td>{0}</td>".format(ev['location']['country'])
         s += "<td>{0}</td>".format(ev['meta']['date'])
         s += "<td>{0}</td>".format(ev['meta']['time'])
         s += "<td>{0}</td>".format(len(ev['hosts']))
         s += "<td>{0}</td>".format(len(ev['guests']))
         s += "<td><input class='clsGridButton' type='button' value='edit' id='cmd_{0}_edit' onclick=\"FWK.say('EditEvent','{1}','{2}');\" /></td>".format(ev['tableNumber'],ev['_id'],panel)
         s += "<td><input class='clsGridButton' type='button' value='delete' id='cmd_{0}_delete' onclick=\"FWK.say('DeleteEvent','{1}','{2}','{3}');\" /></td>".format(ev['tableNumber'],ev['_id'],panel,ev['tableNumber'])
         s += "<td><input class='clsGridButton' type='button' value='process invites' id='cmd_{0}_proc' onclick=\"FWK.say('ProcessInvites','{1}','{2}');\" /></td>".format(ev['tableNumber'],ev['_id'],panel)
         s+= "</tr>"
     
     
     s += "</table>"
     
     
     displayCmd = Command('Display')
     displayCmd.addParameter('panel', panel)
     displayCmd.addParameter('html64', Utils().pack(s) )
     
     command.outCommands.append(displayCmd)   
    def executeCommand(self,command):
        panel = command.getValue("panel")

        Utils().removeFile(info.LogFile)
        
        s = "removed server log file permanently"
        log("command %s - %s" % (command.name,s)) #log after the fact to make sure log file is clean looking ( not half the log event from this command
        
       
        displayCmd = Command('Display')
        displayCmd.addParameter('panel', panel)
        displayCmd.addParameter('html64', Utils().pack(s) )
        command.outCommands.append(displayCmd)        
    def executeCommand(self,command):
        log("IN command %s" % (command.name))
        table_id = command.getValue("table_id")
        panel = command.getValue("panel")
        
        mdb = mongo.MongoDBComponents(info.dbIP,info.dbPort)
        mdb.deleteDocument(info.dbDefault, info.rootTableCollectionName, {'_id': OID.ObjectId(table_id) } )
        s = "Deleted Table #%s" % ( str(table_id) )

        displayCmd = Command('Display')
        displayCmd.addParameter('panel', panel)
        displayCmd.addParameter('html64', Utils().pack(s) )
        
        command.outCommands.append(displayCmd)    
    def executeCommand(self,command):
        log("IN command %s" % (command.name))
        panel = command.getValue("panel")
        s = "<div class='clsPanel'>"
        s += "<b>Information about this Application</b>"
        s += "<div class='clsAbout'>{0} ver {1}.{2}.{3}</div>".format(info.appName,info.versionMajor,info.versionMinor,info.versionRevision)
        s += "<div class='clsAbout'>db://{0}:{1} db name: {2}</div>".format(info.dbIP,info.dbPort,info.dbDefault)
        s += "<div class='clsAbout'>session {0} path</div>".format(command.kontext['SessionGUID'])
        s += ""
        s += "</div>"

        displayCmd = Command('Display')
        displayCmd.addParameter('panel', panel)
        displayCmd.addParameter('html64', Utils().pack(s) )
        command.outCommands.append(displayCmd)
    def executeCommand(self,command):

        username = command.getValue("username")
        oldpassword= command.getValue("oldPassword")
        newpassword = command.getValue("newPassword")
        newpasswordConfirm = command.getValue("newPasswordConfirm")
        log("IN command %s" % (command.name))
        
        from src.framework.core import UserHelper
        
        s = UserHelper().passwd(username, oldpassword, newpassword, newpasswordConfirm)
       
        replyCmd = Command('Alert')
        replyCmd.addParameter('msg', Utils().pack(s) )
        command.outCommands.append(replyCmd)
    def executeCommand(self,command):

        
        log("IN command %s" % (command.name))
        panel = command.getValue("panel")
        s = "<div class='clsPageHeader'>{0}</div>".format(strings.HELP_HEADER)
        s += "<div>"
        s += "<input type='text' class='clsCommandLineInactive' value=''  title='type command here' id='txtCommandLine' />"
        s += "<input type='button' value='exec' id='cmdProcessCommand' onclick=\"FWK.say('ProcCommandLine','txtCommandLine');\" />"
        s += "</div>"
        
        displayCmd = Command('Display')
        displayCmd.addParameter('panel', panel)
        displayCmd.addParameter('html64', Utils().pack(s) )
        command.outCommands.append(displayCmd)
def Request():
    
    start = time.time()
    Header("Content-type: text/html")

    if Env.REQUEST_METHOD != "POST":
        raise InvalidRequestMethod(Env.REQUEST_METHOD + " not supported")
    
    """pass http header - Context"""
    """look at headers"""
    #parse request headers into a dictionary
    headers_in  = dict((N.upper(), V) for N, V in [Item.split(':',1) for Item in Env.ALL_RAW.split('\n') if Item])
    #log(Utils().ConvertDictToString(headers_in))

    referrer = ""
    if( 'REFERER' in headers_in ):
        referrer = Utils().pack(headers_in['REFERER'])

    
    #$to do: check was a FORM application/x-www-form-urlencoded REQUEST
    #post data is base64 encoded
    
    
    post64 = Read()
    postClear = post64.decode('base64','strict')
 
    itineraryDict = json.loads(postClear)
    itinerary = fwk().parseItinerayDict(itineraryDict)
    itinerary.set_KontextVal('script','processor2.py')
    itinerary.set_KontextVal('REFERER64',referrer)
    
    retEnvIT = fwk().processItinerary(itinerary)
    retJSON = fwk().CommandsToJSON( retEnvIT.outCommands,retEnvIT.kontext )

    Write( str(retJSON) )
    
    end = time.time() - start

    #log("JSON SENT <<%s>>]" % (str(retJSON)))
    log("JSON SENT <<%s ... %s chars omitted>>]" % (str(retJSON)[0:300],(len(retJSON) -300) ))
    log(" Processing took %s seconds -------------------------------- \n \n" % (str(end)))

 


    
    
    def executeCommand(self,command):
        log("IN command %s" % (command.name))
        
        panel = command.getValue("panel")
        
        s = "<div class='clsNavigationPanel'>"
        s += "<table class='clsGrid' border='0' cellspacing='0'>"
        s += "<tr>"
        s += "<td>"
        s += "<div class='clsNavigationPanel'><img src='./images/{0}' /></div>".format(info.appLogoImage)
        s += "</td>"

        nav = info.nav
        counter = 0
        for n in nav:
            counter += 1
            s += "<td class='clsNavElement' valign='bottom'>"
            s += "<div id='dvNav_{0}' class='clsHyperlink' ".format(str(counter))
            s += " onclick=\"FWK.pressNav('dvNav_',this,'clsHyperlink'); {0}\" >".format(n['A'])
            s += n['name']
            s += "</div>"
            s += "</td>"
            
        
        s += "</tr>"
        
        s += "</table>"
        s += "</div>"
        
        s64 = s.encode('base64','strict')
        s64 = urllib.quote(s64)

        
        
        
        
        displayCmd = Command('Display')
        displayCmd.addParameter('panel', panel)
        displayCmd.addParameter('html64', s64 )
        command.outCommands.append(displayCmd)
        
        w = "{0} ver{1}.{2}.{3}".format(info.appName,info.versionMajor,info.versionMinor,info.versionRevision)
        w64 = Utils().pack(w)
        DisplayWindowTitle = Command('DisplayWindowTitle')
        DisplayWindowTitle.addParameter('html64', w64 )
        command.outCommands.append(DisplayWindowTitle)
    def executeCommand(self,command):

        
        log("IN command %s" % (command.name))
        panel = command.getValue("panel")
        
        s = "<div class='clsPageHeader'>{0}</div>".format(strings.SUPPORT_HEADER)
        supportPeople = info.supportContacts
        for supp in supportPeople:
            s += "<div>"
            s += "<a href='mailto:{0}'>{1}</a>".format(supp['email'],supp['name'])
            s += "</div>"
        
        displayCmd = Command('Display')
        displayCmd.addParameter('panel', panel)
        displayCmd.addParameter('html64', Utils().pack(s) )
        command.outCommands.append(displayCmd)
    def executeCommand(self,command):

        
        log("IN command %s" % (command.name))
        
        kredbits = Utils().unpack( command.kontext['kreds']).split('_')
        username = kredbits[0]
        
        panel = command.getValue("panel")
        s = "<div class='clsPageHeader'>{0}</div>".format(strings.PWDRESET_HEADER)
        s += "<div>"
        s += "<table>"
        
        s += "<tr><td>"
        s += "user:</td><td>"
        s += "<input type='text' class='clsTextbox' value='{0}'  title='user' id='txtUsername' />".format( username )
        s += "</td></tr>"
        
        s += "<tr><td>"
        s += "old password:</td><td>"
        s += "<input type='password' class='clsTextbox' value=''  title='old password' id='txtPwdOld' />"
        s += "</td></tr>"
        
        s += "<tr><td>"
        s += "new password:</td><td>"
        s += "<input type='password' class='clsTextbox' value=''  title='new password' id='txtPwdNew' />"
        s += "</td></tr>"
        
        s += "<tr><td>confirm password:</td><td>"
        s += "<input type='password' class='clsTextbox' value=''  title='confirm new password' id='txtPwdConfirm' />"
        s += "</td></tr>"
        
        s += "<tr><td>"
        s += "<input type='button' value='save' id='cmdProcessCommand' onclick=\"FWK.say('Passwd','txtUsername','txtPwdOld','txtPwdNew','txtPwdConfirm');\" />"
        s += "</td></tr>"
        
        s += "</table>"
        s += "</div>"
        
        displayCmd = Command('Display')
        displayCmd.addParameter('panel', panel)
        displayCmd.addParameter('html64', Utils().pack(s) )
        command.outCommands.append(displayCmd)
 def executeCommand(self,command):
     log("IN command %s" % (command.name))
     panel = command.getValue("panel")
     table_id = command.getValue("table_id")
     mongoHelper, tableDoc = tp.targetMongo(info.dbDefault,info.rootTableCollectionName,
                                  {'_id':OID.ObjectId(table_id)},
                                  info)
     
     #fix the error on passing back ObjectId -- need to translate this back on saveing ...
     tableDoc['_id'] = table_id
     
     tableJSON = json.dumps(tableDoc)
     
     
     loadJS = Command('LoadAppSpecificJS')
     loadJS.addParameter('panel', panel)
     loadJS.addParameter('JSON64', Utils().pack(tableJSON) )
     loadJS.addParameter('JSmoduleToCall','APP.inviteMx')
     command.outCommands.append(loadJS)
 def executeCommand(self,command):
    
     panel = command.getValue("panel")
     lines = command.getValue("lines")
     intLines = int(lines)
     
     
     s = "<div id='windowRemoteLog' class='clsPanel'>"
     s += "<b>Server Log Remote View</b>"
     s += "<span id='xRemoteLog' title='close panel' class='clsXWindowX' onclick=\" FWK.say('ClearXwindow',this.id); \">x</span>"
     s += "<div class='clsLog'><textarea id='TexAreaLog' class='clsTextAreaLog'>"
     s += Utils().tail(info.LogFile,intLines)
     s += "</textarea></div>"
   
     s += "<div class='clsAbout'><input type='button' value='clear server log' onclick=\" FWK.say('RemoveRemoteLog','%s',25); \" /></div>" % panel
     s += "</div>"
     
     log("IN command %s( %s %s)" % (command.name,lines,panel)) #log after the fact to make sure log file is clean looking ( not half the log event from this command
     
     
     displayCmd = Command('Display')
     displayCmd.addParameter('panel', panel)
     displayCmd.addParameter('html64', Utils().pack(s) )
     command.outCommands.append(displayCmd)        
 def executeCommand(self,command):
     
     log("IN command %s" % (command.name))
     panel = command.getValue("panel")
     
     s = "<div class='clsPanel'>"
     
     from src.framework import coreCommands
     from src.custom import domainCommands
     
     s += "<div class='clsHeader'>core commands</div>"
     s = self.listCmds(s,'coreCommands', dir(coreCommands) ,info.commandCoreTuple)
     s += "<div class='clsHeader'>custom commands</div>"
     s = self.listCmds(s, 'domainCommands',dir(domainCommands),info.commandDomainTuple)
     
     
     
     s += "</div>"
     
     
     displayCmd = Command('Display')
     displayCmd.addParameter('panel', panel)
     displayCmd.addParameter('html64', Utils().pack(s) )
     command.outCommands.append(displayCmd)
    def executeCommand(self,command):
        
        import uuid
        g = uuid.uuid1()
        gs = Utils().pack(str(g))
        panel = command.getValue("panel")
        
        log("setting SessionGUID %s" % (gs))
        command.kontext['SessionGUID'] = gs
        setKontext = Command('SetKontext')
        setKontext.addParameter('SessionGUID', gs)
        command.outCommands.append(setKontext)

        Framework().intializeSystem(info)

        if( info.authenticateUser == True ):
            
            
            s = "<div><form id='frmLogin'>"
            s += "<table cellpadding='5'><tr><td>"
            s += "<img src='%s' />"
            s += "</td><td>"
            s += "<table>"
            s += "<tr><td>"
            s += "<DIV class='clsTextbox'>username:</DIV> </td>"            
            s += "<td>"            
            s += "<input type='text' value='' id='txtUsr'/>"
            s += "</td></tr>"
            s += "<tr><td>"
            s += "<DIV class='clsTextbox'>password: </DIV></td>"            
            s += "<td>"               
            s += "<input type='password' value='' id='txtPwd' />"
            s += "</td></tr>"
            s += "<tr><td>&nbsp;</td><td>"
            s += "<input type='button' value='%s' onclick=\" FWK.say('LocalLogin','%s'); \" />"
            s += "</td></tr></table></td></tr></table></form></div>"
            
            
            s = s % (info.LoginLogoURL,strings.LOGIN,panel)
            
            
            beforescript = """ 
            //JavaScript
            displayMsg('Please enter your username and password',msgCode.info);
            """
            
            afterscript = """
            try { document.getElementById('txtUsr').focus(); } catch (expp) {} 
            
            """
            
            displayCmd = Command('Display')
            displayCmd.addParameter('panel', panel)
            displayCmd.addParameter('html64', Utils().pack(s) )
            displayCmd.beforeload_JScript = Utils().pack(beforescript)
            displayCmd.afterload_JScript = Utils().pack(afterscript)
            
            
            command.outCommands.append(displayCmd)   
        else:
            """display navigation"""
            showNavigation = Command('ShowNavigation')
            showNavigation.addParameter('panel', panel)
            command.outCommands.append(showNavigation)
 def executeCommand(self,command):
     log("%s signed out" % (command.kontext['SessionGUID'])) 
     
     displayCmd = Command('Intialize')
     displayCmd.addParameter('panel', 'farnorth')
     command.outCommands.append(displayCmd)      
 def test_log(self):
     log("this is a test of the core logging system")
     print "testing log {0}".format(info.LogFile)