Return TypeFunction nameArguments
hzEcodehdsApp::ReadWebapp(hzXmlNode*,)

Declared in file: hzDissemino.h
Defined in file : hdsConfig.cpp

Function Logic:

0:START 1:hzXmlNode::NameEQ 2:!pRoot->NameEQ(webappCfg) 3:hzXmlNode::txtName hzLogger::Log 4:Return E_SYNTAX 5:hzXmlNode::txtName hzLogger::Log ai 6:ai.Valid(); 7:ai.NameEQ(name) 8:hzAttrset::Value appname hzAttrset::NameEQ 9:ai.NameEQ(sslPvtKey) 10:hzAttrset::Value m_SSL_PvtKey hzAttrset::NameEQ 11:ai.NameEQ(sslCert) 12:hzAttrset::Value m_SSL_Cert hzAttrset::NameEQ 13:ai.NameEQ(sslCertCA) 14:hzAttrset::Value m_SSL_CertCA hzAttrset::NameEQ 15:ai.NameEQ(domain) 16:hzAttrset::Value domain hzAttrset::NameEQ 17:ai.NameEQ(subdom) 18:hzAttrset::Value subdom hzAttrset::NameEQ 19:ai.NameEQ(basedir) 20:hzAttrset::Value basedir hzAttrset::NameEQ 21:ai.NameEQ(docroot) 22:hzAttrset::Value m_Docroot hzAttrset::NameEQ 23:ai.NameEQ(configs) 24:hzAttrset::Value m_Configdir hzAttrset::NameEQ 25:ai.NameEQ(datadir) 26:hzAttrset::Value m_Datadir hzAttrset::NameEQ 27:ai.NameEQ(logroot) 28:hzAttrset::Value m_Logroot hzAttrset::NameEQ 29:ai.NameEQ(cookieName) 30:hzAttrset::Value cookieBase hzAttrset::NameEQ 31:ai.NameEQ(masterpath) 32:hzAttrset::Value m_MasterPath hzAttrset::NameEQ 33:ai.NameEQ(masteruser) 34:hzAttrset::Value m_MasterUser hzAttrset::NameEQ 35:ai.NameEQ(masterpass) 36:hzAttrset::Value m_MasterPass hzAttrset::NameEQ 37:ai.NameEQ(smtpAddr) 38:hzAttrset::Value m_SmtpAddr hzAttrset::NameEQ 39:ai.NameEQ(smtpUser) 40:hzAttrset::Value m_SmtpUser hzAttrset::NameEQ 41:ai.NameEQ(smtpPass) 42:hzAttrset::Value m_SmtpPass hzAttrset::NameEQ 43:ai.NameEQ(usernameFld) 44:hzAttrset::Value m_UsernameFld hzAttrset::NameEQ 45:ai.NameEQ(userpassFld) 46:hzAttrset::Value m_UserpassFld hzAttrset::NameEQ 47:ai.NameEQ(loghits) 48:hzAttrset::Value m_AllHits hzAttrset::NameEQ 49:ai.NameEQ(language) 50:hzAttrset::Value m_DefaultLang hzAttrset::NameEQ 51:ai.NameEQ(login) 52:hzAttrset::ValEQ m_OpFlags hzAttrset::NameEQ 53:ai.NameEQ(robot) 54:hzAttrset::ValEQ m_OpFlags hzAttrset::NameEQ 55:ai.NameEQ(siteGuide) 56:hzAttrset::ValEQ m_OpFlags hzAttrset::NameEQ 57:ai.NameEQ(portSTD) 58:hzAttrset::Value hzAttrset::Value atoi m_nPortSTD hzAttrset::NameEQ 59:ai.NameEQ(portSSL) 60:hzAttrset::Value hzAttrset::Value atoi m_nPortSSL 61:rc hzXmlNode::Fname hzXmlNode::Line hzAttrset::Name hzAttrset::Value hzLogger::Log 62:basedir 63:hzLogger::Log 64:basedir[basedir.Length()-1]!=(char)47 65:basedir 66:hzLogger::Log m_Docroot m_Datadir m_Logroot m_Configdir 67:cookieBase 68:hdsApp::SetCookieName 69:m_CookieName 70:rc==E_OK 71:!m_Appname 72:rc hzLogger::Log 73:!m_Domain 74:rc hzLogger::Log 75:!m_Docroot 76:rc hzLogger::Log 77:!m_Datadir 78:rc hzLogger::Log 79:!m_Logroot 80:rc hzLogger::Log 81:!m_MasterUser 82:rc hzLogger::Log 83:!m_MasterPass 84:rc hzLogger::Log 85:!m_DefaultLang 86:rc hzLogger::Log 87:rc!=E_OK 88:Return rc 89:!m_Configdir 90:m_Configdir 91:m_AllHits 92:pClass hdbClass::InitStart hdbClass::InitMember hdbClass::InitMember hdbClass::InitMember hdbClass::InitDone hdbADP::RegisterDataClass rc 93:!m_pDfltLang 94:m_DefaultLang m_pDfltLang m_pDfltLang hzMapS::Insert 95:m_OpFlags&DS_APP_SUBSCRIBERS 96:hdbADP::InitSubscribers rc 97:rc!=E_OK 98:hzLogger::Log 99:Return E_NOINIT 100:hdsApp::InitResources rc 101:rc!=E_OK 102:Return hzerr(rc,Resource Initialization Failed) 103:m_Images 104:rc==E_OK&&pN; 105:pN->NameEQ(fldspec) 106:hdsApp::_readFldspec rc hzXmlNode::NameEQ 107:pN->NameEQ(rgxtype) 108:hdsApp::_readRgxType rc hzXmlNode::NameEQ 109:pN->NameEQ(enum) 110:hdsApp::_readDataEnum rc hzXmlNode::NameEQ 111:pN->NameEQ(user) 112:hdsApp::_readUser rc hzXmlNode::NameEQ 113:pN->NameEQ(class) 114:hdsApp::_readClass rc hzXmlNode::NameEQ 115:pN->NameEQ(repos) 116:hdsApp::_readRepos rc hzXmlNode::NameEQ 117:pN->NameEQ(login) 118:hdsApp::_readStdLogin rc hzXmlNode::NameEQ 119:pN->NameEQ(logout) 120:hdsApp::_readLogout rc hzXmlNode::NameEQ 121:pN->NameEQ(xpage) 122:hdsApp::_readPage rc hzXmlNode::NameEQ 123:pN->NameEQ(xstyle) 124:hdsApp::_readCSS rc hzXmlNode::NameEQ 125:pN->NameEQ(xinclude) 126:hdsApp::_readInclude rc hzXmlNode::NameEQ 127:pN->NameEQ(xscript) 128:hdsApp::_readScript rc hzXmlNode::NameEQ 129:pN->NameEQ(xtreeDcl) 130:hdsApp::_readXtreeDcl rc hzXmlNode::NameEQ 131:pN->NameEQ(xfixfile) 132:hdsApp::_readFixFile rc hzXmlNode::NameEQ 133:pN->NameEQ(xfixdir) 134:hdsApp::_readFixDir rc hzXmlNode::NameEQ 135:pN->NameEQ(xmiscdir) 136:hdsApp::_readMiscDir rc hzXmlNode::NameEQ 137:pN->NameEQ(siteLanguages) 138:hdsApp::_readSiteLangs rc hzXmlNode::NameEQ 139:pN->NameEQ(navigation) 140:hdsApp::_readNav rc hzXmlNode::NameEQ 141:pN->NameEQ(xformHdl) 142:hdsApp::_readFormHdl rc hzXmlNode::NameEQ 143:pN->NameEQ(xformDef) 144:hdsApp::_readFormDef rc hzXmlNode::NameEQ 145:pN->NameEQ(includeCfg) 146:hzPair::Clear ai 147:ai.Valid(); 148:ai.NameEQ(dir) 149:hzAttrset::Value p hzAttrset::NameEQ 150:ai.NameEQ(fname) 151:hzAttrset::Value p 152:rc hzXmlNode::Fname hzXmlNode::Line hzAttrset::Name hzAttrset::Value hzLogger::Log 153:hdsApp::_loadInclFile rc hzXmlNode::NameEQ 154:pN->NameEQ(passive) 155:hzPair::Clear ai 156:ai.Valid(); 157:ai.NameEQ(files) 158:hzAttrset::Value p hzAttrset::NameEQ 159:ai.NameEQ(htype) 160:hzAttrset::Value p 161:rc hzXmlNode::Fname hzXmlNode::Line hzAttrset::Name hzAttrset::Value hzLogger::Log 162:!p.name 163:rc hzXmlNode::Fname hzXmlNode::Line hzLogger::Log 164:!p.value 165:rc hzXmlNode::Fname hzXmlNode::Line hzLogger::Log 166:rc==E_OK 167:hzList::Add 168:pN->NameEQ(recaptcha) 169:ai.Valid(); 170:ai.NameEQ(public) 171:hzAttrset::Value m_KeyPublic hzAttrset::NameEQ 172:ai.NameEQ(private) 173:hzAttrset::Value m_KeyPrivate 174:rc hzXmlNode::Fname hzXmlNode::Line hzAttrset::Name hzAttrset::Value hzLogger::Log 175:hzXmlNode::Fname hzXmlNode::Line hzLogger::Log 176:rc hzXmlNode::Fname hzXmlNode::Line hzXmlNode::txtName hzLogger::Log hzLogger::Out hzLogger::Out 177:rc!=E_OK 178:Err2Txt hzLogger::Log 179:Return rc 180:!m_DefaultLang 181:m_DefaultLang 182:AssertDir rc 183:rc!=E_OK 184:hzLogger::Log 185:Return E_WRITEFAIL 186:AssertDir rc 187:rc!=E_OK 188:hzLogger::Log 189:Return E_WRITEFAIL 190:chdir(*m_Docroot)<0 191:hzLogger::Log rc 192:hzLogger::Log 193:Err2Txt hzLogger::Log 194:Return rc

