/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#include "base/polygraph.h"
#include "xstd/h/iostream.h"
#include "xstd/h/sstream.h"
#include "runtime/IOBuf.h"
#include "runtime/httpText.h"
#include "client/CltDataFilterRegistry.h"
#include "client/UserCred.h"
#include "client/CltXact.h"
class HttpBasicAuthenticator: public CltDataFilterRegistry::Filter {
public:
virtual String id() const { return "HttpBasicAuthenticator-0.1"; }
virtual void describe(ostream &os) const;
virtual void apply(CltDataFilterRegistry::Producer &p, IOBuf &buf);
};
static bool registered = registered ||
TheCltDataFilterRegistry().add(new HttpBasicAuthenticator);
void HttpBasicAuthenticator::describe(ostream &os) const {
os << "adds HTTP Basic Authentication headers";
}
void HttpBasicAuthenticator::apply(CltDataFilterRegistry::Producer &p, IOBuf &buf) {
ofixedstream os(buf.space(), buf.spaceSize());
static const String hfpInitiatedBy = "Initiated-By: ";
const char *ip = p->conn()->laddr().addrN().image();
os << hfpInitiatedBy << ip << crlf;
const UserCred &credentials = p->credentials();
if (!credentials.image())
return;
PrintBase64(os << hfpProxyAuthorization,
credentials.image().data(), credentials.image().len()) << crlf;
buf.appended((std::streamoff)os.tellp());
}
syntax highlighted by Code2HTML, v. 0.9.1