void CEspApplicationPort::appendBinding(CEspBindingEntry* entry, bool isdefault) { WriteLockBlock wblock(rwLock); if (bindingCount + 1 == MAX_ESP_BINDINGS) throw MakeStringException(0,"Error - reached maximum number of bindings allowed."); bindings[bindingCount]=entry; if (isdefault) defBinding=bindingCount; bindingCount++; EspHttpBinding *httpbind = dynamic_cast<EspHttpBinding *>(entry->queryBinding()); if (httpbind) { if (!rootAuth) rootAuth = httpbind->rootAuthRequired(); int width=0; bool resizable=false; bool scroll=false; httpbind->getNavSettings(width, resizable, scroll); if (navWidth<width) navWidth=width; if (!navResize) navResize=resizable; if (!navScroll) navScroll=scroll; } }
void CEspApplicationPort::appendBinding(CEspBindingEntry* entry, bool isdefault) { bindings[bindingCount]=entry; if (isdefault) defBinding=bindingCount; bindingCount++; EspHttpBinding *httpbind = dynamic_cast<EspHttpBinding *>(entry->queryBinding()); if (httpbind) { if (!rootAuth) rootAuth = httpbind->rootAuthRequired(); int width=0; bool resizable=false; bool scroll=false; httpbind->getNavSettings(width, resizable, scroll); if (navWidth<width) navWidth=width; if (!navResize) navResize=resizable; if (!navScroll) navScroll=scroll; } }
const StringBuffer &CEspApplicationPort::getAppFrameHtml(time_t &modified, const char *inner, StringBuffer &html, IEspContext* ctx) { CEspBindingEntry* bindingentry = getDefaultBinding(); if(bindingentry) { EspHttpBinding *httpbind = dynamic_cast<EspHttpBinding *>(bindingentry->queryBinding()); if(httpbind) { const char* rootpage = httpbind->getRootPage(); if(rootpage && *rootpage) { html.loadFile(StringBuffer(getCFD()).append(rootpage).str()); return html; } } } if (!xslp) throw MakeStringException(0,"Error - CEspApplicationPort XSLT processor not initialized"); bool embedded_url=(inner&&*inner); StringBuffer params; bool needRefresh = true; if (!getUrlParams(ctx->queryRequestParameters(), params)) { if (params.length()==0) needRefresh = false; if (ctx->getClientVersion()>0) { params.appendf("%cver_=%g", params.length()?'&':'?', ctx->getClientVersion()); needRefresh = true; } } if (needRefresh || embedded_url || !appFrameHtml.length()) { int passwordDaysRemaining = -1;//-1 means dont display change password screen #ifdef _USE_OPENLDAP ISecUser* user = ctx->queryUser(); ISecManager* secmgr = ctx->querySecManager(); if(user && secmgr) { passwordDaysRemaining = user->getPasswordDaysRemaining();//-1 if expired, -2 if never expires int passwordExpirationDays = (int)secmgr->getPasswordExpirationWarningDays(); if (passwordDaysRemaining==-2 || passwordDaysRemaining > passwordExpirationDays) passwordDaysRemaining = -1; } #endif StringBuffer xml; StringBuffer encoded_inner; if(inner && *inner) encodeXML(inner, encoded_inner); // replace & with &s; params.replaceString("&","&"); xml.appendf("<EspApplicationFrame title=\"%s\" navWidth=\"%d\" navResize=\"%d\" navScroll=\"%d\" inner=\"%s\" params=\"%s\" passwordDays=\"%d\"/>", getESPContainer()->getFrameTitle(), navWidth, navResize, navScroll, (inner&&*inner) ? encoded_inner.str() : "?main", params.str(), passwordDaysRemaining); Owned<IXslTransform> xform = xslp->createXslTransform(); xform->loadXslFromFile(StringBuffer(getCFD()).append("./xslt/appframe.xsl").str()); xform->setXmlSource(xml.str(), xml.length()+1); xform->transform( (needRefresh || embedded_url) ? html.clear() : appFrameHtml.clear()); } if (!needRefresh && !embedded_url) html.clear().append(appFrameHtml.str()); static time_t startup_time = time(NULL); modified = startup_time; return html; }
int CSoapService::processHeader(CHeader* header, IEspContext* ctx) { int num = header->getNumBlocks(); if(ctx == NULL) return 0; int returnValue = 0; bool authenticated = !ctx->toBeAuthenticated(); for (int i = 0; i < num; i++) { IRpcMessage* oneblock = header->getHeaderBlock(i); if(oneblock == NULL) continue; if(strcmp(oneblock->get_name(), "Security") == 0) { bool encodeXML = oneblock->getEncodeXml(); oneblock->setEncodeXml(false); StringBuffer username, password,realm; oneblock->get_value("UsernameToken/Username", username); oneblock->get_value("UsernameToken/Password", password); oneblock->get_value("RealmToken/Realm", realm); oneblock->setEncodeXml(encodeXML); //DBGLOG("username=%s, password=%s", username.str(), password.str()); if(username.length() > 0) { ctx->setUserID(username.str()); ctx->setPassword(password.str()); if(realm.length()>0) ctx->setRealm(realm.str()); ISecManager* secmgr = ctx->querySecManager(); if(secmgr != NULL) { ISecUser *user = ctx->queryUser(); if(user==NULL) { user = secmgr->createUser(username.str()); ctx->setUser(user); } if(user == NULL) { WARNLOG("Couldn't create ISecUser object for %s", username.str()); } user->setName(username.str()); user->credentials().setPassword(password.str()); if(realm.length()>0) user->setRealm(realm.str()); } if(ctx->toBeAuthenticated()) { if(stricmp(m_soapbinding->getTransportType(), "http") == 0) { EspHttpBinding* httpbinding = dynamic_cast<EspHttpBinding*>(m_soapbinding.get()); authenticated = httpbinding->doAuth(ctx); } else { authenticated = false; } if(!authenticated) returnValue = SOAP_AUTHENTICATION_ERROR; break; } } } } if (returnValue == 0) { if (authenticated) return 0; returnValue = SOAP_AUTHENTICATION_REQUIRED; } StringBuffer peerStr; ctx->getPeer(peerStr); const char* userId = ctx->queryUserId(); VStringBuffer msg("SOAP request from %s@%s.", (userId&&*userId)?userId:"unknown", (peerStr.length()>0)?peerStr.str():"unknown"); if (returnValue == SOAP_AUTHENTICATION_ERROR) msg.append(" User authentication failed"); else msg.append(" User authentication required"); DBGLOG("%s", msg.str()); return returnValue; }