Function body:

hzEcode hdsApp::ReadWebapp (hzXmlNode* pRoot)
{
   _hzfunc("hdsApp::ReadWebapp") ;
   hzDocXml            X ;
   hzChain             Z ;
   hzAttrset           ai ;
   hzXmlNode*          pN ;
   hdbClass*           pClass ;
   hzPair              p ;
   hzString            S ;
   hzString            appname ;
   hzString            cookieBase ;
   hzString            basedir ;
   hzDomain            domain ;
   hzDomain            subdom ;
   hzEcode             rc = E_OK ;
   if (!pRoot->NameEQ("webappCfg"))
       { m_pLog->Log("Expected root tag of <webappCfg>. Tag <%s> disallowed\n", pRoot->txtName()) ; return E_SYNTAX ; }
   m_pLog->Log("Obtained project's XML root %s\n", pRoot->txtName()) ;
   for (ai = pRoot ; ai.Valid() ; ai.Advance())
   {
       if      (ai.NameEQ("name"))         appname         = ai.Value() ;
       else if (ai.NameEQ("sslPvtKey"))    m_SSL_PvtKey    = ai.Value() ;
       else if (ai.NameEQ("sslCert"))      m_SSL_Cert      = ai.Value() ;
       else if (ai.NameEQ("sslCertCA"))    m_SSL_CertCA    = ai.Value() ;
       else if (ai.NameEQ("domain"))       domain          = ai.Value() ;
       else if (ai.NameEQ("subdom"))       subdom          = ai.Value() ;
       else if (ai.NameEQ("basedir"))      basedir         = ai.Value() ;
       else if (ai.NameEQ("docroot"))      m_Docroot       = ai.Value() ;
       else if (ai.NameEQ("configs"))      m_Configdir     = ai.Value() ;
       else if (ai.NameEQ("datadir"))      m_Datadir       = ai.Value() ;
       else if (ai.NameEQ("logroot"))      m_Logroot       = ai.Value() ;
       else if (ai.NameEQ("cookieName"))   cookieBase      = ai.Value() ;
       else if (ai.NameEQ("masterpath"))   m_MasterPath    = ai.Value() ;
       else if (ai.NameEQ("masteruser"))   m_MasterUser    = ai.Value() ;
       else if (ai.NameEQ("masterpass"))   m_MasterPass    = ai.Value() ;
       else if (ai.NameEQ("smtpAddr"))     m_SmtpAddr      = ai.Value() ;
       else if (ai.NameEQ("smtpUser"))     m_SmtpUser      = ai.Value() ;
       else if (ai.NameEQ("smtpPass"))     m_SmtpPass      = ai.Value() ;
       else if (ai.NameEQ("usernameFld"))  m_UsernameFld   = ai.Value() ;
       else if (ai.NameEQ("userpassFld"))  m_UserpassFld   = ai.Value() ;
       else if (ai.NameEQ("loghits"))      m_AllHits       = ai.Value() ;
       else if (ai.NameEQ("language"))     m_DefaultLang   = ai.Value() ;
       else if (ai.NameEQ("login"))        m_OpFlags |= ai.ValEQ("true") ? DS_APP_SUBSCRIBERS : 0;
       else if (ai.NameEQ("robot"))        m_OpFlags |= ai.ValEQ("true") ? DS_APP_ROBOT : 0;
       else if (ai.NameEQ("siteGuide"))    m_OpFlags |= ai.ValEQ("true") ? DS_APP_GUIDE : 0;
       else if (ai.NameEQ("portSTD"))      m_nPortSTD = ai.Value() ? atoi(ai.Value()) : 0;
       else if (ai.NameEQ("portSSL"))      m_nPortSSL = ai.Value() ? atoi(ai.Value()) : 0;
       else
       {
           rc = E_SYNTAX ;
           m_pLog->Log("File %s Line %d <webappCfg> tag: Invalid param (%s=%s)\n", pRoot->Fname(), pRoot->Line(), ai.Name(), ai.Value()) ;
       }
   }
   if (basedir)
   {
       m_pLog->Log("Have basedir of %s\n", *basedir) ;
       if (basedir[basedir.Length()-1]!= CHAR_FWSLASH)
           basedir += "/" ;
       m_pLog->Log("Have basedir of %s\n", *basedir) ;
       m_Docroot = basedir + "docroot" ;
       m_Datadir = basedir + "data" ;
       m_Logroot = basedir + "logs" ;
       m_Configdir = basedir + "config" ;
   }
   if (cookieBase)
       SetCookieName(cookieBase) ;
   else
       m_CookieName = "_hz_dissemino_" ;
   if (rc == E_OK)
   {
       if (!m_Appname)     { rc = E_NOINIT ; m_pLog->Log("No Project/Application name\n") ; }
       if (!m_Domain)      { rc = E_NOINIT ; m_pLog->Log("No Project Domain\n") ; }
       if (!m_Docroot)     { rc = E_NOINIT ; m_pLog->Log("No document root directory\n") ; }
       if (!m_Datadir)     { rc = E_NOINIT ; m_pLog->Log("No data repos directory\n") ; }
       if (!m_Logroot)     { rc = E_NOINIT ; m_pLog->Log("No logs root directory\n") ; }
       if (!m_MasterUser)  { rc = E_NOINIT ; m_pLog->Log("No admin usename\n") ; }
       if (!m_MasterPass)  { rc = E_NOINIT ; m_pLog->Log("No admin password\n") ; }
       if (!m_DefaultLang) { rc = E_NOINIT ; m_pLog->Log("No default language\n") ; }
   }
   if (rc != E_OK)
       return rc ;
   if (!m_Configdir)
       m_Configdir = m_Docroot ;
   if (m_AllHits)
   {
       pClass = new hdbClass(m_ADP, HDB_CLASS_DESIG_SYS) ;
       pClass->InitStart(m_AllHits) ;
       pClass->InitMember("tdstamp",   datatype_XDATE,     HDB_MBR_POP_SINGLE_COMPULSORY) ;
       pClass->InitMember("ipaddr",    datatype_IPADDR,    HDB_MBR_POP_SINGLE_COMPULSORY) ;
       pClass->InitMember("url",       datatype_STRING,    HDB_MBR_POP_SINGLE_COMPULSORY) ;
       pClass->InitDone() ;
       rc = m_ADP.RegisterDataClass(pClass) ;
   }
   if (!m_pDfltLang)
   {
       m_DefaultLang = "en-US" ;
       m_pDfltLang = new hdsLang() ;
       m_pDfltLang->m_Code = m_DefaultLang ;
       m_Languages.Insert(m_pDfltLang->m_Code, m_pDfltLang) ;
   }
   if (m_OpFlags & DS_APP_SUBSCRIBERS)
   {
       rc = m_ADP.InitSubscribers(m_Datadir) ;
       if (rc != E_OK)
           { m_pLog->Log("The subscriber cache is not found in the ADP\n") ; return E_NOINIT ; }
   }
   rc = InitResources() ;
   if (rc != E_OK)
       return hzerr(rc, "Resource Initialization Failed") ;
   m_Images = m_Docroot + "/img" ;
   for (pN = pRoot->GetFirstChild() ; rc == E_OK && pN ; pN = pN->Sibling())
   {
       if      (pN->NameEQ("fldspec"))         rc = _readFldspec(pN) ;
       else if (pN->NameEQ("rgxtype"))         rc = _readRgxType(pN) ;
       else if (pN->NameEQ("enum"))            rc = _readDataEnum(pN) ;
       else if (pN->NameEQ("user"))            rc = _readUser(pN) ;
       else if (pN->NameEQ("class"))           rc = _readClass(pN) ;
       else if (pN->NameEQ("repos"))           rc = _readRepos(pN) ;
       else if (pN->NameEQ("login"))           rc = _readStdLogin(pN) ;
       else if (pN->NameEQ("logout"))          rc = _readLogout(pN) ;
       else if (pN->NameEQ("xpage"))           rc = _readPage(pN) ;
       else if (pN->NameEQ("xstyle"))          rc = _readCSS(pN) ;
       else if (pN->NameEQ("xinclude"))        rc = _readInclude(pN, 0,0);
       else if (pN->NameEQ("xscript"))         rc = _readScript(pN) ;
       else if (pN->NameEQ("xtreeDcl"))        rc = _readXtreeDcl(pN, 0);
       else if (pN->NameEQ("xfixfile"))        rc = _readFixFile(pN) ;
       else if (pN->NameEQ("xfixdir"))         rc = _readFixDir(pN) ;
       else if (pN->NameEQ("xmiscdir"))        rc = _readMiscDir(pN) ;
       else if (pN->NameEQ("siteLanguages"))   rc = _readSiteLangs(pN) ;
       else if (pN->NameEQ("navigation"))      rc = _readNav(pN) ;
       else if (pN->NameEQ("xformHdl"))        rc = _readFormHdl(pN) ;
       else if (pN->NameEQ("xformDef"))        rc = _readFormDef(pN) ;
       else if (pN->NameEQ("includeCfg"))
       {
           p.Clear() ;
           for (ai = pN ; ai.Valid() ; ai.Advance())
           {
               if      (ai.NameEQ("dir"))      p.name = ai.Value() ;
               else if (ai.NameEQ("fname"))    p.value = ai.Value() ;
               else
               {
                   rc = E_SYNTAX ;
                   m_pLog->Log("File %s Line %d Reading <include> tag: Invalid param (%s=%s)\n", pN->Fname(), pN->Line(), ai.Name(), ai.Value()) ;
               }
           }
           rc = _loadInclFile(p.name, p.value) ;
       }
       else if (pN->NameEQ("passive"))
       {
           p.Clear() ;
           for (ai = pN ; ai.Valid() ; ai.Advance())
           {
               if      (ai.NameEQ("files"))    p.name = ai.Value() ;
               else if (ai.NameEQ("htype"))    p.value = ai.Value() ;
               else
               {
                   rc = E_SYNTAX ;
                   m_pLog->Log("File %s Line %d Reading <passive> tag: Invalid param (%s=%s)\n", pN->Fname(), pN->Line(), ai.Name(), ai.Value()) ;
               }
           }
           if (!p.name)    { rc = E_SYNTAX ; m_pLog->Log("File %s Line %d <passive> No files specified\n", pN->Fname(), pN->Line()) ; }
           if (!p.value)   { rc = E_SYNTAX ; m_pLog->Log("File %s Line %d <passive> No HTML type specified\n", pN->Fname(), pN->Line()) ; }
           if (rc == E_OK)
               m_Passives.Add(p) ;
       }
       else if (pN->NameEQ("recaptcha"))
       {
           for (ai = pN ; ai.Valid() ; ai.Advance())
           {
               if      (ai.NameEQ("public"))   m_KeyPublic = ai.Value() ;
               else if (ai.NameEQ("private"))  m_KeyPrivate = ai.Value() ;
               else
               {
                   rc = E_SYNTAX ;
                   m_pLog->Log("File %s Line %d Reading <recaptcha> tag: Invalid param (%s=%s)\n", pN->Fname(), pN->Line(), ai.Name(), ai.Value()) ;
               }
           }
           m_pLog->Log("File %s Line %d Set Google Recaptcha keys to public %s private %s\n", pN->Fname(), pN->Line(), *m_KeyPublic, *m_KeyPrivate) ;
       }
       else
       {
           rc = E_SYNTAX ;
           m_pLog->Log("File %s Line %d tag <%s> unexpected. Only the following are allowed\n", pN->Fname(), pN->Line(), pN->txtName()) ;
           m_pLog->Out("\tfldspec|rgxtype|enum|user|class|repos|login|logout|xpage|xstyle|xinclude|xscript|xtreeDcl|xfixfile|xfixdir|xmiscdir OR\n") ;
           m_pLog->Out("\tsiteLanguages|navigation|initstate|xformHdl|xformDef|includeCfg|passive|recaptcha\n") ;
       }
   }
   if (rc != E_OK)
   {
       m_pLog->Log("Aborted in config. Err=%s\n", Err2Txt(rc)) ;
       return rc ;
   }
   /*
   **  ** Set up the subscriber class and repository
   **      */
   if (!m_DefaultLang)
       m_DefaultLang = "en-US" ;
   rc = AssertDir(m_Docroot, 0777);
   if (rc != E_OK)
       { m_pLog->Log("Cannot assert document root %s\n", *m_Docroot) ; return E_WRITEFAIL ; }
   rc = AssertDir(m_Datadir, 0777);
   if (rc != E_OK)
       { m_pLog->Log("Cannot assert data directory %s\n", *m_Datadir) ; return E_WRITEFAIL ; }
   if (chdir(*m_Docroot) < 0)
   {
       m_pLog->Log("Cannot CD to docroot [%s]\n", *m_Docroot) ;
       rc = E_NOINIT ;
   }
   else
       m_pLog->Log("Now operating in docroot [%s]\n", *m_Docroot) ;
   m_pLog->Log("Status=%s\n", Err2Txt(rc)) ;
   return rc ;
}